카테고리:

조건식 함수

[ NOT ] IN

해당 인자가 명시적 목록의 멤버 또는 하위 쿼리의 결과 중 하나인지 여부를 테스트합니다.

참고

하위 쿼리 형식에서 IN은 = ANY 와 동일하고 NOT IN은 <> ALL 과 동일합니다.

구문

개별 값을 비교하려면:

<value> [ NOT ] IN ( <value_1> [ , <value_2> ...  ] )

행 생성자 (괄호로 묶인 값 목록)를 비교하려면:

( <value_A> [, <value_B> ... ] ) [ NOT ] IN (  ( <value_1> [ , <value_2> ... ] )  [ , ( <value_3> [ , <value_4> ... ] )  ...  ]  )

값을 하위 쿼리에서 반환된 값과 비교하려면:

<value> [ NOT ] IN ( <subquery> )

매개 변수

value

검색할 값입니다.

value_A, value_B

검색할 행 생성자의 요소입니다.

IN 의 오른쪽에 있는 각각의 값(예: (value3, value4))이 IN 의 왼쪽에 있는 값(예: (value_A, value_B))과 같은 수의 요소를 갖도록 합니다.

value_#

value 와 비교해야 하는 값입니다.

비교할 값이 행 생성자인 경우 각 value_# 는 행 생성자의 개별 요소입니다.

subquery

value 와 비교할 수 있는 값의 목록을 반환하는 하위 쿼리입니다.

사용법 노트

  • 대부분의 컨텍스트에서 NULL은 NULL과 같지 않습니다. value 가 NULL인 경우, 목록 또는 하위 쿼리에 NULL이 포함되어 있는지 여부와 관계없이 함수의 반환 값은 NULL입니다.

    예를 들어, 다음은 TRUE가 아닌 NULL을 반환합니다.

    SELECT NULL IN (1, 2, NULL) AS RESULT;
    
  • 구문적으로, IN 은 함수가 아닌 연산자로 처리됩니다. 아래 예에서는 IN 을 연산자로 사용하는 것과 f() 를 함수로 호출하는 것의 차이점을 보여줍니다.

    SELECT
        f(a, b),
        x IN (y, z) ...
    

    IN 을 포함한 함수 구문은 사용할 수 없습니다. 예를 들어, 앞의 예를 다음과 같이 다시 작성할 수 없습니다.

    SELECT
        f(a, b),
        IN(x, (y, z)) ...
    
  • IN하위 쿼리 연산자 로도 간주됩니다.

데이터 정렬 세부 정보

Arguments with collation specifications are currently not supported.

단순 리터럴과 함께 IN 사용하기

다음 예는 단순 리터럴과 함께 INNOT IN 을 사용하는 방법을 보여줍니다.

SELECT 1 IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+
SELECT 4 NOT IN (1, 2, 3) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+

하위 쿼리와 함께 IN 사용하기

SELECT 'a' IN (
    SELECT column1 FROM VALUES ('b'), ('c'), ('d')
    ) AS RESULT;
+--------+
| RESULT |
|--------|
| False  |
+--------+

테이블과 함께 IN 사용하기

이들 예에서는 테이블과 함께 IN 을 사용하는 방법을 보여줍니다. 아래 문을 실행하면 예제에서 사용하는 테이블이 생성됩니다.

CREATE TABLE my_table (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER);
INSERT INTO my_table (col_1, col_2, col_3) VALUES
    (1, 1, 1),
    (1, 2, 3),
    (4, 5, NULL);

이 예에서는 테이블의 단일 열과 함께 IN 을 사용하는 방법을 보여줍니다.

SELECT col_1, col_2, col_3
    FROM my_table
    WHERE (col_1) IN (1, 10, 100, 1000)
    ORDER BY col_1, col_2, col_3;
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     1 |     1 |
|     1 |     2 |     3 |
+-------+-------+-------+

이 예에서는 테이블의 여러 열과 함께 IN 을 사용하는 방법을 보여줍니다.

SELECT col_1, col_2, col_3
    FROM my_table
    WHERE (col_1, col_2, col_3) IN ( 
                                   (1,2,3), 
                                   (4,5,6)
                                   );
+-------+-------+-------+
| COL_1 | COL_2 | COL_3 |
|-------+-------+-------|
|     1 |     2 |     3 |
+-------+-------+-------+

이 예에서는 테이블의 여러 열을 읽는 하위 쿼리와 함께 IN 을 사용하는 방법을 보여줍니다.

SELECT (1, 2, 3) IN (
    SELECT col_1, col_2, col_3 FROM my_table
    ) AS RESULT;
+--------+
| RESULT |
|--------|
| True   |
+--------+

NULL 사용하기

NULL != NULL임을 기억하십시오. IN 의 왼쪽 또는 오른쪽에 있는 값에 NULL이 포함된 경우 다음 쿼리 중 어느 것도 일치 항목을 반환하지 않습니다.

SELECT NULL IN (1, 2, NULL) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL   |
+--------+
SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT;
+--------+
| RESULT |
|--------|
| NULL   |
+--------+
맨 위로 이동