Notice
Recent Posts
Recent Comments
Link
Tags
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

JongDDA의 한걸음 한걸음씩

SQL - 조인(JOIN) 본문

개발/SQL

SQL - 조인(JOIN)

종따 2021. 7. 25. 17:56
728x90

SQL - 조인(JOIN)

 

2개 이상의 테이블을 연결하여 데이터를 동시에 출력하는 것을 JOIN이라 한다.

연결을 위해선 테이블들이 적어도 하나의 컬럼을 공유하고 있어야한다.

 

기본적인 JOIN의 문법 구조는 아래와 같다.

 

SELECT A.COL1, B.COL1
FROM TABLE1 A, TABLE2 B
WHERE A.COL2 = B.COL2;  -- JOIN 조건

 

JOIN은 CROSS JOIN,  EQUI JOIN,  NON EQUI JOIN,  INNER JOIN,  OUTER JOIN,  SELF JOIN 등이 있으며 JOIN은 사용되는 JOIN 연산자에 따라서 EQUI JOINNON EQUI JOIN 으로 구별되고 FROM 절의 JOIN 형태에 따라서 INNER JOINOUTER JOIN 으로 구별된다.

 

CROSS JOIN(=Cartesian Product)

: CROSS JOIN은 Cartesian Product(카디션 곱)이라고도 하며 조인되는 두테이블에서 공집합을 반환한다. 특정 기준 없이 두 테이블간 가능한 모든 경우의 수에 대한 결합을 결과로 보여주는 방식이다.

 

CROSS JOIN 구문

SELECT *
FROM EMPLOYEE CROSS JOIN DEPARTMENT;

EX)

SELECT *
FROM EMP CROSS JOIN DEPT;

 

EQUAL JOIN(등가 조인)

: 테이블 간의 컬럼 값들이 서로 정확하게 일치하는 경우에 사용하는 JOIN으로 WHERE 절에 '=' 연산자를 사용하여 JOIN 조건을 명시한다.

: 일반적으로 기본키, 외래키로 지정된 컬럼을 JOIN으로 많이 사용

: 2가지 이상의 중복 컬럼일 경우 USING(컬럼명)을 사용한다.

 

EQUAL JOIN 구문

SELECT table1.A, table2.A
FROM table1, table2
WHERE table1.A = table2.A;

 

EX) 

SELECT EMPNO, ENAME, DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;

 

 

Non-EQUAL JOIN(비등가 조인)

: 두 테이블 간의 컬럼 값들이 서로 일치하지 않는 경우에 사용하는 JOIN 방법으로 WHERE 절에 보통 BETWEEN ~ AND, < , > 등의 비교 연산자를 사용하여 JOIN 조건을 작성한다.

: 특정 범위와 등급을 지정하고 해당 범위에 들었을 때 등급으로 데이터를 표현하기 위해 사용한다.
: EQUI JOIN과 다르게 특정 칼럼을 범위로 JOIN 시킨다.

 

EX)

SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

INNER JOIN

: JOIN 조건을 만족하는 행만 반환하는 JOIN으로 FROM 절에 INNER JOIN 혹은 JOIN 절을 사용한다. JOIN 조건은 ON 절에 명시한다.

: 데이터는 같으나 컬럼명이 다를 때 사용가능하다.

 

INNER JOIN 구문

SELECT table1.A, table2.A, …
FROM table1 [INNER] JOIN table2 
ON table1.A = table2.A;

table1 [INNER] JOIN table2 : JOIN 할 테이블의 이름을 나열한다. INNER 를 생략해도 INNER JOIN 방식이 적용된다.

ON table1.A=table2.A : JOIN 조건을 명시한다.

 

EX)

SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME 
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;

 

OUTER JOIN

: 조인 조건을 만족하지 않는 데이터를 처리하기 위한 JOIN의 확장 형태이다. INNER JOIN 이 두 테이블에 있는 키 갑싱 일치하는 데이터만 가져오는 것에 비해 OUTER JOIN은 어느 한 쪽의 데이터를 모두 가져온다.

  또한, 한 테이블의 행이 다른 테이블의 행에 대응되지 않을 때 반환된 결과 집합의 경우, 대응되지 않는 행을 갖고 있는 테이블로 확인된 모든 결과 집합 열에 대해 NULL값이 제공된다.

: 조인하는 여러테이블에서 한 쪽에는 데이터가 있고,  한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 모두 출력하는 것. 즉, 조건에 맞지 않아도 해당하는 행을 출력하고 싶을 때 사용할 수 있다.

 

OUTER JOIN 구문

SELECT table1.A, table2.A, …
FROM table1 {LEFT|RIGHT|FULL} OUTER JOIN table2
ON table1.A = table2.A;
SELECT 컬럼
FROM 테이블명, 테이블명2
WHERE 테이블.컬럼명 = 테이블2.컬럼명(+);

 

EX)

SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO(+);

 

SELF JOIN

: SELF JOIN은 말 그대로 자기 스스로를 결합시키는 조인이다. SELF JOIN은 INNER JOIN 및 OUTER JOIN, CROSS JOIN과 동일한 방식으로 사용될 수 있지만 조인을 할 때에 기본 테이블 이외에 참조하는 테이블이 다른 테이블이 아닌 자기 자신이라는 점이 중요하다.

 

OUTER JOIN 구문

SELECT E.COLUMN, C.COLUMN
FROM TABLE1 E, TABLE1 C


EX)

SELECT E.ENAME, C.ENAME
FROM EMP E, EMP C
WHERE E.MGR = C.EMPNO;

 

 

 

 

 

728x90
반응형
Comments