심심한잉여의 잡동사니

[SQLD] SQL활용 JOIN, 서브쿼리 본문

자격증/SQLD

[SQLD] SQL활용 JOIN, 서브쿼리

심심한잉여 2022. 5. 11. 12:41
반응형

FROM절 JOIN

1. INNER JOIN
 - JOIN조건을 FROM절에서 정의, USING조건절, ON조건절 필수

2. NATURAL JOIN
 - 두 테이블 간 동일한 이름을 갖는 모든 컬럼들에 대해 EQUAL JOIN 수행(USING, ON절 정의 불가, SQL Server 미지원)
 - JOIN에 사용 된 컬럼들은 같은 데이터 유형이여야 하며, ALIAS나 테이블명과 같은 접두사를 붙일 수 없다.
 - NATURAL JOIN은 JOIN에 사용된 같은 이름의 컬럼을 하나로 처리, INNER JOIN의 경우 2개의 컬럼으로 표시한다.

3. USING 조건절
 - FROM 절에 USING 조건절을 이용하면 같은 이름을 가진 컬럼중에서 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다.

4. ON 조건절
 - 두 테이블 간 특정 컬럼으로 EQUAL JOIN 수행, 컬럼명이 다르더라도 JOIN조건을 사용 할 수 있는 장점, ALIAS나 테이블명 반드시 사용

5. CROSS JOIN
 - 두 테이블의 Cartesian Product를 하는 것을 의미한다.
 - 두 집합의 건수만큼의 곱 만큼 결과가 만들어지게 된다. 예를 들어 A테이블 4개와 B테이블 4개가 있다면 16개의 값이 나온다.

6. OUTER JOIN(LEFT, RIGHT, FULL)
 JOIN 조건에서 동일한 값이 없는 행도 반환 가능하고 USING ON이나 조건절 반드시 필요
 - LEFT OUTER JOIN : 먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다. 우측 값에서 같은 값이 없는 경우 NULL 값으로 채운다.
 - RIGHT OUTER JOIN : LEFT OUTER JOIN과 반대로 오른쪽 테이블을 기준으로 잡는다.
 - FULL OUTER JOIN : 좌 우측 테이블의 모든 데이터를 읽어 JOIN한 결과를 생성하고 중복 데이터는 삭제한다.

7. SELF JOIN
동일 테이블 사이의 조인


집합 연산자
 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 때 사용
SELECT 절의 컬럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 컬럼의 데이터 타입이 상호 호환할 때 사용 가능
 - UNION : 여러개의 SQL의 결과에 대한 합집합으로 결과에서 모든 중복된 행을 하나의 행으로 만든다.
 - UNION ALL : 중복된 행도 그대로 결과에 표시한다.
 - INTERSECT : 교집합 / 중복된 행은 하나의 행으로 만든다.
 - MINUS : 차집합 / 중복된 행은 하나의 행으로 만든다.


서브 쿼리
 - 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
 - 서브쿼리는 메인 쿼리의 컬럼을 모두 사용할 수 있지만 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
 - 서브쿼리에서는 ORDER BY 절을 사용하지 못한다.
 - ORDER BY 절은 SELECT 절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은 메인쿼리의 마지막 문장에 위치해야 한다.
 - SELECT, FROM, WHERE, HAVING ORDER BY, INSERT-VALUES, UPDATE-SET 절에 사용 가능

단일행 서브 쿼리
 서브쿼리가 단일행 비교 연산자와 함께 사용할 때는 스브쿼리의 결과 건수가 반드시 1건 이하여야 한다.

다중행 서브쿼리
 서브쿼리의 결과가 2건 이상 반환 될 수 있다면 반드시 다중행 비교연산자와 함께 사용되어야 한다.

다중 컬럼 서브쿼리
 서브쿼리의 결과로 여러개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미
ex) WHERE (TEAM_ID, HEIGHT) IN (SELECT TEAM_ID, MIN(HEIGHT) FROM PLAYER GROUP BY TEAM_ID)

동작 방식에 따른 서브쿼리 분류
 - 비연관 서브쿼리 : 서브쿼리가 메인 쿼리 컬럼을 가지고 있지 않은 형태
 - 연관 서브쿼리 : 서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태
 EXISTS 서브쿼리는 항상 연관 서브쿼리로 사용된다.

그 밖의 위치에서 사용하는 서브쿼리
 - SELECT절에 서브쿼리 : 스칼라 서브쿼리
 - FROM 절에 서브쿼리 : 인라인 뷰
 - HAVING 절 UPDATE문의 SET, INSERT문의 VALUES절에 서브쿼리 사용 가능

반응형

'자격증 > SQLD' 카테고리의 다른 글

[ORACLE/SQL] DECODE, CASE WHEN  (0) 2022.05.24
[SQLD] 뷰, 그룹함수, 윈도우함수  (0) 2022.05.17
[SQLD] SQL기본 GROUP BY, ROWNUM, JOIN  (0) 2022.05.10
[SQLD] SQL기본 연산자, 함수  (0) 2022.05.09
[SQLD] DML,DCL,DDL,TCL  (0) 2022.05.06