DataBase/관계형 DB
JOIN - MySQL
sellen
2025. 7. 19. 22:19

💡 이 내용 이후로 모든 SQL 관련 내용은 NomadCoder 강의를 듣고 정리한 글입니다.
아래의 링크에 SQL 학습에 필요한 데이터가 존재합니다.
https://nomadcoders.co/sql-masterclass
아래의 글과 함께 보시면 좋습니다.
JOIN
2가지 이상의 테이블을 결합하여 함께 조회할 때 사용하는 명령어
CROSS JOIN
첫 번째의 table의 모든 row와 두 번째 table의 모든 row를 각각 연결한다.
SELECT * FROM dogs CROSS JOIN owners;
dogs의 각 row 마다 owners의 모든 row가 결합한다.
(INNER) JOIN
첫 번째의 table의 외래키와 두 번째 table의 외래키의 값이 같은 데이터끼리 결합한다. - 교집합
- (INNER) JOIN - INNER를 붙이지 않고 JOIN 만 사용할 경우 자동으로 INNER JOIN으로 실행
- JOIN {table_name} ON {첫 번째 테이블의 외래키 = 두 번째 테이블의 외래키}
- JOIN {table_name} USING {column_name}
- 연결할 외래 키의 이름이 같을 경우 USING을 사용할 수 있다.
SELECT *
FROM dogs
JOIN owners ON dogs.owner_id = owners.owner_id;
SELECT *
FROM dogs
-- table 둘 다 owner_id를 사용하므로 USING (owner_id)로 생략가능
JOIN owners USING (owner_id);
OUTER JOIN
SQLite에서는 LEFT OUTER JOIN만 사용가능
LEFT (OUTER) JOIN
첫 번째 테이블의 모든 row를 가져오고 두 번째 테이블에서 서로 교차되는 row를 가져온다.
- LEFT (OUTER) JOIN - OUTER 생략 가능
- LEFT OUTER JOIN {table_name} ON {첫 번째 테이블의 외래키 = 두 번째 테이블의 외래키}
- LEFT JOIN {table_name} USING {column_name}
SELECT *
FROM dogs
LEFT OUTER JOIN owners ON dogs.owner_id = owners.owner_id;
SELECT *
FROM dogs
LEFT JOIN owners USING (owner_id);
RIGHT (OUTER) JOIN
두 번째 테이블의 모든 row를 가져오고 첫 번째 테이블에서 서로 교차되는 row를 가져온다.
- RIGHT (OUTER) JOIN - OUTER 생략 가능
- RIGHT OUTER JOIN {table_name} ON {첫 번째 테이블의 외래키 = 두 번째 테이블의 외래키}
- RIGHT JOIN {table_name} USING {column_name}
SELECT *
FROM dogs
RIGHT OUTER JOIN owners ON dogs.owner_id = owners.owner_id;
SELECT *
FROM dogs
RIGHT JOIN owners USING (owner_id);
FULL OUTER JOIN
해당 기능은 PostgreSQL에서만 사용 가능
movies ∪ directors
SELECT title, directors.name
FROM movies
FULL OUTER JOIN directors USING (director_id);
movies와 directors의 겹치는 부분을 제외할 때
( movies ∪ directors ) - (movies ∩ direcotors)
SELECT title, directors.name
FROM movies
FULL OUTER JOIN directors USING (director_id)
WHERE movies.director_id IS NULL OR directors.director_id IS NULL;