2023. 3. 13. 16:47ㆍSQLD 정리
서로 다른 테이블을 결합할 때 조인을 사용한다.
조인을 하는 방법
1. 두 테이블에서 동일한 컬럼을 찾는다.
2. 레코드를 식별할 수 있는 컬럼으로 결정한다.

위에 두개의 테이블이 있다. 회원별 전화번호를 출력하려고 한다. 따라서 회원정보가 있는 테이블과 전화번호가 있는 테이블을 결합하여 출력을 하면 된다. 두 테이블의 공통 칼럼은 회원코드이다. 회원코드를 이용해서 조인을 하면 다음과 같다.
SELECT A.이름, B.전화번호
FORM C_INFO A JOIN PHONE B ON A.회원번호 = B.회원코드;
위와 같이 조인은 다른 테이블과 결합하여 정보를 가져올 때 사용된다. 이제 조인의 종류에 대해 알아보자
조인의 종류
* 교집합
- INNER JOIN( 두 테이블에서 일치하는 데이터만 출력)
SELECT A.*, B.* FROM 테이블명1 A INNER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명
또는
SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명 = B.공통컬럼명
참고) 3개 이상의 테이블을 조인하는 경우
SELECT A.*, B.*, C.*
FROM 테이블명1 A INNER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명
INNER JOIN 테이블명3 C ON A.공통컬럼명 = C.공통컬럼명
......
또는
SELECT A.*, B.*, C.*
FROM 테이블명1 A , 테이블명2 B, 테이블명3 C
WHERE A.공통컬럼명 = B.공통컬럼명
AND B.공통컬럼명 = C.공통컬럼명
- LEFT JOIN
(왼쪽 테이블을 기준으로 합쳐집, 왼쪽테이블의 데이터에서 오른쪽 테이블의 데이터가 없어도 왼쪽테이블 데이터는 출력)
SELECT A.*, B.* FROM 테이블명1 A LEFT OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명
또는
SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명 = B.공통컬럼명(+)
- RIGHT JOIN
(오른쪽 테이블을 기준으로 합쳐집, 오른쪽테이블의 데이터에서 왼쪽 테이블의 데이터가 없어도 오른쪽테이블 데이터는 출력)
SELECT A.*, B.* FROM 테이블명1 A RIGHT OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명
또는
SELECT A.*, B.* FROM 테이블명1 A , 테이블명2 B WHERE A.공통컬럼명(+) = B.공통컬럼명
참고)(+)는 해당 테이블 속성값에 대해 NULL을 허용한다. 즉 오른쪽 테이블에는 없고 왼쪽 테이블에만 있는 데이터도 출력
참고) RIGHT와 LEFT 조인에서 OUTER는 생략 가능하다.
- OUTER JOIN(두 테이블의 합집합)
SELECT A.*, B.* FROM 테이블명1 A FULL OUTER JOIN 테이블명2 B ON A.공통컬럼명 = B.공통컬럼명
*합집합
- UNION(ALL)
SELECT * FROM A
UNION [ALL]
SELECT * FROM B
참고)
-UNION은 중복되는 데이터는 제외된 합집합 출력이 되고 UNION ALL은 중복값이 제거되지 않은 상태로 두테이블 전체가 출력된다.
-UNION은 조회 대상이 되는 컬럼 수가 같고 각 컬럼의 데이터타입 등 속성이 동일할 때 적용 가능
*차집합
- MINUS(오라클), EXCEPT(SQL 서버)
SELECT * FROM A
MINUS (오라클) 또는 EXCEPT(SLQ 서버)
SELECT * FROM B
*결합되는 대상간의 일치정도
-EQUI조인(동일한 컬럼을 사용하여 두 릴레이션을 결합) ,
-non-EQUI 조인(정확하게 일치하지 않는 컬럼들을 사용하여 두 릴레이션을 결합, =이 아니라 <. >, <=, >=를 이용해 조인)
* 조건구 없는 CROSS JOIN
- 서로 연관된 컬럼이 없을 경우 수행하는 조인
SELECT * FROM A CROSS JOIN B
A에 12개의 행 B에 10개의 행이 있다면 일치여부와 상관없이 모든 결합을 출력하니 120개의 행이 출력됨.
참고) 한 테이블 내에서 연간관계를 가진 두 칼럼 간의 조인 >>> 셀프조인
- 테이블 명과 컬럼며이 모두 일치하기 때문에 꼭 Allias를 써줘야 한다.
ex) SELECT T1.COL1, T2.COL1 FROM 테이블명 T1, 테이블명 T2 WHERE T1.COL1 = T2.COL
'SQLD 정리' 카테고리의 다른 글
SQL - 윈도우함수, 파티션 (1) | 2023.03.14 |
---|---|
SQL - 계층형 조회 (0) | 2023.03.14 |
SQL - 집계함수, SELECT문 연산 순서, 행 수 제한, ROWID (0) | 2023.03.13 |
SQL - Group By (0) | 2023.03.13 |
SQL - NULL 관련 함수 (0) | 2023.03.12 |