SlideShare a Scribd company logo
1 of 25
Download to read offline
JOIN (SQL)
- MySQL을 기준으로
2015.08.24
이인 / In Lee
TODO
• MySQL 에서 조인(Join)에 대해 알아보기
• 더불어, 중학교때 배웠던 집합(Set)에 대해서도 복습 해보기
• Query 실행 순서에 대해 알아보기
Definition
“A SQL join clause combines records from two or more tables in a relational
database. It creates a set that can be saved as a table or used as it is. A JOIN
is a means for combining fields from two tables (or more) by using values
common to each. ANSI-standard SQL specifies five types of JOIN: INNER,
LEFT OUTER, RIGHT OUTER, FULL OUTER and CROSS. As a special case, a
table (base table, view, or joined table) can JOIN to itself in a self-join.
- Wikipedia, “Join(SQL)”, https://en.wikipedia.org/wiki/Join_(SQL), 2015.08.17
Definition
• 관계형 데이터베이스(Relational Database) 시스템에서 

2개 이상의 테이블을 연결하는 것
• ANSI Standard SQL은 5개의 JOIN을 규정하고 있음
• INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, 

FULL OUTER JOIN, CROSS JOIN
• 특별한 경우(base table, view, or joined table)에 자기 자신
을 JOIN 할 수 있음
• SELF JOIN
Example Tables
순번 이름 팀 번호
1 권혁 1993
2 이범호 2001
3 필 2001
4 박병호 2010
5 양준혁 NULL
순번 팀 번호 팀명
1 1993 한화
2 1999 두산
3 2001 기아
4 2010 넥센
baseball_player baseball_team
A B
A: baseball_player / B: baseball_team
1. INNER JOIN(JOIN)
• A 테이블과 B 테이블이 겹치는 항목 선택
• 즉, 교집합에 해당하는 데이터 선택
• INNER JOIN 은 JOIN 이라는 키워드와 동일
• CROSS JOIN 이라는 키워드는 INNER JOIN과 동일

(MySQL 5.0)
• CROSS JOIN = INNER JOIN = JOIN
name team_no team_name
권혁 1993 한화
이범호 2001 기아
필 2001 기아
박병호 2010 넥센
SELECT player.name, player.team_no, team.name AS team_name
FROM baseball_player AS player
JOIN baseball_team AS team ON player.team_no = team.team_no
2. LEFT OUTER JOIN

(LEFT JOIN) (1)
• A 테이블 전체와 B 테이블 내용 중 

A 테이블과 겹치는 항목만 선택
• LEFT OUTER JOIN 은 LEFT JOIN 이라는 

키워드와 동일
name team_no team_name
권혁 1993 한화
이범호 2001 기아
필 2001 기아
박병호 2010 넥센
양준혁 NULL NULL
SELECT player.name, player.team_no, team.name AS team_name
FROM baseball_player AS player
LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
3. RIGHT OUTER JOIN

(RIGHT JOIN) (1)
• B 테이블 전체와 A 테이블 내용 중 

B 테이블과 겹치는 항목만 선택
• RIGHT OUTER JOIN 은 RIGHT JOIN 이라는 

키워드와 동일
name team_no team_name
권혁 1993 한화
NULL NULL 두산
이범호 2001 기아
필 2001 기아
박병호 2010 넥센
SELECT player.name, player.team_no, team.name AS team_name
FROM baseball_player AS player
LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
Difference Between

LEFT and RIGHT OUTER JOIN
• JOIN 절을 기준으로 어느 쪽에 위치한 테이블을 모두 포함
시킬지 여부를 결정
• 모든 데이터를 포함하는 기준이 되는 테이블을 설정
FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team
ON player.team_no = team.team_no
<왼쪽(LEFT)> <오른쪽(RIGHT)>
LEFT / RIGHT OUTER JOIN (2)
LEFT OUTER JOIN RIGHT OUTER JOIN
• A 테이블 전체에서 B 테이블 내용과 

겹치지 않는 항목만을 선택
• 즉, A 테이블에만 존재하는 값을 SELECT
• B 테이블 전체에서 A 테이블 내용과 

겹치지 않는 항목만을 선택
• 즉, B 테이블에만 존재하는 값을 SELECT
WHERE 절을 이해하는것이 쉽지 않음
Logical Query Processing
Phases
• 사용자가 입력한 Query가 실행되는 Logical한 순서
• 실제 DBMS에서는 사용자가 작성한 Query에 따라 실행순서가 달라질
수 있음(Query Optimization).
FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
LEFT OUTER JOIN(2)
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
WHERE team.team_no IS NULL
name player_side_team_no team_side_team_no team_name
권혁 1993 1993 한화
이범호 2001 2001 기아
필 2001 2001 기아
박병호 2010 2010 넥센
양준혁 NULL NULL NULL
FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
name player_side_team_no team_side_team_no team_name
양준혁 NULL NULL NULL
RIGHT OUTER JOIN(2)
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
WHERE player.team_no IS NULL
name player_side_team_no team_side_team_no team_name
권혁 1993 1993 한화
NULL NULL NULL 두산
이범호 2001 2001 기아
필 2001 2001 기아
박병호 2010 2010 넥센
FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
name player_side_team_no team_side_team_no team_name
NULL NULL 1999 두산
FULL OUTER JOIN
• MySQL에는 FULL OUTER JOIN 이라는 키워드가 존재하지
않음
• But, UNION 키워드를 이용해 구현 가능
FULL OUTER JOIN(1)
name player_side_team_no team_side_team_no team_name
권혁 1993 1993 한화
이범호 2001 2001 기아
필 2001 2001 기아
박병호 2010 2010 넥센
양준혁 1982 NULL NULL
NULL NULL 1999 두산
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
UNION
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
FULL OUTER JOIN(2)
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
WHERE team.team_no IS NULL
UNION
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
WHERE player.team_no IS NULL
name player_side_team_no team_side_team_no team_name
양준혁 1982 NULL NULL
NULL NULL 1999 두산
UNION vs JOIN
• UNION
• 2개 이상의 테이블 결과를 중복제거하여 합침
• 단, 2개 이상의 테이블들의 컬럼 개수와 타입이 일치해야 함
• UNION ALL: UNION과 동일하나 중복을 제거하지 않음
• JOIN
• Cartesian Product 를 수행하여 2개 이상의 테이블들을 결합하는 것
• INNER JOIN(CROSS JOIN)
• 특정 테이블을 기준으로 하여 2개 이상의 테이블들을 결합하는 것
• OUTER JOIN
An outer join does not require each record in the two joined tables to have a matching record. The joined table retains each record—even if no other matching
record exists. Outer joins subdivide further into left outer joins, right outer joins, and full outer joins, depending on which table's rows are retained (left, right, or
both).
Cartesian Product
In mathematics, a Cartesian product is a mathematical operation which
returns a set (or product set or simply product) from multiple sets.
- Wikipedia, "Cartesian Product", https://en.wikipedia.org/wiki/Cartesian_product, 2015.08.21
Cartesian Product
• 공집합이 아닌 여러 집합들로부터 새로운 집합(Set)을 만들
어 내는 방법
• Cartesian Product(카티션 프로덕트), 데카르트 곱, 

곱집합, 순서쌍 이라는 이름으로도 불리며 곱하기(X) 기호로
표현
• A = {1, 2, 3}, B = {a, b} 의 두 집합이 있을 때, 카티션 곱



A X B = {(1,a), (1,b), (2, a), (2,b), (3,a), (3,b)}
Cartesian Product
• Cartesian Product 결과: 조회 가능한 모든 집합(Set) 출력
SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name
FROM baseball_player AS player
JOIN baseball_team AS team
name player_side_team_no team_side_team_no team_name
권혁 1993 1993 한화
권혁 1993 1999 두산
권혁 1993 2001 기아
권혁 1993 2010 넥센
이범호 2001 1993 한화
이범호 2001 1999 두산
이범호 2001 2001 기아
이범호 2001 2010 넥센
필 2001 1993 한화
필 2001 1999 두산
... ... ... ...
Cartesian Product
• 조회 가능한 모든 결과 출력을 방지하기 위해, ON 절에 조건
부여
• 하지만, Cartesian Product 가 필요한 경우가 존재함
name team_no team_name
권혁 1993 한화
이범호 2001 기아
필 2001 기아
박병호 2010 넥센
SELECT player.name, player.team_no, team.name AS team_name
FROM baseball_player AS player
JOIN baseball_team AS team ON player.team_no = team.team_no
Venn Diagram
합집합
Union
A∪B
대칭차집합
Symmentric Difference
A △ B
차집합
Relative Complement
A-B
A B
교집합
Intersect
A∩B
차집합
Relative Complement
B-A
Conclusion
• 관계형 DB에서 JOIN은 자주 사용되기 때문에 5가지 JOIN
의 의미를 이해하고 사용하는 것이 중요
• 최대한, 가능하면 표준 SQL을 이용할 것
• "표준" 이라는 뜻은 해당 분야의 어디에서나 사용 가능하다는 의미

(이식성)
• 그래도 어쩔 수 없으면 해당 DBMS에서 제공하는 문법을 써야함
• MySQL의 LIMIT 와 같은 키워드
References
1. Wikipedia, “Join(SQL)”, https://en.wikipedia.org/wiki/Join_(SQL), 2015.08.17
2. Wikipedia, “SQL”, https://en.wikipedia.org/wiki/SQL, 2015.08.17
3. StackOverflow, "MySQL cartesian product between two SELECT statements", http://stackoverflow.com/questions/
4481396/mysql-cartesian-product-between-two-select-statements, 2015.08.18
4. MySQL::MySQL 5.0 Reference Manual :: 13.2.8.2 JOIN Syntax, "13.2.8.2 JOIN Syntax", 

"http://dev.mysql.com/doc/refman/5.0/en/join.html", 2015.08.18
5. StackOverflow, "What's the execute order of the different parts of a SQL select statement?",http://stackoverflow.com/
questions/2617661/whats-the-execute-order-of-the-different-parts-of-a-sql-select-statement , 2015.08.21
6. StackOverflow, "What is the difference between Join and Union?", http://stackoverflow.com/questions/905379/what-is-
the-difference-between-join-and-union, 2015.08.21
7. Wikipedia, "Cartesian Product", https://en.wikipedia.org/wiki/Cartesian_product, 2015.08.21
8. Wikipedia, "Venn Diagram", https://en.wikipedia.org/wiki/Venn_diagram, 2015.08.21
9. SQL with Manoj, "SQL Server JOINS and Types", http://sqlwithmanoj.com/tag/cross-join-2/, 2015.08.21

More Related Content

Viewers also liked

Types Of Join In Sql Server - Join With Example In Sql Server
Types Of Join In Sql Server - Join With Example In Sql ServerTypes Of Join In Sql Server - Join With Example In Sql Server
Types Of Join In Sql Server - Join With Example In Sql Serverprogrammings guru
 
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGE
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGEDEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGE
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGEhpfumtchum
 
MS Sql Server: Joining Databases
MS Sql Server: Joining DatabasesMS Sql Server: Joining Databases
MS Sql Server: Joining DatabasesDataminingTools Inc
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015Sebastien Gioria
 
SQL Joinning.Database
SQL Joinning.DatabaseSQL Joinning.Database
SQL Joinning.DatabaseUmme habiba
 
L'analyse de code au service de la qualité
L'analyse de code au service de la qualitéL'analyse de code au service de la qualité
L'analyse de code au service de la qualitéStephane Leclercq
 

Viewers also liked (12)

SQL
SQLSQL
SQL
 
Sql joins
Sql joinsSql joins
Sql joins
 
Semi join
Semi joinSemi join
Semi join
 
Types Of Join In Sql Server - Join With Example In Sql Server
Types Of Join In Sql Server - Join With Example In Sql ServerTypes Of Join In Sql Server - Join With Example In Sql Server
Types Of Join In Sql Server - Join With Example In Sql Server
 
SQL Joins
SQL JoinsSQL Joins
SQL Joins
 
SQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and ProfitSQL Outer Joins for Fun and Profit
SQL Outer Joins for Fun and Profit
 
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGE
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGEDEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGE
DEMARCHE AUDIT INFORMATIQUE DANS UNE BANQUE - RAPPORT DE STAGE
 
SQL JOIN
SQL JOINSQL JOIN
SQL JOIN
 
MS Sql Server: Joining Databases
MS Sql Server: Joining DatabasesMS Sql Server: Joining Databases
MS Sql Server: Joining Databases
 
La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015La Quete du code source fiable et sécurisé - GSDAYS 2015
La Quete du code source fiable et sécurisé - GSDAYS 2015
 
SQL Joinning.Database
SQL Joinning.DatabaseSQL Joinning.Database
SQL Joinning.Database
 
L'analyse de code au service de la qualité
L'analyse de code au service de la qualitéL'analyse de code au service de la qualité
L'analyse de code au service de la qualité
 

Join(sql)

  • 1. JOIN (SQL) - MySQL을 기준으로 2015.08.24 이인 / In Lee
  • 2. TODO • MySQL 에서 조인(Join)에 대해 알아보기 • 더불어, 중학교때 배웠던 집합(Set)에 대해서도 복습 해보기 • Query 실행 순서에 대해 알아보기
  • 3. Definition “A SQL join clause combines records from two or more tables in a relational database. It creates a set that can be saved as a table or used as it is. A JOIN is a means for combining fields from two tables (or more) by using values common to each. ANSI-standard SQL specifies five types of JOIN: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER and CROSS. As a special case, a table (base table, view, or joined table) can JOIN to itself in a self-join. - Wikipedia, “Join(SQL)”, https://en.wikipedia.org/wiki/Join_(SQL), 2015.08.17
  • 4. Definition • 관계형 데이터베이스(Relational Database) 시스템에서 
 2개 이상의 테이블을 연결하는 것 • ANSI Standard SQL은 5개의 JOIN을 규정하고 있음 • INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, 
 FULL OUTER JOIN, CROSS JOIN • 특별한 경우(base table, view, or joined table)에 자기 자신 을 JOIN 할 수 있음 • SELF JOIN
  • 5. Example Tables 순번 이름 팀 번호 1 권혁 1993 2 이범호 2001 3 필 2001 4 박병호 2010 5 양준혁 NULL 순번 팀 번호 팀명 1 1993 한화 2 1999 두산 3 2001 기아 4 2010 넥센 baseball_player baseball_team A B
  • 6. A: baseball_player / B: baseball_team
  • 7. 1. INNER JOIN(JOIN) • A 테이블과 B 테이블이 겹치는 항목 선택 • 즉, 교집합에 해당하는 데이터 선택 • INNER JOIN 은 JOIN 이라는 키워드와 동일 • CROSS JOIN 이라는 키워드는 INNER JOIN과 동일
 (MySQL 5.0) • CROSS JOIN = INNER JOIN = JOIN name team_no team_name 권혁 1993 한화 이범호 2001 기아 필 2001 기아 박병호 2010 넥센 SELECT player.name, player.team_no, team.name AS team_name FROM baseball_player AS player JOIN baseball_team AS team ON player.team_no = team.team_no
  • 8. 2. LEFT OUTER JOIN
 (LEFT JOIN) (1) • A 테이블 전체와 B 테이블 내용 중 
 A 테이블과 겹치는 항목만 선택 • LEFT OUTER JOIN 은 LEFT JOIN 이라는 
 키워드와 동일 name team_no team_name 권혁 1993 한화 이범호 2001 기아 필 2001 기아 박병호 2010 넥센 양준혁 NULL NULL SELECT player.name, player.team_no, team.name AS team_name FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
  • 9. 3. RIGHT OUTER JOIN
 (RIGHT JOIN) (1) • B 테이블 전체와 A 테이블 내용 중 
 B 테이블과 겹치는 항목만 선택 • RIGHT OUTER JOIN 은 RIGHT JOIN 이라는 
 키워드와 동일 name team_no team_name 권혁 1993 한화 NULL NULL 두산 이범호 2001 기아 필 2001 기아 박병호 2010 넥센 SELECT player.name, player.team_no, team.name AS team_name FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
  • 10. Difference Between
 LEFT and RIGHT OUTER JOIN • JOIN 절을 기준으로 어느 쪽에 위치한 테이블을 모두 포함 시킬지 여부를 결정 • 모든 데이터를 포함하는 기준이 되는 테이블을 설정 FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no <왼쪽(LEFT)> <오른쪽(RIGHT)>
  • 11. LEFT / RIGHT OUTER JOIN (2) LEFT OUTER JOIN RIGHT OUTER JOIN • A 테이블 전체에서 B 테이블 내용과 
 겹치지 않는 항목만을 선택 • 즉, A 테이블에만 존재하는 값을 SELECT • B 테이블 전체에서 A 테이블 내용과 
 겹치지 않는 항목만을 선택 • 즉, B 테이블에만 존재하는 값을 SELECT WHERE 절을 이해하는것이 쉽지 않음
  • 12. Logical Query Processing Phases • 사용자가 입력한 Query가 실행되는 Logical한 순서 • 실제 DBMS에서는 사용자가 작성한 Query에 따라 실행순서가 달라질 수 있음(Query Optimization). FROM JOIN WHERE GROUP BY HAVING SELECT ORDER BY LIMIT
  • 13. LEFT OUTER JOIN(2) SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no WHERE team.team_no IS NULL name player_side_team_no team_side_team_no team_name 권혁 1993 1993 한화 이범호 2001 2001 기아 필 2001 2001 기아 박병호 2010 2010 넥센 양준혁 NULL NULL NULL FROM JOIN WHERE GROUP BY HAVING SELECT ORDER BY LIMIT name player_side_team_no team_side_team_no team_name 양준혁 NULL NULL NULL
  • 14. RIGHT OUTER JOIN(2) SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no WHERE player.team_no IS NULL name player_side_team_no team_side_team_no team_name 권혁 1993 1993 한화 NULL NULL NULL 두산 이범호 2001 2001 기아 필 2001 2001 기아 박병호 2010 2010 넥센 FROM JOIN WHERE GROUP BY HAVING SELECT ORDER BY LIMIT name player_side_team_no team_side_team_no team_name NULL NULL 1999 두산
  • 15. FULL OUTER JOIN • MySQL에는 FULL OUTER JOIN 이라는 키워드가 존재하지 않음 • But, UNION 키워드를 이용해 구현 가능
  • 16. FULL OUTER JOIN(1) name player_side_team_no team_side_team_no team_name 권혁 1993 1993 한화 이범호 2001 2001 기아 필 2001 2001 기아 박병호 2010 2010 넥센 양준혁 1982 NULL NULL NULL NULL 1999 두산 SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no UNION SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no
  • 17. FULL OUTER JOIN(2) SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player LEFT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no WHERE team.team_no IS NULL UNION SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player RIGHT OUTER JOIN baseball_team AS team ON player.team_no = team.team_no WHERE player.team_no IS NULL name player_side_team_no team_side_team_no team_name 양준혁 1982 NULL NULL NULL NULL 1999 두산
  • 18. UNION vs JOIN • UNION • 2개 이상의 테이블 결과를 중복제거하여 합침 • 단, 2개 이상의 테이블들의 컬럼 개수와 타입이 일치해야 함 • UNION ALL: UNION과 동일하나 중복을 제거하지 않음 • JOIN • Cartesian Product 를 수행하여 2개 이상의 테이블들을 결합하는 것 • INNER JOIN(CROSS JOIN) • 특정 테이블을 기준으로 하여 2개 이상의 테이블들을 결합하는 것 • OUTER JOIN An outer join does not require each record in the two joined tables to have a matching record. The joined table retains each record—even if no other matching record exists. Outer joins subdivide further into left outer joins, right outer joins, and full outer joins, depending on which table's rows are retained (left, right, or both).
  • 19. Cartesian Product In mathematics, a Cartesian product is a mathematical operation which returns a set (or product set or simply product) from multiple sets. - Wikipedia, "Cartesian Product", https://en.wikipedia.org/wiki/Cartesian_product, 2015.08.21
  • 20. Cartesian Product • 공집합이 아닌 여러 집합들로부터 새로운 집합(Set)을 만들 어 내는 방법 • Cartesian Product(카티션 프로덕트), 데카르트 곱, 
 곱집합, 순서쌍 이라는 이름으로도 불리며 곱하기(X) 기호로 표현 • A = {1, 2, 3}, B = {a, b} 의 두 집합이 있을 때, 카티션 곱
 
 A X B = {(1,a), (1,b), (2, a), (2,b), (3,a), (3,b)}
  • 21. Cartesian Product • Cartesian Product 결과: 조회 가능한 모든 집합(Set) 출력 SELECT player.name, player.team_no AS player_side_team_no, team.team_no AS team_side_team_no, team.name AS team_name FROM baseball_player AS player JOIN baseball_team AS team name player_side_team_no team_side_team_no team_name 권혁 1993 1993 한화 권혁 1993 1999 두산 권혁 1993 2001 기아 권혁 1993 2010 넥센 이범호 2001 1993 한화 이범호 2001 1999 두산 이범호 2001 2001 기아 이범호 2001 2010 넥센 필 2001 1993 한화 필 2001 1999 두산 ... ... ... ...
  • 22. Cartesian Product • 조회 가능한 모든 결과 출력을 방지하기 위해, ON 절에 조건 부여 • 하지만, Cartesian Product 가 필요한 경우가 존재함 name team_no team_name 권혁 1993 한화 이범호 2001 기아 필 2001 기아 박병호 2010 넥센 SELECT player.name, player.team_no, team.name AS team_name FROM baseball_player AS player JOIN baseball_team AS team ON player.team_no = team.team_no
  • 23. Venn Diagram 합집합 Union A∪B 대칭차집합 Symmentric Difference A △ B 차집합 Relative Complement A-B A B 교집합 Intersect A∩B 차집합 Relative Complement B-A
  • 24. Conclusion • 관계형 DB에서 JOIN은 자주 사용되기 때문에 5가지 JOIN 의 의미를 이해하고 사용하는 것이 중요 • 최대한, 가능하면 표준 SQL을 이용할 것 • "표준" 이라는 뜻은 해당 분야의 어디에서나 사용 가능하다는 의미
 (이식성) • 그래도 어쩔 수 없으면 해당 DBMS에서 제공하는 문법을 써야함 • MySQL의 LIMIT 와 같은 키워드
  • 25. References 1. Wikipedia, “Join(SQL)”, https://en.wikipedia.org/wiki/Join_(SQL), 2015.08.17 2. Wikipedia, “SQL”, https://en.wikipedia.org/wiki/SQL, 2015.08.17 3. StackOverflow, "MySQL cartesian product between two SELECT statements", http://stackoverflow.com/questions/ 4481396/mysql-cartesian-product-between-two-select-statements, 2015.08.18 4. MySQL::MySQL 5.0 Reference Manual :: 13.2.8.2 JOIN Syntax, "13.2.8.2 JOIN Syntax", 
 "http://dev.mysql.com/doc/refman/5.0/en/join.html", 2015.08.18 5. StackOverflow, "What's the execute order of the different parts of a SQL select statement?",http://stackoverflow.com/ questions/2617661/whats-the-execute-order-of-the-different-parts-of-a-sql-select-statement , 2015.08.21 6. StackOverflow, "What is the difference between Join and Union?", http://stackoverflow.com/questions/905379/what-is- the-difference-between-join-and-union, 2015.08.21 7. Wikipedia, "Cartesian Product", https://en.wikipedia.org/wiki/Cartesian_product, 2015.08.21 8. Wikipedia, "Venn Diagram", https://en.wikipedia.org/wiki/Venn_diagram, 2015.08.21 9. SQL with Manoj, "SQL Server JOINS and Types", http://sqlwithmanoj.com/tag/cross-join-2/, 2015.08.21