SQLD

SQLD, 필기 요약-3 ( SQL 구문 )

greenyellow-s 2025. 2. 27. 11:02
728x90
반응형

SQL 구문 실행 순서

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY


TRIM 함수

- LEADING

맨 앞부분의 문자만 제거

SELECT TRIM (LEADING 'A' FROM 'ABCD')

## 결과 BCD

 

- TRAILING

맨 뒷부분의 문자만 제거

SELECT TRIM (TRAILING 'D' FROM 'ABCD')

## 결과 ABC

 

- BOTH

맨 앞, 맨 뒷 부분의 문자 제거

SELECT TRIM (LEADING 'A' FROM 'ABCDA')

## 결과 BCD

조건문

- DECODE

## 형식
DECODE (컬럼, 조건1, 결과1, 조건2, 결과2, ...)

## 예시
SELECT DECODE (CHECK, 1, 'ADULT', 2, 'MINOR')

## 설명
# CHECK 컬럼이 1인 경우 'ADULT'로 반환
# CHECK 컬럼이 2인 경우 'MINOR'로 반환

 

- CASE WHEN

## 형식-1
CASE WHEN 조건식 THEN 반환값 ESLE "" END
## 형식-2
CASE "표현1" WHEN "값1" THEN "결과1" ELSE "" END

## 예시
SELECT 
	CASE WHEN AGE >=19 THEN 'ADULT'
		ELSE 'MINOR'
	END
FROM TABLE

## 설명
# AGE가 19 이상이면 'ADULT, 그렇지 않으면 'MINOR' 반환

문자열을 다루는 함수

- LTRIM (문자열, [제거할 문자(기본값은 공백)]) : 왼쪽에서 지정된 문자 제거 (= TRIM LEADING)

- RTRIM (문자열, [제거할 문자(기본값은 공백)]) : 오른쪽에서 지정된 문자 제거 (= TRIM TRAILING)

- SUBSTR (문자열, 시작 위치, 길이) : 일부분만 추출

- REPLACE (문자열, 교체할 문자열, 새로운 문자열) : 특정 문자열 교체

- LENGTH (문자열) : 문자열 길이

- UPPER (문자열) : 소문자 -> 대문자

- LOWER (문자열) : 대문자 -> 소문자

 

 

 

NULL 관련 함수

- NVL : NULL 인 데이터를 특정 값으로 변환

NVL(AGE, 0) : AGE 컬럼에서 NULL 값은 0으로 변환

 

- NULLIF : 특정 값을 NULL로 치환

NULLIF(TYPE, 938) : 938 값만 NULL 값으로

 

- COALESCE(A,B,C) : A, B, C 컬럼 순으로 읽어 NULL이 아닌 첫 번째 값 반환

COALESCE(NULL, NULL, 3) : 3을 리턴

 

 

 

기타 함수

NTILE(n) : 전체를 n 등분


순수 관계 연산자

SELECT / PROJECT / JOIN / DIVIDE

 

연산자 우선 순위

산술(* / + -) -> 연결(||) -> 비교(< > <= >=) -> IS NULL/LIKE/IN -> BETWEEN -> NOT -> AND -> OR


WHERE 절

- 특정 조건을 만족하는 행만을 대상으로 연산 수행

- 집계 함수 사용 불가

- SELECT, UPDATE, DELETE 에 사용 가능 / INSERT는 불가능

- NULL 과의 동등 / 비교는 IS NULL 또는 IS NOT NULL 만 가능

- SELECT 절의 별명 사용 불가능(WHERE 절이 먼저 실행되기 때문)

 

GROUP BY 절

- 특정 값을 기준으로 데이터 그룹화

- 집계 함수 : COUNT, SUM, AVG, MIN, MAX

- 컬럼명 앞에 DISTINCT을 붙히면 중복 제거

 

HAVING 절

- GROUP BY 연산이 끝난 결과HAVING 절에 만족하는 그룹 추출

- WHERE 절 먼저 실행되어 필터링하고 GROUP BY 실행

- 연산 부하가 높아서 WHERE 절 먼저 필터링

- HAVING 절에서는 집계 함수 사용 가능하나, WHERE 절에서는 사용 불가능

 

JOIN 절

여러 테이블로 원하는 데이터 조회하기 위해서 최소 N-1 만큼의 JOIN 조건 필요

 

- EQUI JOIN : 등식을 조건으로 사용할 때

- NON EQUI JOIN : 부등식을 사용해 범위를 나타내는 조건

 

- INNER : 교집합으로 존재하는 것만 병합

- OUTER : 합집합 개념 (LEFT OUTER / RIGHT OUTER / FULL OUTER)

- NATURAL : 같은 이름 컬럼에 동일한 컬럼 값을 가지는 행

- CROSS : 각 테이블의 모든 행의 대응을 조합(M * N) / 카타시안 곱

- SELF JOIN : 동일한 테이블 내 연관된 두 개의 컬럼 간에 조인을 수행

 


서브쿼리

- ORDER BY 절을 사용 할 수 없다.

- 서브쿼리에서 메인쿼리를 참조 할 수 있지만, 반대는 불가능 하다.

 

1. 스칼라 서브 쿼리 : SELECT 문의 컬럼 입력 위치

-> 컬럼의 수 : 1개

 

2. 인라인 뷰 : FROM 절의 테이블 입력 위치

-> 컬럼수 : 2개 이상

 

3. 중첩 서브 쿼리 : WHERE, HAVING 절의 컬럼 또는 테이블 입력 위치

-> 단일행 : 반환 값이 단일행 (<, <=, >, >= 등 사용 가능)

 

-> 다중행 : 반환 값이 다중행 (IN, ALL, ANY, SOME, EXISTS 사용 가능)

비교 연산자를 단일행에 사용 가능(역은 불가능)

 

-> 다중 컬럼 : 반환 값이 여러 칼럼을 가진 테이블

SQL Server에서는 현재 지원하지 않는 기능

 

연관 서브 쿼리 : 메인 쿼리의 컬럼을 서브 쿼리에 사용

비연관 서브 쿼리 : 메인 쿼리 컬럼을 서브 쿼리에 사용 안함

 

 

 

뷰 사용의 장점

1. 독립성

- 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않음

 

2. 편리성

- 복잡한 질의를 뷰로 단순하게 작성 가능

 

3. 보안성

- 숨기고 싶은 정보를 뷰 생성 시 해당 컬럼 빼고 생성

 


그룹 함수

GROUP BY절의 연산 결과에 대해 그룹별 연산 수행

 

- ROLLUP : 컬럼 대상으로 하위 그룹핑 수행

GROUP BY ROLLUP(날짜, 이름)

(날짜, 이름) -> 날짜 -> 전체 순서로 하위 그룹핑(맨 앞에 것만)

 

- CUBE : 조합 가능한 모든 경우를 그룹핑

GROUP BY CUBE(날짜, 이름)

(날짜, 이름) -> 날짜 -> 이름 -> 전체 순서로 하위 그룹핑

 

- GROUPING SETS : 각 소그룹별 합계만 간단하게 보여줌

CUBE(A.부서번호, B.비품코드) 

==

GROUPING SETS(A.부서번호, B.비품코드, (A.부서번호, B.비품코드),())

728x90
반응형