※ JOIN
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것.
- PK나 FK 값의 연관에 의해 JOIN이 성립된다.
- PK, FK 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립가능하다.
5가지 테이블을 JOIN 하기 위해서는 최소 4번의 JOIN 과정이 필요하다. (N-1)
※ EQUI JOIN("=") : 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용, 대부분 PK, FK의 관계를 기반.
- SELECT PLAYER.PLAYER_NAME
FROM PLAYER
SELECT절처럼 컬럼명 앞에 테이블 명을 기술해줘야 함
※ NON EQUI JOIN : 2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용
→ "BETWEEN, >, <= " 등 연산자 사용
- SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HSAL;
위는 E의 SAL의 값을 S의 LOSAL과 HSAL 범위에서 찾는 것이다.
SQL 활용
집합 연산자
두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 때 사용
SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환할 때 사용 가능
일반 집합 연산자
- UNION : 합집합(중복 행 1개로) 정렬
- UNION ALL : 합집합(중복 행도 표시) 정렬X
- INTERSECT : 교집합(중복 행 1개로)
- MINUS (ORACLE) : 차집합(중복 행 1개로 = EXCEPT(SQL SERVER). ≒ DIFFERENCE
- CROSS JOIN : 곱집합(PRODUCT)
ALIAS는 처음 테이블, 정렬은 마지막 테이블 기준
순수 관계 연산자 : 관계형 DB를 새롭게 구현
- SELECT -> WHERE절로 구현
- PROJECT -> SELECT절로 구현
- NATRUAL JOIN -> 다양한 JOIN으로 구현
- DIVIDE -> 사용x
{a,x}{a,y}{a,z} divdie {x,z} = {a}
FROM 절 JOIN 형태
- INNER JOIN
- NATURAL JOIN
- USING 조건절
- ON 조건절
- CROSS JOIN
- OUTER JOIN
INNER JOIN : JOIN 조건에서 동일한 값이 있는 행만 반환, USING이나 ON 절을 필수적으로 사용
NATURAL JOIN : 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행, NATURAL JOIN이 명시되면 추가로 USING, ON, WHERE 절에서 JOIN 조건을 정의할 수 없다, SQL Sever는 지원X
USING 조건절
같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다, JOIN 칼럼에 대해서 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다, SQL Server 지원x
ON 조건절
ON 조건절과 WHERE 조건절을 분리하여 이해가 쉬우며, 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다, ALIAS나 테이블명 반드시 사용
CROSS JOIN = 카티시안 곱
양쪽 집합의 M*N건의 데이터 조합이 발생한다.
OUTER JOIN (LEFT, RIGHT, FULL)
JOIN 조건에서 동일한 값이 없는 행도 반환 가능하다, USING이나 ON 조건절 반드시 사용해야 함. SQL 식에서 (+) 안붙은 쪽으로 JOIN한다.
- LEFT OUTER JOIN : 먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다. 우측 값에서 같은 값이 없는 경우 NULL 값으로 채운다.
- RIGHT OUTER JOIN : LEFT OUTER JOIN의 반대
- FULL OUTER JOIN : 좌우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다. 중복 데이터는 삭제한다.
= (LEFT OUTER + RIGHT OUTER)의 중복 제거
'SQLD > 2과목' 카테고리의 다른 글
2과목 개념 (윈도우 함수 ~ 프로시저 & 트리거) (0) | 2023.08.26 |
---|---|
2과목 개념 (윈도우 함수 ~ 프로시저 & 트리거) (0) | 2023.08.06 |
2과목 개념 (계층형 질의 ~ GROUPING 함수) (0) | 2023.08.06 |
2과목 개념 (연산자 종류 ~ 집계 함수) (0) | 2023.08.05 |
2과목 개념 (SQL 기본 ~ 트랜잭션) (0) | 2023.08.04 |