SQL 레벨업 - 3장 SQL의 조건분기
8강 UNION을 사용한 쓸데없이 긴 표현
1, 정확한 판단 없는 UNION 사용 회피
SELECT item_name, year, price_tax_ex AS price
FROM Items
WHERE year <= 2001
UNION ALL
SELECT item_name, year, price_tax_in AS price
FROM Items
WHERE year >= 2002;
UNION 을 사용했을 때
-쓸데 없이 긴 SQL문, Items 테이블에 2회 접근 + 그때마다 TABLE ACCESS FULL 발생
-> 쓸데없는 테이블 접근을 발생시키며 SQL의 성능을 나쁘게 만듦
2. WHERE 구에서 조건 분기
"조건 분기를 WHERE 구로 하는 사람들은 초보자다. 잘 하는 사람은 SELECT 구만으로 조건 분기를 한다."
3. SELECT 구문에서 CASE 식을 사용한 조건분기
SELECT item_name, year,
CASE WHEN year <= 2001 THEN price_tax_ex
CASE WHEN year >= 2002 THEN price_tax_in END AS price
FROM Items;
-> Items 테이블에 대한 접근이 1회로 줄어듦
'구문'에서 '식'으로 사고를 변경하기
9강 집계와 조건 분기
1。 집계 대상으로 조건 분기
- UNOIN을 사용한 방법
SELECT prefecture, SUM(pop_men) AS pop_men, SUM(pop_men) AS pop_wom
FROM (SELECT prefecture, pop AS pop_men. null AS pop_wom
FROM Population
WHERE sex = '1'
UNOIN
SELECT prefecture, NULL AS pop_men, pop AS pop_wom
FROM Population
WHERE sex = '2') TMP
GROUP BY prefecture;
WHERE 구에서 sex 로 분기, 결과를 UNOIN으로 머지
Population 테이블에 풀 스캔이 2회 수행됨
- CASE 식을 사용한 방법
SELECT prefecture,
SUM(CASE WHEN SEX = '1' THEN pop ELSE 0 END) AS pop_men,
SUM(CASE WHEN SEX = '2' THEN pop ELSE 0 END) AS pop_wom
FROM Population
GROUP BY prefecture;
외관이 간단해질 뿐만 아니라 성능도 향상
Population 테이블로의 풀 스캔이 1회로 감소
10강 그래도 UNOIN이 필요한 경우
1. UNION 을 사용할 수밖에 없는 경우
- 머지 대상이 되는 SELECT 구문들에서 사용되는 테이블이 다른 경우
SELECT col_1
FROM Table_A
WHERE col_2 = 'A'
UNOIN ALL
SELECT col_3
FROM Table_B
WHERE col_4 = 'B';
2. UNOIN을 사용하는 것이 성능적으로 더 좋은 경우
-UNION을 사용했을 때 좋은 인덱스를 사용하지만, 이외의 경우에는 테이블 풀 스캔이 발생하는 경우
인덱스 설정
CREATE INDEX IDX_1 ON ThreeElements (date_1, flg_1);
CREATE INDEX IDX_2 ON ThreeElements (date_2, flg_2);
CREATE INDEX IDX_3 ON ThreeElements (date_3, flg_3);
11강 절차 지향형과 선언형
예외적인 몇 가지 상황을 제외하면 UNOIN을 사용하지 않는 것이 성능적으로도 좋고 가독성도 좋다는 것
1. 구문 기반과 식 기반
대부분 처음 배우는 프로그래밍 언어가 절차 지향형 프로그래밍 언어이기 때문에 절차 지향에 익숙하지만, SQL의 기본 적인 체계는 '선언형' --> '구문' 이 아니라 '식'
절차 지향형 언어가 CASE 구문으로 분기하는 것을, SQL은 CASE식으로 분기
SQL 구문의 각 부분(SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY)에 작성하는 것은 모두 식
2. 선언형의 세계로 도약
절차 지향형 세계에서 선언형 세계로 도약하는 것이 곧 SQL 능력 향상의 핵심