SQL JOIN 개념 정리

robin·2021년 8월 15일
1

SQL 공부

목록 보기
2/6
post-thumbnail

JOIN

  • 두개 이상 테이블에서 테이블 사이 연관된 colum을 바탕으로 rows를 결합함.

1) (INNER) JOIN

두 테이블에 모두 매치되는 값을 가진 rows를 리턴함.

[코드]

SELECT * FROM TableA A
INNER JOIN TableB B ON A.key = B.key

2) LEFT (OUTER) JOIN

왼쪽 테이블의 모든 rows를 리턴하고, 오른쪽 테이블에서는 왼쪽 테이블에 매치되는 rows를 리턴함.

[코드]

SELECT * FROM TableA A
LEFT JOIN TableB B ON A.key = B.key 

3) RIGHT (OUTER) JOIN

오른쪽 테이블의 모든 rows를 리턴하고, 왼쪽 테이블에서는 오른쪽 테이블에 매치되는 rows를 리턴함.

[코드]

SELECT * FROM TableA A
RIGHT JOIN TableB B ON A.key = B.key 

4) FULL (OUTER) JOIN

왼쪽 테이블 혹은 오른쪽 테이블에 매치되는 모든 rows를 리턴함.

[코드]

SELECT * FROM TableA A 
FULL OUTER JOIN TableB B ON A.key = B.key

JOIN 예시

[테이블 생성 및 값 삽입]

CREATE TABLE Students(StudentId integer, Name varchar(100));
INSERT INTO Students(StudentId, Name) values(1, "Ted"), (2, "Lily"), (3, "Marshall");
CREATE TABLE Scores(ScoreId integer, StudentId integer, Math integer, English integer);
INSERT INTO Scores(ScoreId, StudentId, Math, English) values(1, 1, 90, 95), (2, 2, 80, 100), (4, NULL, 75, 100);

<Student 테이블>

StudentIdName
1Ted
2Lily
3Marshall

<Score 테이블>

ScoreIdStudentIdMathEnglish
119095
2280100
4NULL75100

1) INNER JOIN

[코드]

SELECT st.StudentId 
     , st.name
     , sc.math
     , sc.english
FROM Student AS st
INNER JOIN Score AS sc ON st.StudentId = sc.StudentId;

[결과]

StudentIdnamemathenglish
1Ted9095
2Lily80100

2) LEFT JOIN

[코드]

SELECT st.StudentId 
     , st.name
     , sc.math
     , sc.english
FROM Student AS st
LEFT JOIN Score AS sc ON st.StudentId = sc.StudentId;

[결과]

StudentIdnamemathenglish
1Ted9095
2Lily80100
3MarshallNULLNULL

3) RIGHT JOIN

[코드]

SELECT st.StudentId 
     , st.name
     , sc.math
     , sc.english
FROM Student AS st
RIGHT JOIN Score AS sc ON st.StudentId = sc.StudentId;

[결과]

StudentIdnamemathenglish
1Ted9095
2Lily80100
NULLNULL75100

4) FULL OUTER JOIN

[코드]

SELECT st.StudentId 
     , st.name
     , sc.math
     , sc.english
FROM Student AS st
FULL OUTER JOIN Score AS sc ON st.StudentId = sc.StudentId;

[결과]

StudentIdNameMathEnglish
1Ted9095
2Lily80100
NULLNULL75100
3MarshallNULLNULL

⚠️ 주의 : MySQL에서는 FULL OUTER JOIN을 제공하지 않음.
MySQL에서는 다음과 같은 코드로 FULL OUTER JOIN를 구현할 수 있음.

[코드]

SELECT *
FROM Student AS st
LEFT JOIN Score AS sc ON st.StudentId = sc.StudentId
UNION
SELECT *
FROM Student AS st
RIGHT JOIN Score AS sc ON st.StudentId = sc.StudentId;

[결과]

StudentIdNameScoreIdStudentIdMathEnglish
1Ted119095
2Lily2280100
3MarshallNULLNULLNULLNULL
NULLNULL4NULL75100

참고:
https://www.w3schools.com/sql/sql_join.asp
https://sql-joins.leopard.in.ua/
MySQL online editor: https://paiza.io/en/projects/new?language=mysql
PostgreSQL online editor: https://extendsclass.com/postgresql-online.html

profile
데이터 분석을 공부하는 🌱

0개의 댓글