TOP

SQL 강의 4. 데이터 필터링(WHERE)

대부분의 경우 모든 기록을 수신하는 것이 아니라 특정 기준을 충족하는 기록만 수신하면 됩니다. 이것이 바로 SQL에 샘플링 필터링을 위한 특수 연산자 WHERE이 있는 이유입니다.


1. WHERE 연산자를 통한 간단한 필터링.

예를 들어 특정 제품에만 관련된 레코드를 테이블에서 선택해 보겠습니다. 이를 위해 Product 열을 기준으로 값을 필터링하는 추가 선택 매개변수를 지정합니다.

텍스트 값 선택을 위한 쿼리의 예:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

보시다시피 선택 조건은 작은따옴표로 묶여 있으며 이는 텍스트 값을 필터링할 때 필수입니다. 숫자 값을 필터링할 때는 따옴표가 필요하지 않습니다.

숫자 값 선택을 위한 쿼리의 예:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 
ORDER BY Amount

이 예에서는 판매 수익이 $40,000를 초과하는 레코드를 선택하고 추가로 금액 필드를 기준으로 모든 레코드를 오름차순으로 정렬했습니다.

아래 표에는 SQL에서 지원하는 조건문이 나열되어 있습니다.

Знак операції Значення
= Дорівнює
<> Не дорівнює
< Менше
<= Менше або рівне
> Більше
>= Більше або рівне
BETWEEN Між двома значеннями
IS NULL Відсутній запис

2. 값 범위(BETWEEN)로 필터링

BETWEEN 연산자는 특정 범위에 있는 데이터를 선택하는 데 사용됩니다. 다음 쿼리에서는 금액 필드에 $1,000에서 $2,000 사이에 있는 모든 값이 선택됩니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

정렬 순서는 쿼리의 필드 순서에 따라 달라집니다. 즉, 우리의 경우 데이터는 먼저 Amount 열을 기준으로 정렬된 다음 City을 기준으로 정렬됩니다.

3. 빈 레코드 선택(IS NULL)

SQL에는 빈 레코드를 선택하는 특수 연산자(NULL)가 있습니다. 빈 항목은 문자가 입력되지 않은 테이블의 셀입니다. 셀에 0이나 공백을 입력하면 해당 필드가 채워진 것으로 간주됩니다.

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

위 예에서는 NULL 연산자를 보여주기 위해 Amount 필드에서 두 값을 의도적으로 제거했습니다.

4. 고급 필터링(AND, OR)

SQL 언어는 하나의 조건으로 필터링하는 것으로 제한되지 않으며, 자신의 목적을 위해 매우 복잡한 구성을 사용하여 여러 기준으로 동시에 데이터를 선택할 수 있습니다. 이를 위해 SQL에는 WHERE 연산자의 기능을 확장하는 추가 연산자가 있습니다. 이러한 연산자는 AND, OR, IN, NOT입니다. 우리는 이러한 연산자의 작동에 대한 몇 가지 예를 제시할 것입니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 AND City = 'Toronto'
Run SQLSELECT * 
FROM Sumproduct 
WHERE Month = 'April' OR Month = 'March'

AND 및 OR 연산자를 결합해 보겠습니다. 이를 위해 지난 3월에 판매된 자전거(Bikes)와 스케이트(Skates)를 선별해보겠습니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'

샘플에 많은 값이 포함되어 있음을 알 수 있습니다(3월 외에도 1월, 2월, 4월도 포함). 이유는 무엇입니까? 그리고 SQL에는 명령 실행 우선순위가 있다는 사실도 있습니다. 즉, AND 연산자가 OR 연산자보다 우선순위가 높으므로 3월에 판매된 스케이트가 포함된 레코드가 먼저 선택되고 자전거 관련 레코드가 모두 선택됩니다.

따라서 올바른 샘플링을 얻으려면 명령 실행 우선순위를 변경해야 합니다. 이를 위해 수학에서와 같이 괄호를 사용합니다. 그런 다음 괄호 안의 연산자가 먼저 처리되고 나머지는 모두 처리됩니다.

Run SQLSELECT * 
FROM Sumproduct 
WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'

5. 고급 필터링(IN 연산자)

Run SQLSELECT * 
FROM Sumproduct 
WHERE ID IN (4, 12, 58, 67)

IN 연산자는 OR과 동일한 기능을 수행하지만 몇 가지 장점이 있습니다.

  • 긴 목록으로 작업할 때는 IN이 포함된 문장을 읽기가 더 쉽습니다.
  • 더 적은 수의 연산자가 사용되므로 요청 처리 속도가 빨라집니다.
  • IN의 가장 중요한 장점은 구성 시 추가 구성 SELECT을 사용할 수 있다는 것입니다.
  • відкриває великі можливості для створення складних підзапитів.

    6. 고급 필터링(NOT 연산자)

    Run SQLSELECT * 
    FROM Sumproduct 
    WHERE NOT City IN ('Toronto', 'Montreal')
    

    NOT 키워드를 사용하면 샘플에서 불필요한 값을 제거할 수 있습니다. 또한, 필터링에 관련된 컬럼 이름 뒤에 위치하지 않고, 필터링에 관련된 컬럼 이름 앞에 위치한다는 점이 특징입니다.