두개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
각각 검색 할 필요없이 한번에 묶어서 검색가능
검색하고 싶은 컬럼이 다른 테이블에 있을때 여러개를 마치 하나의 테이블인 것 처럼 활용해서 나타냄
보통 Primary Key나 Foreign Key로 두 테이블 연결함
교집합 , 기준 테이블과 Join한 테이블의 중복된 값을 보여줌(모두 데이터가 존재해야함)
결과값은 중복된 값만 나타남 (일반적인 Join)
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)
b.age ( 테이블 b의 age : 테이블명.속성명)...
FROM a INNER JOIN b
ON a.userId(기준테이블명.기준키) = b.userId(조인테이블명.기준키);
SELECT a.name, b.age FROM a INNER JOIN b ON a.userId=b.userId;
암묵적으로 이렇게 씀 (Equi Join)
SELECT a.name, b.age
FROM a, b
WHERE a.userId=b.userId;
Inner Join 하는 방법은 다양함...
- Join 조건을 만족하지 않는 데이터를 처리하기 위한 Join으로 어느 한쪽의 데이터를 모두 가져옴
- Join 조건에 일치 하지 않는 값 추가시 사용
Join문 왼쪽에 있는 테이블의 모든 결과를 가져와서 오른쪽 테이블의 데이터에 매칭하고 매칭되는 데이터가 없는 경우 Null 표시
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)...
b.age ( 테이블 b의 age : 테이블명.속성명)...
FROM a LEFT OUTER JOIN b
ON a.userId=b.userId
-- 다른 방법
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명 = 테이블명2.속성명(+)
Join문 오른쪽에 있는 테이블의 모든 결과를 가져와서 왼쪽의 테이블의 데이터에 매칭하고 매칭되는 데이터가 없는 경우 Null 표시
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)...
b.age ( 테이블 b의 age : 테이블명.속성명)...
FROM a RIGHT OUTER JOIN b
ON a.userId=b.userId
-- 다른 방법
SELECT [테이블명1.]속성명, [테이블명2.]속성명 ....
FROM 테이블명1, 테이블명2
WHERE 테이블명1.속성명(+) = 테이블명2.속성명
- 왼쪽, 오른쪽 테이블의 모든 값을 읽어 JOIN함
- 합집합, 전체라고 생각 하면 됨
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)...
b.age ( 테이블 b의 age : 테이블명.속성명)...
FROM a FULL OUTER JOIN b
ON a.userId=b.userId
- 두 테이블의 곱집합
예를들어 각 에피소드 10까지 있는 미드가 시즌3까지 있다 할때, 시즌 1-1, 시즌 1-2, 시즌 1-3 .... 시즌 3-8, 시즌 3-9, 시즌 3-10 이런 느낌- 교차 조인되면 mxn개의 열을 생성함(경우의 수 전부 표현)
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)... b.age ( 테이블 b의 age : 테이블명.속성명)... FROM a CROSS JOIN b -- 다른 방법 SELECT [테이블명1.]속성명, [테이블명2.]속성명 .... FROM 테이블명1, 테이블명2
- 자기자신과 자기자신을 조인한다는 의미
- 하나의 테이블을 여러번 복사해서 조인
(주로 테이블에 Hierarchical structure가 있을 때 flat structure로 바꾸는 역할을 해준다)
SELECT a.name, ( 테이블 a의 name : 테이블명.속성명)...
b.age ( 테이블 b의 age : 테이블명.속성명)...
FROM a
LEFT OUTER JOIN a2
ON a.userId=b.userId;
아니면 INNER JOIN 사용하면 됨
📌
INNER JOIN : 교집합 - 두 테이블 사이 공통된 데이터만 나타냄
OUTER JOIN : 합집합 (LEFT OUTER JOIN 왼쪽테이블이 기준이고 왼쪽테이블 전체 + 두 테이블교집합/ RIGHT OUTER JOIN 오른쪽 테이블이 기준이고 오른쪽 테이블 전체+ 교집합 / FULL OUTER JOIN 전체 테이블)
SELF JOIN : 나자신을 한번 더 쓴다고 생각하면 됨 (직원이름 리스트에 상사와 사원이있을때 구분하고자 함, 그래서 한번더 써서 상사가 관리하는 사원을 나타낸다고 생각하면 됨)
CROSS JOIN : 전체테이블을 곱합 (미드 시즌1~3 에피소드 1~10 일때 1-1, 1-2...3-8, 3-9, 3-10)
참고 https://all-record.tistory.com/160
https://clairdelunes.tistory.com/22