Join
: 두 개이상의 테이블을 연결해 하나의 테이블처럼 만드는 것을 말한다.
먼저 employee(사람)와 titile (직업) 테이블이 존재할 때 ,
Left Join (= Left Outer Join)
왼쪽 A 테이블 기준으로 B 테이블을 붙이는 것
select * from employees A left join title B on A.title_id = B.id
- 왼쪽 테이블의 데이터를 모두 가져오고 , 오른쪽 테이블은 match 됐을때 가져옴
- 따라서 오른쪽 테이블에서 없는 값들은 Null로 표시된다.
이때 순수 A테이블 데이터만 가져오고 싶다면
select * from employees A left join title B on A.title_id = B.id where B.id is null
Right join (= Right Outer Join)
: 오른쪽 B 테이블 기준으로 A 테이블을 붙이는 것
- 오른쪽 테이블의 데이터를 모두 가져오고 , 왼쪽 테이블이 match가 되었을 떄 가져온다.
- 따라서 왼쪽 테이블에서 없는 값들은 Null로 표시된다.
select * from employees A right join title B on A.title_id = B.id order by b.id
B(title)테이블 기준으로 id가 1인 변호사는 A테이블(employees)에서 3명이므로 3개가 연결되어 나온다.
이때 순수 B 테이블만 가져오고 싶다면
select * from employees A right join title B on A.title_id = B.id where a.id is null order by b.id
Inner Join
: A와 B의 교집합을 말한다.
- 두 테이블 모두에 값이 있어야만 표시된다.
select * from employees A inner join title B on A.title_id = B.id
Full Outer Join
: A와 B의 합집합을 말한다.
- 하지만 mysq은 Full Outer Join을 지원하지 않기 때문에 Union을 사용해야한다.
SELECT * FROM employees A
LEFT JOIN title B on A.title_id = B.id
UNION
SELECT * FROM employees A
RIGHT JOIN title B on A.title_id = B.id
참고 및 출처
https://dsin.wordpress.com/2013/03/16/sql-join-cheat-sheet/
'CS > 데이터베이스' 카테고리의 다른 글
mysql Index 종류 및 B-Tree 구조 (0) | 2023.06.14 |
---|---|
mysql 쿼리 최적화 (0) | 2023.06.14 |
데이터베이스 정규화(Normalization) (0) | 2023.02.20 |
RDBMS vs NOSQL (1) | 2023.02.16 |
redis의 특징과 자료구조 및 pub/sub (0) | 2023.02.16 |