SQL 기초 Join
JOIN
벤다이어그램 설명
JOIN 예제
Join 위키피디아
AS
SELECT column AS new_name FROM table;
SELECT SUM(column) AS new_name FROM table;
- 별칭으로 프린트 위에 같은 경우 column 대신에 new_name 으로 출력됨
- AS 문은 가장 마지막에 실행됨
INNER JOINS
SELECT * FROM TableA INNER JOIN TableB ON TableA.col_match = TableB.col_match;
주의사항
REGISTRATIONS
reg_id |
name |
1 |
Andrew |
2 |
Bob |
3 |
Cha |
4 |
David |
LOGINS
log_id |
name |
1 |
Xavier |
2 |
Andrew |
3 |
Y |
4 |
Bob |
RESULTS
reg_id |
name |
log_id |
name |
1 |
Andrew |
2 |
Andrew |
2 |
Bob |
4 |
Bob |
SELECT * FROM Registrations INNER JOIN Logins ON Registrations.name = Logins.name;
OUTER JOINS
- OUTER JOIN 은 꽤 복잡하다. LEFT/RIGHT OUTER JOIN을 다룰 때는 더더욱 그렇다.
FULL OUTER JOIN
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.col_match = TableB.col_match;
REGISTRATIONS
reg_id |
name |
1 |
Andrew |
2 |
Bob |
3 |
Cha |
4 |
David |
LOGINS
log_id |
name |
1 |
Xavier |
2 |
Andrew |
3 |
Y |
4 |
Bob |
SELECT * FROM Registrations FULL OUTER JOIN Logins ON Registrations.name = Logins.name;
RESULTS
reg_id |
name |
log_id |
name |
1 |
Andrew |
2 |
Andrew |
2 |
Bob |
4 |
Bob |
3 |
Cha |
null |
null |
4 |
David |
null |
null |
null |
null |
1 |
Xavier |
null |
null |
4 |
Y |
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.col_match = TableB.col_match WHERE TableA.id IS null OR TableB.id IS null;
SELECT * FROM Registrations FULL OUTER JOIN Logins ON Registrations.name = Logins.name WHERE Registrations.reg_id IS null OR Logins.log_id IS null;
RESULTS
reg_id |
name |
log_id |
name |
3 |
Cha |
null |
null |
4 |
David |
null |
null |
null |
null |
1 |
Xavier |
null |
null |
4 |
Y |
LEFT OUTER JOIN
- LEFT OUTER JOIN은 왼쪽 테이블에 있는 레코드 세트를 결과로 출력한다.
- 오른쪽 테이블에 일치하는 내용이 없으면 그 결과는 null 이다.
- FULL OUTER JOIN 과는 다르게 순서가 중요하다.
LEFT OUTER JOIN
은 LEFT JOIN
으로도 사용 가능하다.
- WHERE 문을 추가하여 LEFT OUTER JOIN을 추가로 수정할 수 있다.
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.col_match = TableB.col_match;
SELECT * FROM Registrations LEFT OUTER JOIN Logins ON Registrations.name = Logins.name;
RESULTS
reg_id |
name |
log_id |
name |
1 |
Andrew |
2 |
Andrew |
2 |
Bob |
4 |
Bob |
3 |
Charlie |
null |
null |
4 |
David |
null |
null |
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.col_match = TableB.col_match WHERE TableB.id IS null
SELECT * FROM Registrations LEFT OUTER JOIN Logins ON Registrations.name = Logins.name
WHERE Logins.log_id IS null;
RESULTS
reg_id |
name |
log_id |
name |
3 |
Charlie |
null |
null |
4 |
David |
null |
null |
RIGHT OUTER JOIN
- RIGHT JOIN은 기본적으로 LEFT JOIN과 완전히 동일하지만 테이블이 서로 바뀐다는 점만 다르다.
SELECT * FROM TableA RIGHT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
SELECT * FROM TableA RIGHT OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
WHERE TableA.id IS null
UNION
Result
SELECT column_name(s) FROM Sales2021_Q1
UNION
SELECT column_name(s) FROM Sales2021_Q2;
- ORDER BY name 으로 정렬할 수도 있다
3개 이상의 테이블을 합치는 법
SELECT title,actor.first_name, actor.last_name FROM film
FULL OUTER JOIN film_actor ON film.film_id = film_actor.film_id
FULL OUTER JOIN actor ON actor.actor_id = film_actor.actor_id
WHERE actor.first_name = 'Nick' AND actor.last_name = 'Wahlberg';
SELECT title, first_name, last_name FROM film_actor
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
INNER JOIN film ON film_actor.film_id = film.film_id
WHERE actor.first_name = 'Nick' AND actor.last_name = 'Wahlberg';
위와 같이 다양하게 조합해서 사용 가능하다.
- 핵심은 JOIN 구문을 연속해서 사용하는점
- SELECT 부분에서 컬럼 이름만 써도 알아서 찾아진다는 점
- WHERE 부분에서는 어디로 부터온 컬럼인지 적어둔다는 점
댓글남기기