You& Data_Science & Life

SQL_4_where

WHERE

1. 숫자 & 문자 필터링

` - SELECT * FROM 테이블명 WHERE 비교할 열 이름 = ‘문자’; <br> - SELECT * FROM 테이블명 WHERE 비교할 열 이름 = 숫자;`

-- 1) 문자
SELECT * FROM EMP
WHERE TEAM_NM = '인사팀' 
ORDER BY GRADE;

-- 2) 숫자
SELECT * FROM EMP
WHERE GRADE == 2
ORDER BY GRADE, ID;

+ ORDER BY절은 항상 가장 마지막에 작성해야 한다



2. 비교 산술 연산자

1) 비교 연산자

비교 연산자 설명
A = B A와 B가 같다.
A != B A와 B가 같지 않다.
A < B A가 B 미만이다.
A <= B A가 B 이하이다.
BETWEEN A AND B A이상 B이하 사이값 (A & B 포함)
IS NULL NULL값이 행
IS NOT NULL NULL값이 아닌 행
-- 1) emp 테이블 내에서, 등급이 1~2 사이인 행만 추출
SELECT * FROM EMP 
WHERE GRADE between 1 and 2;

-- 2) DLQ_END값이 NULL값이 아닌 행 찾기
SELECT * FROM DLQ_PARTY 
WHERE DLQ_END IS NOT NULL;

-- 3) PERF 테이블 내에서, SALES_CNT이 20초과 & 30이하인 행만 추출
SELECT * FROM PERF
WHERE SALES_CNT > 20
AND SALES_CNT <=  30
AND VISIT_CNT > 100;

-- 4) PERF 테이블 내에서, 
-- SALES_CNT이 20초과 & 30이하이면서, 방문횟수가 100회 이상인 행만 추출
SELECT * FROM PERF
WHERE SALES_CNT > 20
AND SALES_CNT <=  30
AND VISIT_CNT > 100;


2) 산술연산자 - with SELECT

: SELECT문에서 사용하는 산술연산자는, 주로 새로운 피쳐를 만들때 사용되기에 AS문과 함께 자주 사용됨.

-- 1회 평균 구매 금액 컬럼 생성
SELECT *, SALES_AMT/SALES_CNT AS PER_AMT 
FROM PERF;


3) 산술연산자 - with WHERE

-- SELECT * FROM 테이블
-- WHERE (COL_1 산술연산자 COL_2) 비교연산자 비교할 대상;
-- 1) 새로운 피쳐 생성 하지 않고, 조건절만으로 선택
SELECT * FROM PERF 
WHERE (SALES_CNT/VISIT_CNT * 100) > 30;

-- 2) 새로운 피쳐를 생성하고, 이후 조건절로 선택 
SELECT *,(SALES_CNT/VISIT_CNT * 100) AS SALES_RATE
FROM PERF 
WHERE (SALES_CNT/VISIT_CNT * 100) > 30;


3. NULL값의 처리 하는 함수들

1) COALESCE

COALESCE (EXP_1, EXP_2, ..., EXP_N) <br>
  - EXP_1이 NULL이 아니면 EXP_1을 Return하고, <br> 
  - EXP_1이 NULL이고 EXP_2가 NULL이 아니면 EXP_2를 Return하라 
    - COALESCE ('A', 'B') --> 'A'  <br>
    - COALESCE (NULL, 'B', 'C') --> 'B'  <br>
    - COALESCE (NULL, NULL, 'C') --> 'C'  <br>
    - COALESCE (NULL, 'B', NULL) --> 'B'  <br>

2) ZEROIFNULL(열 이름)

ZEROIFNULL (COL) <br>
  - 해당 열에 NULL이면, 0으로 변경

3) NVL2(열 이름, EXP_1, EXP_2)

COALESCE (EXP_1, EXP_2, ..., EXP_N) <br>
  - 해당 열에 NULL이면, '표현식 2'의 값을 나타내고 <br> 
  - 해당 열에 NULL이 아니면, '표현식 1'의 값을 나타내라


연습문제

-- 1) 사용자별로 총 사용금액
SELECT CMF, PARTY_NM, (
    COALESCE(PIF_AMT, 0) +
    COALESCE(INST_AMT, 0) + 
    COALESCE(OVRS_AMT, 0) + 
    COALESCE(CASH_AMT, 0)
    ) AS TOT_AMT
FROM CARD_TRAN_201311 
ORDER BY TOT_AMT DESC; 

-- 2) PB 고객들을 대상으로, 일시불 사용금액의 10%를 캐시백해줄 때, 사용자별 캐시백 금액 계산
SELECT CMF, PARTY_NM, SEG, PIF_AMT, PIF_AMT*0.1 AS CASH_BACK
FROM CARD_TRAN_201311 
WHERE SEG = 'PB';

Reference

  • 칼퇴족 김대리는 알고 나만 모르는 SQL - 책밥