4장 WHERE 조건절을 활용한 데이터 조건 주기
1. 숫자형 데이터 조건
- SELECT 열 이름1, 열 이름2 FROM 테이블명 WHERE 비교할 열 이름=숫자;
2. 문자형 데이터 조건
-
- SELECT 열 이름1, 열 이름2 FROM 테이블명 WHERE 비교할 열 이름='문자';
EX1) 가입금액이 1백만원 이상인 고객들의 고객번호, 계약번호, 가입금액을 추출
-
- SELECT ID, CNRT_NO, CNRT_AMT
FROM INS_INFO
WHERE CNRT_AMT >= 1000000;
- SELECT ID, CNRT_NO, CNRT_AMT
EX2) 상품 계약일이 2013년 04월 16일 이후인 고객들의 고객번호, 계약일, 상품명을 추출하고 고객번호는 오름차순으로 정렬
-
- SELECT ID, CNRT_DT, PRDT_NM
FROM INS_INFO
WHERE CNRT_DT > '20130416'
ORDER BY ID ASC;
- SELECT ID, CNRT_DT, PRDT_NM
3. 산술연산자 - SELECT문에서 사용되는 경우
-
- SELECT 열 이름1, 열 이름2 산술연산자 열 이름3 AS 새로운 이름 FROM 테이블명;
4. 산술연산자 - WHERE 조건절에서 사용되는 경우
-
- SELECT 열 이름 FROM 테이블명 WHERE (열 이름1 산술연산자 열 이름2) 비교연산자 비교 대상
5. NULL값의 처리
-
- COALESCE (EXPRESSION 1, EXPRESSION 2, EXPRESSION 3, ..., EXPRESSION N)
→ EXPRESSION 1이 NULL값이 아니면 EXPRESSION 1의 값을 리턴하고,
EXPRESSION 1이 NULL값이고 EXPRESSION 2가 NULL값이 아니면 EXPRESSION 2의 값을 리턴하는 방식
EX3) 각 고객의 2013년 11월 총 신용카드사용금액을 TOT_AMT라는 열 이름으로 출력, 총 사용금액을 기준으로 내림차순 정렬
-
- SELECT CMF, PARTY_NM, SEG,
(COALESCE(PIF_AMT, 0) + COALESCE(INST_AMT, 0) +
COALESCE(OVRS_AMT, 0) + COALESCE(CASH_AMT, 0))
AS TOT_AMT
FROM CARD_TRAN
ORDER BY TOT_AMT DESC;
- SELECT CMF, PARTY_NM, SEG,
비교연산자
비교연산자설명
A = B | A와 B가 같다. |
A <> B | A와 B가 같지 않다. |
A != B | A와 B가 같지 않다. |
A ^= B | A와 B가 같지 않다. |
A < B | A가 B보다 작다. |
A <= B | A가 B보다 작거나 같다. |
A > B | A가 B보다 크다. |
A >= B | A가 B보다 크거나 같다. |
BETWEEN A AND B | A <= 값 <= B |
IS NULL | NULL값인 데이터 반환 |
IS NOT NULL | NULL값이 아닌 데이터 반환 |
산술연산자
산술연산자설명
+ | 더하기 |
- | 빼기 |
* |
곱하기 |
/ | 나누기 |
5장 논리연산자를 활용한 데이터 조건 주기
1. AND 연산자
-
- SELECT 열 이름1, 열 이름2 FROM 테이블명 WHERE 조건절1 AND 조건절2;
EX1) BRNCH_INFO 테이블을 사용하여 직원 수가 10명 이상이고 경영평가가 'C'이면서 영업점이 폐쇄된 데이터 전체를 출력
-
- SELECT *
FROM BRNCH_INFO
WHERE BRNCH_NUM >= 10
AND BRNCH_PERF = 'C'
AND CLOSE_DT IS NOT NULL;
- SELECT *
2. OR 연산자
-
- SELECT 열 이름1, 열 이름2 FROM 테이블명 WHERE 조건절1 OR 조건절2;
OR 연산자보다 AND 연산자가 더 높은 우선순위를 가지고 있다.
따라서 이를 외우기보다는, OR 연산자와 AND 연산자를 동시에 사용할 경우 괄호로 우선순위를 지정해주자.
3. IN 연산자
-
- SELECT 열 이름 FROM 테이블명 WHERE 비교할 열 이름 IN (조건1, 조건2);
EX2) BRNCH_INFO 테이블을 사용하여 직원 수가 10명 또는 8명이면서 경영평가가 'A' 또는 'B'인 데이터 출력
-
- SELECT *
FROM BRNCH_INFO
WHERE BRNCH_NUM IN (8, 10)
AND BRNCH_PERF IN ('A', 'B');
- SELECT *
A. IN 연산자는 OR 연산자보다 빠르다.
B. IN 연산자 안에 하위 쿼리를 사용할 수 있다.
4. NOT IN 연산자
-
- SELECT 열 이름 FROM 테이블명 WHERE 비교할 열 이름 NOT IN (조건1, 조건2);
EX3) BRNCH_INFO 테이블을 사용하여 폐쇄되었거나 2000년도 이전에 신설한 영업점 중 경영평가가 'A' 또는 'B'가 아닌 데이터 출력
-
- SELECT *
FROM BRNCH_INFO
WHERE (OPEN_DT < '20000101' OR CLOSE_DT IS NULL)
AND BRNCH_PERF NOT IN ('A', 'B');
- SELECT *
EX4) 직전 3개월 동안 카드사용금액이 계속 줄어드는 고객 중 직전 3개월 총 사용 금액이 7천원 이상인 고객을 출력
-
- SELECT *
FROM PERF_MAST_201312
WHERE COALESCE(TOT_AMT_3, 0) > COALESCE(TOT_AMT_2, 0)
AND COALESCE(TOT_AMT_2, 0) > COALESCE(TOT_AMT_1, 0)
AND (COALESCE(TOT_AMT_1, 0) + COALESCE(TOT_AMT_2, 0) + COALESCE(TOT_AMT_3, 0)) >= 7000;
- SELECT *
COALESCE(TOT_AMT_3, 0) > COALESCE(TOT_AMT_2, 0) > COALESCE(TOT_AMT_1, 0)
6장 텍스트 마이닝을 활용한 데이터 조건 주기
1. LIKE 연산자를 활용한 필터링
-
- SELECT 열 이름 FROM 테이블명 WHERE 열 이름 LIKE '와일드카드 문자 + 찾고 싶은 문자';
와일드카드설명
% | 숫자 0 또는 문자들을 대체하기 위해 사용됨 |
_(언더바) | 한 개의 단어를 대체하기 위해 사용됨 |
EX1) CUSTOMERS 테이블을 사용하여 도시 이름이 B로 시작해서 N으로 끝나는 곳에 거주하는 고객 출력
-
- SELECT *
FROM CUSTOMERS
WHERE CITY LIKE 'B%N';
- SELECT *
2. 필드 결합하기
-
- SELECT 열 이름1 || '삽입하고 싶은 문자열' || 열 이름2 FROM 테이블명;
→ || 대신에 +를 사용하기도 한다. 하지만 ||를 더 많이 사용한다고 한다.
EX2) CUSTOMERS 테이블을 사용하여 도시(나라)로 표현되도록 필드를 결합하고 ADDR이라는 별칭을 부여
-
- SELECT *, CITY || '(' || COUNTRY || ')' AS ADDR
FROM CUSTOMERS;
- SELECT *, CITY || '(' || COUNTRY || ')' AS ADDR
3. 공백 제거하기
-
- SELECT 열 이름1, TRIM(열 이름2) FROM 테이블명;
→ RTRIM(오른쪽 공백 제거), LTRIM(왼쪽 공백 제거), TRIM(모든 공백 제거)
EX3) CUST_PERF 테이블에서 ES라는 문자를 포함하는 도시 중 세 달 연속 구매 금액이 3백만원이 넘는 고객 출력
-
- SELECT *
FROM CUST_PERF
WHERE CITY LIKE '%ES%'
AND COALESCE(TOT_AMT_1, 0) > 3000000
AND COALESCE(TOT_AMT_2, 0) > 3000000
AND COALESCE(TOT_AMT_3, 0) > 3000000;
- SELECT *
EX4) 고객들에게 다음과 같은 메시지를 보내려고 할 때, 메시지 문구를 SQL로 작성
→ 'DEAR LEE, YOUR SEGMENT IS PRIORITY IN OUR COMPANY.'
-
- SELECT 'DEAR ' || TRIM(NAME) || ', YOUR SEGMENT IS ' || TRIM(SEG) || ' IN OUR COMPANY.' AS DM_DE
FROM CUST_PERF;
- SELECT 'DEAR ' || TRIM(NAME) || ', YOUR SEGMENT IS ' || TRIM(SEG) || ' IN OUR COMPANY.' AS DM_DE
'스터디 > SQL' 카테고리의 다른 글
[SQL] SQL 기초교재 10 ~ 12 (0) | 2019.08.03 |
---|---|
[SQL] SQL 기초교재 07 ~ 09 (0) | 2019.08.03 |
[SQL] SQL 기초교재 01 ~ 03 (0) | 2019.08.03 |