CS 공부
SQL-JOIN 본문
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인 값을 조회
B가 NULL의 값을 가지고 있는건 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 |