티스토리 뷰
JOIN
테이블을 서로 연결해 하나의 테이블인 것처럼 보여준다.
하나의 데이터가 테이블이 아닌 여러 테이블에서 가져와 출력하기 때문에 출력 결과가 크다.
SELECT employees.employee_id,
employees.last_name,
employees.salary,
departments.department_name
FROM employees JOIN departments
ON employees.department_id = departments.department_id;
SELECT e.employee_id,
e.last_name,
e.salary,
d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
같은 방식이더라도 alias를 이용해 위치를 표기하면 성능이 좋아진다.
테이블 | 조인 조건 수 |
2 | 1 |
3 | 2 |
N | N-1 |
셀프조인
자기 자신 테이블과 조인하는 유형으로 테이블 alias를 반드시 활용해야한다.
하나의 테이블을 마치 다른 테이블인 것처럼 테이블 alias를 다르게 부여한다.
SELECT e1.employee_id, e1.last_name as emp_name,
e2.last_name as mg_name
FROM employees e1 JOIN employees e2
ON e1.manager_id = e2.employee_id;
* 조인하는 방법
1. 양쪽에서 공통된 데이터가 들어있는 컬럼을 찾는다. (공통된 컬럼이 아니다!)
2. 공통된 컬럼이 하나일 때는 그걸 중점으로 찾고,
2-1. 양쪽에 공통된 컬럼이 여러 개일 때는 내가 출력하고자하는 결과가 무엇인지 생각한다.
3. 테이블 순서에 맞게, 어느 테이블이 주 테이블인 건지 확인한다.
유의할 점
1. 보통 조인할 때 포린키 적용된 것위주로 한다. (조인의 기준이 되는 컬럼을 선정할 때 용이)
2. 테이블은 이름별로 따로 설정하는 게 좋다
3. 컬럼명이 같은 걸 조인하는 게 아니다! 이건 의미없이 같을 수 있는 거고, 안의 공통된 데이터가 들어있는 컬럼끼리 조인해야한다.
사원들의 사번, 이름, 급여, 부서 이름을 출력
SELECT E.EMPLOYEE_ID, E.LAST_NAME, E.SALARY, D.DEPARTMENT_NAME
FROM EMPLOYEES E JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID=D.DEPARTMENT_ID;
부서번호, 부서이름, 부서의 매니저ID, 부서의 매니저 이름을 출력
SELECT D.DEPARTMENT_ID, D.DEPARTMENT_NAME, D.MANAGER_ID, E.LAST_NAME
FROM DEPARTMENTS D JOIN EMPLOYEES E
ON D.MANAGER_ID=E.EMPLOYEE_ID;
위와 같이 같은 데이터라도 조인을 무엇과 하느냐에 따라 결과가 달라진다!
사원들의 사번, 이름, 사원의 매니저ID, 사원의 매니저 이름을 출력
SELECT E1.EMPLOYEE_ID, E1.LAST_NAME, E1.MANAGER_ID, E2.LAST_NAME
FROM EMPLOYEES E1 JOIN EMPLOYEES E2
ON E1.MANAGER_ID=E2.EMPLOYEE_ID;
'배운 것 기록 > DB' 카테고리의 다른 글
[Oracle] Inner Join / Outer Join (0) | 2022.07.10 |
---|---|
[Oracle] Natural / Using JOIN (0) | 2022.07.08 |
[Oracle] SQL Developer (0) | 2022.07.06 |
[Oracle] Oracle DBMS 접속 방법 (0) | 2022.06.23 |
[MySQL] DDL(create, alter, drop, truncate) (0) | 2022.06.17 |
댓글