728x90
1. 정의
RDB에서 기본키-외래키로 연관된 두 테이블을 묶어 하나의 테이블로 만드는 방법
2. 필요성
정규화 때문
정규화란?
불필요한 데이터의 정합성을 확보하고 이상 현상의 발생을 피하기 위해 테이블을 분할하여 생성하는 것
👉 분할한 테이블을 조합해서 사용하기 위해 조인을 사용함
3. Join의 종류
예제에 사용할 테이블은 아래와 같다.
lesosn 테이블 | lesosn 테이블 정보 |
- ID(PK): NUMBER - name: VARCHAR |
|
prices 테이블 | prices 테이블 정보 |
- ID(FK): NUMBER - PRICE: NUMBER |
- INNER JOIN 내부 조인
- = JOIN, 조인
- 교집합: 두 테이블에 공통된 부분만 추출
👉 두 테이블에 모두 데이터가 있어야만 결과가 나옴 - 두 테이블을 연결할 때 가장 많이 사용함
- 표기법에 따른 종류
- Explicit Inner Join 명시적 조인 표현 방법: INNER JOIN / JOIN 사용
- Implicit Inner Join 암시적 조인 표현 방법: , 사용
- 범주에 따른 종류
- EQUI JOIN 등가 조인: 조인 조건에 =를 이용하는 조인
- NON-EQUI JOIN 비등가 조인: 부등호가 포함된 조인
SELECT 조회할 열 목록
FROM 첫 번째 테이블
INNER JOIN 두 번째 테이블
ON 조인 조건
[WHERE 검색 조건];
-- Implicit Inner Join 예시
SELECT *
FROM lesson l, princes p
WHERE l.id = p.id;
-- Explicit Inner Join 예시
SELECT *
FROM lesson l
INNER JOIN prices p
ON l.id = p.id;
-- Non-equi Join + Implicit Inner Join 예시
-- 각 직원의 급여를 10%인상한 경우 급여 등급을 검색한다
SELECT e.eno, e.ename, e.sal, s.grade
FROM salgrade s, emp e
WHERE e.sal BETWEEN s.losal AND s.hisal;
- OUTER JOIN 외부 조인
- 조건에 일치하는 데이터와 일치하지 않는 데이터를 모두 가지고 옴
- 한쪽 테이블에만 데이터가 있어도 결과가 나옴
- 종류
- FULL OUTER JOIN: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
❗오라클은 지원함. MySQL/MariaDB는 지원 X 👉 UNION 사용 - LEFT OUTER JOIN: 왼쪽 테이블의 모든 값이 출력되는 조인
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 값이 출력되는 조인
- FULL OUTER JOIN: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
SELECT 조회할 열 목록
FROM 첫 번째 테이블(LEFT 테이블)
LEFT/RIGHT/FULL OUTER JOIN 두 번째 테이블(RIGHT 테이블)
ON 조인 조건
[WHERE 검색 조건];
-- LEFT OUTER JOIN 예시
SELECT *
FROM lesson l
LEFT OUTER JOIN prices s
ON l.id = s.id;
-- RIGHT OUTER JOIN 예시
-- lesson 테이블의 id=3인 데이터를 지우고 실행
SELECT *
FROM lesson l
RIGHT OUTER JOIN prices s
ON l.id = s.id;
-- FULL OUTER JOIN 예시
-- lesson 테이블의 id=3인 데이터를 지우고 실행
SELECT *
FROM lesson l
FULL OUTER JOIN prices s
ON l.id = s.id;
-- UNION 예시
SELECT *
FROM lesson l
LEFT OUTER JOIN prices s
ON l.id = s.id
UNION
SELECT *
FROM lesson l
RIGHT OUTER JOIN prices s
ON l.id = s.id;
LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN (or UNION) |
- INNER JOIN과는 달리 존재하지 않는 데이터는 NULL로 SELECT
- FULL OUTER JOIN = LEFT OUTER JOIN + RIGHT OUTER JOIN
- CROSS JOIN 상호 조인
- = 카티션 곱 (CARTESIAN PRODUCT)
- 곱집합
- 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인시키는 기능
- 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼임
SELECT *
FROM 첫 번째 테이블
CROSS JOIN 두 번째 테이블;
-- 예시
SELECT *
FROM lesson
CROSS JOIN prices;
- lesson 테이블에는 4개의 데이터가 존재하고 PRICES 테이블에는 3개의 데이터가 존재함
👉 12개의 결과 출력
- SELF JOIN 자체 조인
- 자기 자신과 조인하므로 1개의 테이블을 사용함
- 자기 자신을 가지고 JOIN 하므로 어느 쪽의 열을 명시하는지 애매한 문제가 발생함
👉 SELF JOIN 시 별칭을 사용하는 것이 권고됨
SELECT 조회할 열 목록
FROM <테이블> 별칭A
INNER JOIN <테이블> 별칭B
ON 조인 조건
[WHERE 검색 조건];
-- 예시
SELECT *
FROM lesson l1
INNER JOIN lesson l2
ON l1.id = l2.id;
출처
'Computer Science > DB' 카테고리의 다른 글
[정보처리기사] SQL 응용 - 기본 SQL 작성하기 (0) | 2024.04.23 |
---|---|
[DB] DB Connection Pool (0) | 2024.04.03 |
[DB] B-tree, B+tree (0) | 2024.04.01 |
[DB] 인덱스 index (0) | 2024.04.01 |
[DB] 트리거 Trigger (0) | 2024.03.28 |