SQL_4_where
03 Jun 2023 SQLWHERE
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 - 책밥