3.함수

3.5 NULL관련함수

3.5.1 NVL(인수1, 인수2)

인수1의 값이 NULL이면 인수2를 반환 NULL이 아니면 인수1을 반환

NVL(REVIEW_SCORE, 0) -> 점수가 NULL이면 0을 반환 아니면 점수를 반환

3.5.2 NULLIF(인수1, 인수2)

인수1과 인수2가 같으면 NULL을 반환 같지않으면 인수1을 반환

NULLIF('HELLO', 'HELLO') -> NULL
NULLIF('HELLO', 'JJJ') -> HELLO

3.5.3 COALESCE(인수1, 인수2, 인수3, ...)

NULL이 아닌 최초의 인수 반환

연락처 찾을때
COALESCE(PHONE, EMAIL, FAX)-> NULL이아닌 연락처 찾아 연락가능

3.6 CASE

CASE는 함수와 성격이 같지만 표현방식이 구문에 가깝다.
같은 기능을 하는 함수눈 오라클의 DECODE가 있다.
CASE WHEN THEN

CASE WHEN SUBWAY = '1' THEN 'BLUE'
WHEN SUBWAY = '2' THEN 'GREEN'
WHEN SUBWAY = '3' THEN 'ORANGE'
[ELSE GRAY]
END

CASE SUBWAY
WHEN '1' THEN 'BLUE'
WHEN '2' THEN 'GREEN'
WHEN '3' THEN 'ORANGE'
[ELSE GRAY]
END

case when = if then에 결과 같은 느낌이라고 보면 될 듯하다.

DECODE(SUBWAY, '1','BLUE','2','GREEN','3','ORANGE'['GRAY'])

4. WHERE절

INSERT를 제외한 DML문을 수행할때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문이다.
특정 값이 포함되거나 특정 값이 포함되지 안헥 사용할 수 있다.
SELECT * FROM 테이블명 WHERE 조건절의 형태로 사용한다.

!! 새로운사실
조건식에서 컬럼명이 일반적으로 좌측에 위치하지만 우측에 위치해도 정상적으로 동작한다고 한다.

NULL과의 연산은 항상 FALSE가 된다. 주의!!

4.1 비교연산자

연산자 의미 예시
= 같음 where col = 10
< 작음 where col < 10
<= 작거나같음 where col <= 10
> where col > 10
>= 크거나같음 where col >= 10

4.2 부정비교연산자

연산자 의미 예시
!= 같지않음 where col != 10
^= 같지않음 where col ^= 10
<> 같지않음 where col <> 10
not 컬럼명 = 같지않음 where not col = 10
not 컬럼명 > 크지않음 where col >= 10

4.3 SQL연산자

연산자 의미 예시
BETWENN A AND B A와 B사이(A.B포함) where col between 1 and 10
LIKE '비교 문자열' 비교문자열을 포함 where col like '%방탄%'
IN (LIST) LIST 중 하나와 일치 where col in (1,3,5)
IS NULL NULL값 where col is null

4.4 부정 SQL 연산자

연산자 의미 예시
NOT BETWENN A AND B A와 B사이가 아님(A.B미포함) where col not between 1 and 10
NOT IN (LIST) LIST 중 일치하는 것이 없음 where col not in (1,3,5)
IS NOT NULL NULL값이 아님 where col is not null

4.5 논리연산자

연산자 의미 예시
AND 모든조건이 TRUE여야함 where col > 1 and col < 10
OR 하나이상의 조건이 TRUE여야함 where col = 1 or col = 10
NOT TRUE 면 FALSE이고 FALSE이면 TRUE where not col > 10

5. GROUP BY, HAVING 절

5.1 GROUP BY

말그대로 데이터를 그룹별로 묶을 수 있도록 해주는 절
GROUP BY 뒤에는 그루핑의 기준이 되는 컬럼이 오게 된다.
컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.

5.2 집계합수

NULL값을 제외하고 집계한다.

연산자 의미
COUNT(*) 전체 ROW를 COUNT하여 반환
COUNT(컬럼) 컬럼값이 NULL인 ROW를 제외하고 COUNT하여 반환
COUNT(DISTINCT 컬럼) 컬럼값이 NULL이 아닌 ROW중에서 중복을 제거한 COUNT를 반환
SUM(컬럼) 컬럼값들의 합계를 반환
AVG(컬럼) 컬럼값들의 평균을 반환
MIN(컬럼) 컬럼값들의 최솟값을 반환
MAX(컬럼) 컬럼값들의 최댓값을 반환

5.3 HAVING

HAVING절은 GROUP BY 절을 사용할때 WHERE절 처럼 사용하는 조건절이다.
데이터를 그루핑한 후 특정 그룹을 골라낼때 사용한다.

HAVING절은 논리적으로 GROUP BY절 이후에 수행되기 때문에
그루핑 후에 가능한 집계함수로 조건을 부여할 수 있다.
SELECT절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 집계함수로도 조건을 부여할 수 있다.

주의할점은 WHERE절에 사용해도 되는 조건까지 HAVING 절에 사용하면 성능상 불리할 수 있다.
WHERE절에서 필터링이 선행되어야 GROUP BY할 데이터량이 줄어들기 때문이다.
GROUP BY는 비교적 많은 비용이 들ㅇ기 때문에 수행 전에 데이터 량을 최소로 줄여 놓는 것이 바람직하다.

6. ORDER BY

ORDER BY 절은 SELECT문에서 논리적으로 맨 마지막에 수행된다.
수행순서 :
FROM WHERE GROUP BY HAIVING SELECT ORDER BY

명시하지 않으면 임의의 순서대로 출력된다.
ORDER BY 절에는 정렬의 기준이 되는 컬럼이 외게 되는데 컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.
옵션은 다음과 같다.
ASC : 오름차순
DESC : 내림차순
생략시 오름차순이 기본이다.

오라클에서 NULL은 최댓값으로 처리된다.
만약 순서를 변경하고 싶다면 ORDER BY 절에 NULLS FIRST / NULLS LAST옵션을 써서 NULL의 정렬상 순서를 변경할 수 있다.

'개념정리 > SQLD' 카테고리의 다른 글

SQLD SQL활용  (1) 2023.10.27
SQLD SQL기본 3  (1) 2023.10.26
SQLD SQL기본  (0) 2023.10.24
SQLD 데이터 모델링과 SQL  (0) 2023.10.24
SQLD 데이터 모델링의 이해  (0) 2023.10.23

+ Recent posts