DB/SQL

[SQL] JOIN(조인)

씩씩한 IT블로그 2020. 7. 11. 16:06
반응형

* 열은(칼럼은) SELECT에서 구한다. 여기서 말하는 모든 JOIN은 행을 말한다!

 

1. 등가(EQUI) 조인

(1) 등가 조인(INNER JOIN)

--EMP와 DEPT 테이블을 DEPTNO칼럼으로
SELECT * FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

--EMP와 DEPT 테이블을 INNER JOING, 같은게 여러개있다면 여러 조합으로 JOIN
SELECT * FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO;

- inner join할때 select* 하면, on에 쓰인 조건 열 2개가 모두 출력된다.

- 겹치는것이 여러개 있다면 각 조합별로 모두 출력한다. 예를들어 emp.dptno에 1이 2개, dept.deptno에 1이 3개이면 모든 조합(2*3)이 조인되어 총 6열이 출력된다

(2) INTERSECT

--EMP테이블과 DEPT테이블의 DEPTNO가 같은 값을 반환
SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;

 

2. 비등가 조인

(1) OUTER JOIN

--LEFT OUTER JOIN
SELECT * FROM DEPT LEFT OUTER JOIN EMP
 ON EMP.DEPTNO = DEPT.DEPTNO;

--RIGHT OUTER JOIN
SELECT * FROM DEPT RIGHT OUTER JOIN EMP
 ON EMP.DEPTNO = DEPT.DEPTNO;

 

3. 크로스 조인

--카타시간 곱, EMP테이블의 모든 행과 DEPT테이블의 모든 행을 일대일 대응 시킴
SELECT * FROM 고객정보 CROSS JOIN 도시;

 

4. UNION

(1) UNION (중복을 제거, 정렬이됨)

SELECT DEPTNO FROM EMP
UNION
SELECT DEPTNO FROM EMP;

(2) UNION ALL (중복을 제거 안함)

SELECT DEPTNO FROM EMP
UNION ALL
SELECT DEPTNO FROM EMP;

 

5. MINUS

--DEPT중에 EMP에있는것 제외
SELECT DEPTNO FROM DEPT
MINUS
SELECT DEPTNO FROM EMP;

 

6. natural join

: 두 테이블의 같은 이름을 가지는 속성은 모두 조건에 추가하여 비교. 즉 a테이블과 b테이블을 natural join하면 같은 칼럼의 값이 모두 똑같아야지만 출력됨(나이, 이름, 성별의 칼럼이 있다면 세값이 같아야지만 출력)

☆ natural join에서는 식별자를 쓸 수 없다!!!select table.column

--단 EMP.DEPTNO와 같은것이 식별자 사용하지 못함
SELECT DEPTNO, EMPNO, ENAME FROM EMP NATURAL JOIN DEPT;

 

7. 세미조인(semi join)

table A

w

x

y

w1

x1

y1

w2

x1

y1

w3

x1

y2

w4

x2

y3

 

table B

X

Y

Z

x1

y1

z1

x1

y1

z2

x2

y3

z3

x3

y3

z3

 

B에 대하여 A의 세미조인 : 겹치는 튜플을 골라 모든 속성값 다 반환

X

Y

Z

x1

y1

z1

x1

y1

z2

x2

y3

z3

 

반응형