sellen

JOIN - MySQL 본문

DataBase/관계형 DB

JOIN - MySQL

sellen 2025. 7. 19. 22:19

💡 이 내용 이후로 모든 SQL 관련 내용은 NomadCoder 강의를 듣고 정리한 글입니다.
아래의 링크에 SQL 학습에 필요한 데이터가 존재합니다.
https://nomadcoders.co/sql-masterclass
아래의 글과 함께 보시면 좋습니다.

2025.07.17 - [Programming/DataBase] - JOIN

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;

 

'DataBase > 관계형 DB' 카테고리의 다른 글

정규화 - MySQL  (0) 2025.07.19
JOIN - 연습문제  (2) 2025.07.19
DataGrip과 MySQL 연결  (0) 2025.07.19
MySQL 데이터 타입  (0) 2025.07.19
MySQL 설치  (0) 2025.07.19