SQL IN 运算符

摘要:在本教程中,您将学习如何使用 SQL IN 运算符来检查一个值是否存在于一组值中。

SQL IN 运算符简介 #

IN 是 SQL 中的逻辑运算符之一。如果一个值存在于一组值中,IN 运算符返回 true,否则返回 false

以下是 IN 运算符的语法:

expression IN (value1, value2,...)Code language: SQL (Structured Query Language) (sql)

从技术上讲,您可以用等于(=)和 OR 运算符来替代 IN 运算符。换句话说,您可以使用一个或多个 OR 运算符来重写 IN 运算符,如下所示:

expression = value1 OR expression = value2 OR ...Code language: SQL (Structured Query Language) (sql)

NOT IN 运算符对 IN 运算符的结果取反。以下是 NOT IN 运算符的语法:

expression NOT IN (value1, value2,...)Code language: SQL (Structured Query Language) (sql)

如果 expression 不等于列表 (value1, value2, …) 中的任何值,NOT IN 运算符返回 true,否则返回 false

从技术上讲,您可以使用不等于(!=)和 AND 运算符来重写 NOT IN 运算符,如下所示:

expression != value1 AND expression != value2 AND...Code language: SQL (Structured Query Language) (sql)

请注意,如果列表 (value1,value2,...) 中的任何值为 NULLIN 运算符将不返回任何行。

在实践中,您通常在 SELECT 语句的 WHERE 子句中使用 INNOT IN 运算符,以筛选出其值在一组值中的行。

稍后,您将学习如何将 INNOT IN 运算符与子查询一起使用。

SQL IN 运算符示例 #

我们将使用示例数据库中的 employees 表来演示 IN 运算符的功能。

employees_table

对数值数据使用 IN 运算符 #

以下示例使用 IN 运算符查找职位 ID 为 8、9 或 10 的员工:

SELECT
  first_name,
  last_name,
  job_id
FROM
  employees
WHERE
  job_id IN (8, 9, 10)
ORDER BY
  job_id;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name | last_name | job_id
------------+-----------+--------
 Susan      | Mavris    |      8
 Bruce      | Ernst     |      9
 David      | Austin    |      9
 Alexander  | Hunold    |      9
 Diana      | Lorentz   |      9
 Valli      | Pataballa |      9
 Michael    | Hartstein |     10Code language: SQL (Structured Query Language) (sql)

以下示例使用 NOT IN 运算符查找职位 ID 不是 789 的员工:

SELECT
  first_name,
  last_name,
  job_id
FROM
  employees
WHERE
  job_id NOT IN (7, 8, 9)
ORDER BY
  job_id;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name  |  last_name  | job_id
-------------+-------------+--------
 William     | Gietz       |      1
 Shelley     | Higgins     |      2
 Jennifer    | Whalen      |      3
 Steven      | King        |      4
 Neena       | Kochhar     |      5
 Lex         | De Haan     |      5
 Jose Manuel | Urman       |      6
 Luis        | Popp        |      6
 John        | Chen        |      6
 Ismael      | Sciarra     |      6
 Daniel      | Faviet      |      6
 Michael     | Hartstein   |     10
...Code language: SQL (Structured Query Language) (sql)

对字符数据使用 IN 运算符 #

以下查询使用 IN 运算符检索名字为 StevenLexDaniel 的员工:

SELECT
  first_name,
  last_name
FROM
  employees
WHERE
  first_name IN ('Steven', 'Lex', 'Daniel');Code language: SQL (Structured Query Language) (sql)

试一试

输出

 first_name | last_name
------------+-----------
 Steven     | King
 Lex        | De Haan
 Daniel     | FavietCode language: SQL (Structured Query Language) (sql)

对日期值使用 IN 运算符 #

以下语句使用 IN 运算符检索在 1987-06-171994-08-161997-09-30 这些日期之一入职的员工:

SELECT
  first_name,
  last_name, 
  hire_date
FROM
  employees
WHERE
  hire_date IN ('1987-06-17', '1994-08-16', '1997-09-30');Code language: SQL (Structured Query Language) (sql)

试一试

输出

 first_name | last_name | hire_date
------------+-----------+------------
 Steven     | King      | 1987-06-17
 Daniel     | Faviet    | 1994-08-16
 Ismael     | Sciarra   | 1997-09-30Code language: SQL (Structured Query Language) (sql)

结合函数使用 IN 运算符 #

以下查询使用 EXTRACT 函数从 hire_date 列中提取月份,并使用 IN 运算符检索在一月二月三月入职的员工:

SELECT
  first_name,
  last_name, 
  hire_date,
  EXTRACT(MONTH FROM hire_date) joined_month
FROM
  employees
WHERE
  EXTRACT(MONTH FROM hire_date) IN (1, 2, 3)
ORDER BY 
  joined_month;Code language: SQL (Structured Query Language) (sql)

试一试

 first_name  | last_name | hire_date  | joined_month
-------------+-----------+------------+--------------
 Lex         | De Haan   | 1993-01-13 |            1
 Alexander   | Hunold    | 1990-01-03 |            1
 Karen       | Partners  | 1997-01-05 |            1
 Charles     | Johnson   | 2000-01-04 |            1
 Michael     | Hartstein | 1996-02-17 |            2
 Sarah       | Bell      | 1996-02-04 |            2
 Valli       | Pataballa | 1998-02-05 |            2
 Diana       | Lorentz   | 1999-02-07 |            2
 Britney     | Everett   | 1997-03-03 |            3
 Jonathon    | Taylor    | 1998-03-24 |            3
 Jose Manuel | Urman     | 1998-03-07 |            3Code language: SQL (Structured Query Language) (sql)

摘要 #

  • 使用 IN 运算符检查一个值是否存在于一组值中。
  • 使用 NOT 运算符对 IN 运算符取反。

数据库 #

测验 #

本教程是否有帮助?
© .