[SQLD 요약 정리] 2과목 2장 SQL 활용

박선영·2023년 11월 12일
0

[SQLD 이론 정리]

목록 보기
4/4
post-thumbnail

👋에필로그

책 [SQLD 자격검정 실전문제]과 한종구 강사님의 시험대비 유튜브 강의를 참고하여 공부하며 정리한 내용입니다.


2장 SQL 활용

1절 표준조인

01_조인

💡조인 JOIN

관계형 데이터베이스의 핵심적인 기능으로, 두 개 이상의 테이블을 하나의 테이블로 결합하는 명령어이다.

조인 방식설명
INNER JOIN동일한 데이터의 값을 기준으로 실행되는 JOIN
NATURAL JOIN양 테이블 간 동일한 컬럼명을 기준으로 자동으로 실행되는 INNER JOIN
CROSS JOIN결합하는 테이블 간 조건이 없을 때 실행되는 JOIN
OUTER JOIN기준이 되는 테이블은 다른 테이블에 값이 없어도 실행되는 INNER JOIN

02_INNER JOIN

INNER JOIN

가장 보편적인 JOIN 방법으로, 테이블 간에 매칭되는 모든 데이터 조합 중 특정 컬럼끼리 값이 같은 것만 출력한다.
INNER는 생략가능하다.

SELECT *
FROM 테이블 A (INNER) JOIN 테이블 B
ON A.COL1 = B.COL2;

03_NATURAL JOIN

NATURAL JOIN

* 시험에 잘 안나오며 실무에서도 거의 사용하지 않는 방식이라고 한다.

테이블 간에 동일한 이름의 컬럼에 대해 자동으로 실행되는 EQUI JOIN이다.
WHERE절에서 JOIN 조건을 사용하거나, ON절 또는 USING절을 사용할 수 없다.

SELECT *
FROM 테이블 A NATURAL JOIN 테이블 B;

04_CROSS JOIN

CROSS JOIN

테이블 간에 동일한 이름의 컬럼에 대해 자동으로 실행되는 EQUI JOIN이다.
WHERE절에서 JOIN 조건을 사용하거나, ON절 또는 USING절을 사용할 수 없다.

SELECT *
FROM 테이블 A NATURAL JOIN 테이블 B;

05_OUTER JOIN

OUTER JOIN

기준이 되는 테이블에 매칭되는 값이 없어도 NULL값으로 출력된다.
ORACLE 문법의 경우 콤마와 WHERE절의 +기호로 OUTER JOIN을 표현하며, 기준이 되는 테이블에 +기호를 사용한다.

SELECT *
FROM 테이블 A LEFT OUTER JOIN 테이블 B
ON A.COL1 = B.COL2;

ORACLE 문법)

SELECT *
FROM 테이블 A, 테이블 B
WHERE A.COL1(+) = B.COL2;

06_조인 조건

ON

ON절을 통해 동일하지 않은 이름을 가진 컬럼 간에도 조인 조건을 사용할 수 있다.

  • WHERE절과 혼용하여 사용할 수 있다.

USING

USING절에서는 테이블 간에 데이터 유형도 동일한 공통 컬럼으로 조인 조건을 사용한다.

SELECT *
FROM 테이블 A JOIN 테이블 B
ON A.COL = B.COL;

SELECT *
FROM 테이블 A JOIN 테이블 B
USING(COL);

데이터 증가

조인으로 인해 데이터가 증가할 수 있기 때문에 신중하게 사용해야 한다.

  • 조인 조건을 잘못 설정할 경우 데이터가 증가할 수 있다.
  • 중복 데이터가 있을 경우에는 데이터가 증가할 수 있다.

2절 서브쿼리 Sub Query

01_서브쿼리

💡서브쿼리 Sub Query

하나의 SQL에 포함되어 있는 또 다른 SQL을 말한다.

  • SELECT,FROM,WHERE,HAVING,ORDER BY,SET절 등에서 사용 가능하다.
  • 시작과 끝을 괄호()로 감싸서 표현한다.
서브쿼리설명
단일행 서브쿼리=, <, >, <> 연산자 사용
다중행 서브쿼리IN, ALL, ANY, EXISTS 연산자 사용

서브쿼리설명
스칼라 서브쿼리SELECT절의 서브쿼리
인라인 뷰FROM절의 서브쿼리
중첩 서브쿼리WHERE절의 서브쿼리

02_스칼라 서브쿼리

스칼라 서브쿼리

SELECT절에서 사용되는 서브쿼리로, 성능에 매우 불리하다.

SELECT COLUMN AS COLA,
  	   (SELECT COL2
  		FROM 테이블 B
  		WHERE B.COL3 = A.COL1) AS COLB
FROM 테이블 A;

03_인라인뷰

인라인 뷰

SQL의 핵심이다.
FROM절에서 사용되는 서브쿼리로, 동적 뷰라고도 한다.

SELECT A.COLUMN1 AS COLA, 
  	   B.COLUMN2 AS COLB
FROM 테이블 A, (SELECT COLUMN2, COL
  			   FROM 테이블) B
WHERE A.COL = B.COL;

04_EXISTS / NOT EXIST

EXISTS / NOT EXIST

  • EXISTS
    서브쿼리의 결과가 존재한다면 메인쿼리의 결과가 출력된다.
# 서브쿼리에 포함되는 데이터만 메인쿼리를 수행하여 출력한다.
SELECT *
FROM 테이블 A
WHERE EXISTS (SELECT *
              FROM 테이블 B
              WHERE B.COL = A.COL);
  • NOT EXISTS
    서브쿼리의 결과가 존재하지 않는다면 메인쿼리의 결과가 출력된다.
# 서브쿼리에 포함되지 않는 데이터만 메인쿼리를 수행하여 출력한다.
SELECT *
FROM 테이블 A
WHERE NOT EXISTS (SELECT *
                  FROM 테이블 B
                  WHERE B.COL = A.COL);

3절 비등가 조인

비등가 조인

조인할 때 특정 범위나 연산자 조건으로도 조인을 수행할 수 있다.

SELECT A.COLA, B.COLB
FROM 테이블 A JOIN 테이블 B
ON A.COL BETWEEN B.COL1 AND B.COL2

4절 계층형 SQL

01_계층형 SQL

계층형 SQL

계층적인 데이터 구조를 가진 테이블 내에서 데이터를 쉽게 출력하기 위한 SQL 문법

SELECT 컬럼명
FROM 테이블 
WHERE 조건
START WITH 시작조건
CONNECT BY [NOCYCLE] PRIOR 관계 방향
ORDER [SIBLINGS] BY 정렬 조건;
  • START WITH
    계층구조의 전개 시작 위치를 설정한다. 즉, 루트 데이터를 지정한다.
  • PRIOR
    • 자식 = 부모 형태면 순방향 전개 (부모 ▶ 자식)
    • 부모 = 자식 형태면 역방향 전개 (자식 ▶ 부모)
계층형 SQL 컬럼 및 함수설명
LEVELROOT부터 한 단계씩 내려가면서 증가하는 번호
CONNECT_BY_LEAF각 전개별 최하위 리프=1
CONNECT_BY_ISCYCLE자식 노드가 다시 본인의 부모 노드가 되는 경우=1
SYS_CONNECT_BY_PATHROOT로부터 각 행까지 전개된 데이터 경로
CONNECT_BY_ROOT각 전개한 데이터의 ROOT 데이터

5절 그룹 함수

01_그룹 함수

💡그룹 함수

테이블 내 데이터를 각 컬럼별로 그룹화하여 집계하는 함수이다.
UNION, UNION ALL 등으로 대체 가능하다.

그룹 함수설명
ROLLUP해당 컬럼의 소계 및 총계 출력
GROUPING컬럼의 소계 여부 출력
GROUPING SETS집계 대상 컬럼에 대한 소계 출력
CUBE결합 가능한 모든 경우의 수에 대한 집계

02_ROLLUP

ROLLUP

계층 구조이기 때문에 기준 컬럼이 2개 이상일 때 순서에 따라 출력이 달라진다.

SELECT COL1, COL2, SUM(COL3) AS SUM_COL3
FROM 테이블
GROUP BY ROLLUP (COL1, COL2);

03_GROUPING SETS

GROUPING SETS

집계 대상 컬럼에 대한 소계를 구하는 그룹 함수로, 기준 컬럼의 순서에 상관없이 결과가 동일하다.

SELECT COL1, COL2, SUM(COL3) AS SUM_COL3
FROM 테이블
GROUP BY GROUPING SETS (COL1, COL2);

04_CUBE

CUBE

결합 가능한 모든 값에 대한 다차원 집계를 구하는 그룹 함수로, 기준 컬럼의 순서에 상관없이 결과가 동일하다.

* 모든 경우에 대해 집계하기 때문에 다른 함수에 비해 성능상 불리하다.

SELECT COL1, COL2, SUM(COL3) AS SUM_COL3
FROM 테이블
GROUP BY CUBE (COL1, COL2);

6절 윈도우 함수

01_윈도우 함수

(시험에 잘 나오지는 않지만 가끔 나오는 내용들을 위주로 정리하였다.)

💡윈도우 함수

데이터를 분석하거나 통계적인 계산을 하는 함수이다.

  • 복잡하게 구해야 하는 로직을 쉽게 처리할 수 있다.
  • 함수 자체를 중첩하여 사용할 수 없다.
분류윈도우 함수
순서, 순위RANK, DENSE_RANK, ROW_NUMBER
집계, 계산SUM, AVG, COUNT, MAX, MIN
ROWS, 위치FRIST_VALUE, LAST_VALUE, LAG, LEAD
백분율, 비율CIME_DIST, RATIO_TO_REPORT, PERCENT_RANK, NTILE
SELECT COL1, COL2,
	   ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) AS 행번호
       DENSE_RANK() OVER (PARTITION BY COL1 ORDER BY COL2) AS 순서
       SUM(COL2) OVER (PARTITION BY COL1) AS 합계
FROM 테이블;

02_SUMORDER BY

SUM

SUM의 경우 ORDER BY를 사용할 경우 누적합계를 계산할 수 있다.

SELECT COL1, COL2,
       SUM(COL2) OVER (PARTITION BY COL1 ORDER BY COL2) AS 누적합계
       SUM(COL2) OVER (PARTITION BY COL1) AS 합계
FROM 테이블;

03_NTILE

NTILE

파라미터 값(N)으로 등분하여 포함되는 구간값을 출력한다.

SELECT COL1, COL2,
	   NTILE(3) OVER (PARTITION BY COL1 ORDER BY COL2) AS 3구간
FROM 테이블;

📝정리

2과목 2장에서는 SQL의 활용에 대해 소개하였다.
SQL의 활용 방법으로 조인, 서브쿼리, 함수 등을 소개하였다. 어떤 함수가 어떠한 성격을 가지고 있는지를 알고 있는 것이 중요할 것 같다.

많은 종류의 함수가 나오다보니 단순 암기보다는 실습을 통해 익히는 것이 가장 효과적이니까 직접 실습해보는 것을 추천한다.

profile
데이터를 만지는 사람

1개의 댓글

comment-user-thumbnail
2024년 8월 24일

핵심내용만 요약되어있어 짧은 시간에 보기 매우 유용했습니다.

답글 달기