MYSQL 에서 꽤나 자주 쓰이는 join 에 대해 설명하고자 한다. join 은 두 테이블의 column 을 비교하여 일치하는 row 들을 조합하는 것이다.
Inner Join
Inner Join은 두 테이블 간의 교집합을 찾는 SQL 조인 방식이다. 이 방식은 두 테이블에서 일치하는 데이터만 반환한다. 예를 들어, '고객' 테이블과 '주문' 테이블을 Inner Join 하면, 주문 기록이 있는 고객 정보만을 가져온다.
사용 예
SELECT *
FROM 고객
INNER JOIN 주문
ON 고객.고객ID = 주문.고객ID;
이 쿼리는 '고객'과 '주문' 테이블에서 고객 ID가 일치하는 레코드만을 선택한다.
Outer Join
Outer Join은 두 테이블의 합집합을 반환한다. 이 방식은 일치하는 데이터뿐만 아니라, 한 테이블에는 있지만 다른 테이블에는 없는 데이터도 포함한다. Outer Join에는 세 가지 유형이 있다: Left, Right, Full.
Left Outer Join
Left Outer Join은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환한다.
SELECT *
FROM 고객
LEFT OUTER JOIN 주문
ON 고객.고객ID = 주문.고객ID;
위 쿼리는 '고객'의 모든 레코드와 '주문' 테이블의 일치하는 레코드를 가져온다.
Right Outer Join
Right Outer Join은 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환한다.
SELECT *
FROM 고객
RIGHT OUTER JOIN 주문
ON 고객.고객ID = 주문.고객ID;
이 쿼리는 '주문'의 모든 레코드와 '고객' 테이블의 일치하는 레코드를 가져온다.
Full Outer Join
Full Outer Join은 두 테이블의 모든 레코드를 반환한다. 일치하는 레코드뿐만 아니라, 한쪽 테이블에만 존재하는 레코드도 포함된다.
SELECT *
FROM 고객
FULL OUTER JOIN 주문
ON 고객.고객ID = 주문.고객ID;
위 쿼리는 '고객'과 '주문' 테이블의 모든 레코드를 반환한다.
이때 주의해야 할 건 outer join 의 경우 조인을 하는 대상 table 의 개수가 여러개면 여러개의 row 를 반환하는 것이다. 예를 들어 left join 을 할 때 right table 에 조건에 맞는 컬럼이 여러개 있다면 left 테이블의 row 가 여러개 출력되면서 각각 매칭하는 right row 와 함께 나온다는 것이다. 아래는 에시이다.
고객ID | 고객이름
-------|---------
1 | 김철수
2 | 이영희
'고객' 테이블
주문ID | 고객ID | 주문내용
-------|--------|---------
101 | 1 | 상품A
102 | 1 | 상품B
103 | 2 | 상품C
'주문' 테이블
SELECT *
FROM 고객
LEFT OUTER JOIN 주문
ON 고객.고객ID = 주문.고객ID;
위 쿼리 실행 결과
고객ID | 고객이름 | 주문ID | 고객ID | 주문내용
-------|----------|--------|--------|---------
1 | 김철수 | 101 | 1 | 상품A
1 | 김철수 | 102 | 1 | 상품B
2 | 이영희 | 103 | 2 | 상품C
'개발자의 길 > Database' 카테고리의 다른 글
[MySQL] 스토어드 프로시저 (0) | 2024.01.15 |
---|---|
[MySQL] MySQL 의 Isolation level ( 격리 레벨 ) (1) | 2023.12.31 |
[SQLite3][C++] database is malformed - DB 에 손상이 갔을 때. (0) | 2021.07.31 |
[SQLite3][C++] SQLite3 에서 record 를 지워도 DB 용량이 줄어들지 않는 이유는? - page, vacuum, rbu vacuum. (0) | 2021.07.30 |
[SQLite3][C++] Sqlite3 의 journal file 에 대해 (0) | 2021.07.28 |