-
[DB] Join 종류 공부하기DBMS/데이터베이스 이론 2025. 1. 12. 10:41
Join 종류 공부하기
Join두 개 이상의 테이블에 있는 데이터를 합쳐서 한 번에 조회하는 것
Implicit joinSELECT D.name FROM employee E, department D WHERE E.id = 1 AND E.dept_id = D.id
-조인 테이블을 FROM문에 Join condition(조인조건)을 WHERE문에 작성하는 방식
-Old style 조인 문법
-WHERE문에 selection condition과 join condition이 같이 있기 떄문에 가독성이 떨어진다
-가독성이 떨어지니 복잡한 join 쿼리를 작성하다보면 실수로 잘못된 쿼리를 작성할 가능성이 높다.Explicit join
SELECT D.name FROM employee E JOIN department D ON E.dept_id = D.id WHERE E.id=1;
-FROM문에 JOIN 키워드와 함께 join된 테이블들을 명시하는 방식
-FROM 절에서 ON 뒤에 join condition이 명시된다
-가독성이 좋다
-복잡한 join쿼리 작성에도 실수할 가능성이 적다Inner join
-두 테이블에서 join condition을 만족하는 tuple들로 result table을 만드는 join
(Join condition을 만족하는 튜플만 가져오는 조인)FROM table1 [INNER] JOIN table2 ON join_condition
(inner join은 기본조인으로 inner은 안써도 inner 조인이 적용된다)
-join condition에서 null값을 가지는 tuple은 result table에 포함되지 못한다
- inner Join condition에서 사용 가능한 연산자: =, <,>,!=Outer join
-두 테이블에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join
(Join condition을 만족하지않는 튜플도 가져온다.)-Join condition을 만족하지 않은 상대 테이블과 매칭되지 않는 튜플은 상대 테이블에 대한 속성을 모두 null로 가져온다
Outer join의 종류 3가지
[outer] 역시 생략가능하다
1.LEFT [OUTER] JOIN: 왼쪽 테이블에서 매칭되지 못한(조인조건 만족 못하는) 튜플도 가져온다
2. RIGHT [OUTER] JOIN: 오른쪽 테이블에서 매칭되지 못한(조인 조건 만족못하는) 튜플도 가져온다
3. FULL [OUTER] JOIN: 양쪽테이블에서 매칭되지못한(조인 조건만족 못하는) 튜플도 가져온다
(MYSQL은 FULL OUTER JOIN을 지원하지 않는다. PSQL은 지원.)
outer Join condition에 사용가능한 연산자: =,<,>,!=Equi join
Join condition에서 =연산자를 사용하는 join
Using
두 테이블이 equi join을할 때 join하는 속성의 이름이 같다면 USING으로 간단하게 작성할 수 있다.
이때 같은 이름의 attribute는 result table의 맨 앞에서 한번만 표시된다.
2개이상의 속성을 조인조건으로 쓴다면 USING 에 추가 속성명을 적으면 된다. USING(속성1, 속성2...)FROM table1 [INNER] JOIN table2 USING(속성)
FROM table1 LEFT [OUTER] JOIN table2 USING(속성)
Natural join두 테이블에서 같은 이름을 가지는 *모든 attribute pair에 대해서 equi join을 수행
Join condition을 따로 명시하지 않는다FROM table1 NATURAL [inner] JOIN table2
FROM table1 NATURAL LEFT[OUTER] JOIN table2
Cross join
-두 tuple의 tuple pair로 만들 수 있는 모든 조합(Cartesian product)을 result table로 반환한다
-Join condition이 없다
Implicit cross joinFROM table1, table2
Explicit cross joinFROM table1 CROSS JOIN table2
MYSQL에서의 cross join
-MYSQL에서는 cross join = inner join = join
-CROSS JOIN에 ON(or USING)(조인 조건이 있다면)을 같이 쓰면 inner join으로 동작한다
-Inner JOIN(or JOIN)이 ON (or USING)(조인 조건이 없다면) cross join으로 동작한다Self join
table이 자기 자신에게 join하는 경우
조인예제
예제에 사용될 테이블
(부서, 직원, 프로젝트, 프로젝트 참여 목록)DEPARTMENT id, name, leader_id
EMPLOYEE id, name, birth_date, sex, position, salary, dept_id
Project id, name, leader_id, start_date, end_date
WORKS_ON empl_id, proj_id
Q) ID가 1003인 부서에 속하는 임직원중 리더를 제외한 부서원의 ID, 이름, 연봉을 알고싶다.
SELECT id, name, salary FROM EMPLOYEE E JOIN DEPARTMENT D ON D.ID = E.DEPT_ID WHERE D.ID=1003 AND E.id != D.leader_id;
Q) ID가 2001인 프로젝트에 참여한 임직원들의 이름과 직군과 소속 부서 이름을 알고 싶다SELECT E.name, E.position, D.name FROM employee E JOIN works_on W ON W.empl_id = E.id LEFT JOIN department D ON E.dept_id = D.id WHERE W.proj_id = 2001;
LEFT JOIN을 쓰는 이유
EMPLOYEE 테이블에 dept_id가 null인 튜플도 있을 수 있다.'DBMS > 데이터베이스 이론' 카테고리의 다른 글
[DB] DB 인덱스 기초 (0) 2025.01.29 [DB] Nested loop join, Merge join, Hash join 알아보기 (0) 2025.01.27 [DB] SQL - 집계함수, group by, order by 공부하기 (0) 2025.01.16 [DB] SQL에서 NULL의 의미와 three-valued logic에 대해 알아보기 (0) 2025.01.14 [DB] SQL 실행순서 (0) 2025.01.10