구름조아
Join, Cross Join, Inner Join, Natural Join, Outer Join 본문
1. 조인(join) 이란?
- 두개 이상의 테이블을 결합하여 출력하는 명령어.
- 관계형 데이터베이스의 핵심적인 기능.
- PK와 FK의 값을 기반으로 join이 성립 된다.
- 조인은 여러 테이블을 하나의 테이블로 만드는 과정이다.
INNER_JOIN | 동일한 데이터의 값을 기준으로 실행되는 JOIN |
NATURAL_JOIN | 양 테이블 간 동일한 컬럼명을 가지고 자동으로 매칭되는 INNER_JOIN |
CROSS_JOIN | JOIN 하는 테이블간 조인 조건이 없을때 실행되는 JOIN |
OUTER_JOIN | INNER JOIN과 같은 상태에서 기준이 되는 테이블은 다른쪽에 같은 값이 없어도 실행되어 출력하는 JOIN |
2. CROSS JOIN
- 두개의 테이블 간에 매칭되는 모든 데이터 조합을 출력한다.
- 카티션곱(CARTESIAN PRODUCT)와 동의어.
- JOIN 조건을 따로 정의하지 않는다.
- 스크립트 실행
SELECT * FROM major, professor; SELECT * FROM major CROSS JOIN professor; |
3. INNER JOIN
- 두개의 테이블 간에 매칭되는 모든 데이터 조합 중 특정 컬럼끼리 값이 같은 것만 출력한다.
- 가장 보편적인 JOIN 방법이다.
- INNER 는 생략 가능
SELECT * FROM major m INNER JOIN profrssor p ON m.major_id = p.bl_major_id; |
4. NATURAL JOIN
- 두 테이블간에 동일한 이름을 갖는 모든 컬럼들에 대해 자동으로 EQUI JOIN을 실행 한다.
- WHERE 절에서 JOIN 조건을 사용하거나, ON절 또는 USING절을 사용 할 수 있다.
SELECT * FROM major NATURAL JOIN professor; |
5. OUTER JOIN
- INNER JOIN 과 다르게 기준이되는 한쪽은 매칭되는 값이 없어도 출력 된다.
- 동일한 값이 없다면 한쪽은 NULL이 출력 된다.
create table major_outer as select * from major where MAJOR_PRFS_CNT > 6; SELECT * FROM professor p OUTER JOIN major_outer m ON m.major_id = b.bl_major_id; SELECT * FROM professor p, major_outer m WHERE m.major_id = p.bl.major_id(+); |
6. ON절
- ON절은 동일하지 않은 이름을 가진 컬럼끼리도 JOIN조건에 사용 가능하도록 한다.
- 물론, 동일한 이름도 가능 하다.
- WHERE절과 혼용하여 사용도 가능 하다.
7. USING절
- USING절에 두 테이블에 존재하는 공통된 컬럼명을 사용
- 데이터 유형도 동일해야 한다.
SELECT * FROM major m INNER JOIN professor p ON m_major_id = p.bl_major_id; SELECT * FROM major m INNER JOIN professor p USING(major_id); |
8. 데이터 증가
- 조인을 잘못하면 데이터가 많아 진다.
- 중복된 데이터가 있을 때 JOIN은 신중하게 해야 한다.
create table major_duple as select * from major union all select * from major; create table professor_duple as select * from professor union all select * from professor; SELECT * FROM major_duple m INNER JOIN professor_duple p ON m_major_id = p.bl_major_id; |
'SQLD자격증공부 > SQL활용' 카테고리의 다른 글
윈도우함수 (0) | 2023.05.11 |
---|---|
그룹함수, Rollup, Grouping Sets, Cube (0) | 2023.05.11 |
계층형 SQL (0) | 2023.05.11 |
비등가조인, 집합연산자, Union all, Intersect (0) | 2023.05.11 |
서브쿼리, 스칼라 서브쿼리, 인라인뷰, Exsits (0) | 2023.05.11 |