프로그래밍공부(Programming Study)/데이터베이스(Database)

SQL 코딩의 기술(pp.176 ~ 194)

Chaany 2022. 7. 15.
728x90

사거블(Search ARGument able) 쿼리

  • =, >, <, >=, <=, BETWEEN, LIKE(검색 문자열 앞에 %를 붙이지 않을 때), IS [NOT] NULL
  • <>, IN, OR, NOT IN, NOT EXISTS, NOT LIKE -> 사거블이지만 좀처럼 사용 안함
  • 인덱스 사용 못하는 경우
  • WHERE절 조건에서 한 개 이상의 필드에 대해 연산하는 함수 사용 쿼리
  • WHERE절에서 필드에 대해 수치 연산 하는 경우
  • LIKE '%something%'처럼 %를 사용하는 경우

인덱스 사용 가능(사거블) vs 사용 불가능(넌사거블)

  • 인덱스 사용 불가능 :  WHERE YEAR(~) = 1950;
  • 인덱스 사용 가능 : WHERE ~ >= CAST('1950-01-01' AS Date) AND ~ < CAST('1951-01-01' AS Date);
  • 인덱스 사용 불가능 : WHERE LEFT(~, 1) = 'S';
  • 인덱스 사용 가능 : WHERE ~ LIKE 'S%';
  • 인덱스 사용 불가능 : WHERE ISNULL(~, 'V') = 'V';
  • 인덱스 사용 가능 : WHERE ~ = 'V' OR ~ IS NULL; -> OR 사용하면 인덱스 사용 못할 수도 있음
  • 개선된 쿼리 : WHERE ~ = 'V' UNINO ALL ~~~ WHERE ~ IS NULL;
  • 인덱스 사용 불가능 : WHERE ~ * 1.10 > 10000;
  • 인덱스 사용 가능 : WHERE ~ > 10000/1.10;
  • 핵심
  • 넌사거블 연산자를 사용하지 않는다.
  • WHERE 절에서 하나 이상의 필드에 대해 연산하는 함수를 사용하지 않는다.
  • WHERE 절에서 필드에 대한 수치 연산을 수행하지 않는다.
  • LIKE 연산자를 사용할 때 % 문자는 검색 문자열 끝에 붙인다('%SOMETING%' 또는 'SOME%THING'처럼 사용하지 않는다.)

LEFT 조인의 오른쪽 데이터를 올바르게 걸러 내자

  • SQL에서 차감 연산을 할 때는 OUTER JOIN을 사용한다.
  • LEFT 조인의 오른쪽에 대해(또는 그 반대로) 밖에 있는 WHERE절에서 필터 조건을 적용하면 원하는 결과를 얻지 못한다.
  • 걸러 낸 부분 집합을 제대로 차감하려면, 데이터베이스 시스템이 외부 조인을 수행하기 전에 데이터를 걸러 내야 한다.

CHAPTER 5. 집계

GROUP BY 절의 작동 원리를 이해하자

  • ROLL UP은 오른쪽에서 왼쪽으로 연산한다.
  • GROUPING SETS은 여러 쿼리를 UNION한 결과와 동일한 결과를 산출한다.
  • 집계 수행 전 WHERE 절이 적용된다.
  • GROUP BY 절은 필터링된 데이터 집합을 집계한다
  • HAVING 절은 집계된 데이터 집합을 다시 필터링한다.
  • ORDER EBY 절은 변형된 데이터 집합을 정렬한다.
  • SELECT 절에서 집계 함수나 집계 계산에 포함되지 않은 컬럼은 GROUP BY 절에 명시해야한다.
  • ROLL UP, CUBE, GROUPING SETS를 사용하면, 여러 집계 쿼리를 UNION으로 연결하는 대신 쿼리 하나로 좀 더 가능한 조합 결과를 산출할 수 있다.

 

728x90

댓글