스터디/SQL

[SQL] SQL 기초교재 04 ~ 06

훈스비 2019. 8. 3. 15:27

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;

EX2) 상품 계약일이 2013년 04월 16일 이후인 고객들의 고객번호, 계약일, 상품명을 추출하고 고객번호는 오름차순으로 정렬

    • SELECT ID, CNRT_DT, PRDT_NM
      FROM INS_INFO
      WHERE CNRT_DT > '20130416'
      ORDER BY ID ASC;

 

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;

비교연산자

비교연산자설명

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;

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');

 

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');

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;

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';

2.  필드 결합하기

    • SELECT 열 이름1 || '삽입하고 싶은 문자열' || 열 이름2 FROM 테이블명;

→ || 대신에 +를 사용하기도 한다. 하지만 ||를 더 많이 사용한다고 한다.

 

EX2) CUSTOMERS 테이블을 사용하여 도시(나라)로 표현되도록 필드를 결합하고 ADDR이라는 별칭을 부여

    • SELECT *, CITY || '(' || COUNTRY || ')' AS ADDR
      FROM CUSTOMERS;

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;

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;