CS 공부

SQL-JOIN 본문

CS공부/데이터베이스

SQL-JOIN

kluiop1 2021. 7. 17. 00:06

JOIN이란 ?

데이터베이스에서 테이블간의 결합을 이야기한다.

즉, 두개 이상의 테이블에 대해서 결합하여 나타낼 때 조인이라는 것을 이용한다.

 

outer table = driving table = 선행테이블

inner table = driven table = 후행테이블

 

join의 종류

inner join(교집합으로, 기준 테이블과 join 테이블의 중복된 값)

left/right/full outer join

cross join

self join

natural join

 

예시를 위한 테이블

Table A

학번 이름
11 kim
22 jim
33 sue

 

Table B

학번
11 180
22 181
44 182
55 185

 

 

INNER JOIN: 내부조인 -> 교집합

INNER JOIN은 키 값이 있는 테이블의 컬럼 값을 비교 후 조건에 맞는 값을 가져오는 것이다. 간단히 말하면 서로 연관된 내용만 검색하는 조인 방법이다. 

 

EX)

학번 이름
11 kim 180
22 jim 181

 

SQL 코드

명시적 조인으로는 JOIN 키워드 사용하고 ON의 키워드로 조인에 대한 구문을 지정하는데 사용

SELECT *

FROM EMPLOYEE INNER JOIN DEPARTMENT

ON EMPLOYEE.DepartmentID = DEPARTMENT.DepartmentID;

 

암시적 조인 표현

동등 표시로 조인(동등 조인) 

SELECT *

FROM EMPLOYEE, DEPARTMENT

WHERE EMPLOYEE.DepartmentID = DEPARTMENT.DepartmentID;

 

추가내용) 비동등 조인

두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하지 않는 경우. "="가 아닌 Between, >, ≥ 등의 연산자들을 사용해 JOIN하는 경우이다.

LEFT JOIN-> 부분집합

조인기준 왼쪽에 있는거 '' SELECT

 

EX)

학번 이름
11 kim 180
22 jim 181
33 sue NULL

 

SQL 코드

SELECT A.ID, A.ENAME, A.KNAME

FROM A LEFT OUTER JOIN B

ON A.ID = B.ID;

 

LEFT OUTER JOIN-> 부분집합

조인기준 왼쪽에 있는거'' SELECT(LEFT에 있는거만 : A-B)

LEFT가 가지고 있는 것 중 공통적인 부분을 제외한 값

그냥 LEFT JOIN값 중에서 WHERE조건으로 NULL인 값을 조회

BNULL의 값을 가지고 있는건 A만 가지고 있는 값이니까

 

EX)

학번 이름
33 sue NULL

 

SQL 코드

SELECT A.ID, A.ENAME, A.KNAME

FROM A LEFT OUTER JOIN B

ON A.ID = B.ID;

WHERE B.ID IS NULL

 

RIGHT JOIN -> 부분집합

조인기준 오른쪽에 있는거 '' SELECT

EX)

학번 이름
11 kim 180
22 jim 181
44 NULL 182
55 NULL 185

 

SQL 코드

SELECT A.ID, A.ENAME, A.KNAME

FROM A RIGHT OUTER JOIN B

ON A.ID = B.ID;

 

RIGHT OUTER JOIN -> 부분집합

조인기준 오른쪽에 있는거만! SELECT

RIGHT가 가지고 있는 것 중 공통적인 부분을 제외한 값

그냥 RIGHT JOIN값 중에서 WHERE조건으로 NULL인 값을 조회

(RIGHT에 있는거만 : B-A)

 

EX)

학번 이름
44 NULL 182
55 NULL 185

 

SQL 코드

SELECT A.ID, A.ENAME, A.KNAME

FROM A RIGHT OUTER JOIN B

ON A.ID = B.ID

WHERE A.ID IS NULL

 

OUTER JOIN: 외부 조인

FULL OUTER JOIN

오라클은 OUTER 조인이 있지만 MYSQL은 없어서 LEFT outer + RIGHT outer 조인을 사용한다.

A테이블이 가지고 있는거, B테이블이 가지고 있는거 둘다 SELECT

 

EX)

학번 이름
11 kim 180
22 jim 181
33 sue NULL
44 NULL 182
55 NULL 185

 

SQL코드

SELECT A.ID, A.ENAME, A.KNAME

FROM A FULL OUTER JOIN B

ON A.ID = B.ID

 

LEFT OUTER JOIN

LEFT OUTER JOIN은 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.

 

ex.

SELECT *

FROM EMPLOYEE E LEFT OUTER JOIN DEPARTMENT D 

ON E.DEPARTMENTID = D.DEPARTMENTID;

 

<ORACLE>

SELECT *

FROM EMPLOYEE E, DEPARTMENT D

WHERE E.DepartmentID = D.DepartmentID(+);

 

RIGHT OUTER JOIN

RIGHT OUTER JOIN은 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시한다.

 

ex.

SELECT *

FROM EMPLOYEE E RIGHT OUTER JOIN DEPARTMENT D

ON E.DepartmentID = D.DepartmentID;

 

<ORACLE>

SELECT *

FROM EMPLOYEE E , DEPARTMENT D

WHERE E.DepartmentID(+) = D.DepartmentID;

 

8. cross join

CROSS JOIN은 Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환한다. 

즉, 두 번째 테이블로부터 각 열과 첫 번째 테이블에서 각 열이 한번씩 결합된 열을 만들 것이다. 예를 들어 m열을 가진 테이블과 n열을 가진 테이블이 교차 조인되면 m*n 개의 열을 생성한다. 그래서 테이블의 각 값을 연결하여 테이블 행의 수를 모두 곱한 값만큼 만들어진다.



 

참조 https://pearlluck.tistory.com/46, https://clairdelunes.tistory.com/22

 

DB JOIN 정리(INNER/LEFT/RIGHT/OUTER)

join(조인) 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함 이 공유하고 있는 컬럼을 PK 또는 FK값으로 사용 ​ 종류 1. INNER

pearlluck.tistory.com

 

 

[SQL] Join(조인)

Join(조인) - 조인이란 여러 테이이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현

clairdelunes.tistory.com

 

'CS공부 > 데이터베이스' 카테고리의 다른 글

트랜잭션(Transaction) 1(트랜잭션이란+트랜잭션 작동방식)  (0) 2021.07.20
SQL vs NoSQL  (0) 2021.07.17
SQL Injection  (0) 2021.07.17
Database의 Key  (0) 2021.07.16
데이터 베이스 개요  (0) 2021.07.16