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.비품코드),())
'SQLD' 카테고리의 다른 글
SQLD, 마지막 정리 - 자주 출제되는 내용 정리 (0) | 2025.03.08 |
---|---|
SQLD, 필기 요약 - 4 ( SQL 구문 ) (0) | 2025.03.08 |
SQLD, 필기 요약-2 ( 식별자 / 키 종류 / 정규화 / 슈퍼타입/서브타입 관계 테이블 병합 / Null / 본질(원조)/인조(인위) 식별자) (0) | 2025.02.26 |
SQLD, 필기 요약-1 ( 데이터베이스 / 엔터티 / 속성 ) (0) | 2025.02.18 |