SQL IN运算符

SQL IN运算符

SQL IN 是一个逻辑运算符,允许我们在 WHERE 子句中指定多个值或子查询。

它返回指定列与列表中的任一值匹配的所有行。值列表或子查询必须在括号内指定,例如IN (select查询) 或IN (Value1, Value2, Value3, …)

IN运算符可以与SQL中的任何数据类型一起使用。它用于基于指定值从数据库表中过滤数据。

在某些情况下,我们可以使用多个OR语句在SELECT、DELETE、UPDATE或INSERT语句中包含多个条件。而不是多个OR语句,我们可以使用IN运算符。

当您想选择与特定一组值匹配的所有行时,IN运算符非常有用。而当您想选择与多个条件中的任何一个匹配的所有行时,OR运算符非常有用。

语法

指定多个值的SQL IN运算符的基本语法如下−

WHERE column_name IN (value1, value2, value3, ...);

其中,

  • value1,value2,value3,… 是要针对表达式进行测试的列表中的值。如果在列表中找到任何这些值,则IN运算符返回TRUE,否则返回FALSE。

在SELECT语句中使用IN运算符

我们可以使用 SQL IN 运算符在WHERE子句中指定多个值,并且我们还可以在SELECT语句中使用它来检索与任何指定值匹配的数据。

在这里,我们使用IN运算符在SELECT语句中指定多个值。

示例

为了更好地理解,让我们考虑包含顾客个人详细信息的CUSTOMERS表,包括他们的姓名、年龄、地址和薪水等,如下所示 –

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

现在,使用INSERT语句将值插入到这个表中,操作如下:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

下面的表格将被创建如下:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

假设根据上表,我们想要显示名称等于’Khilan’、’Hardik’和’Muffy’(字符串值)的记录。可以使用 IN 运算符实现如下 –

select * from CUSTOMERS WHERE NAME IN ('Khilan', 'Hardik', 'Muffy');

输出

获得的结果如下所示-

+----+--------+-----+---------+----------+
| ID | NAME   | AGE | ADDRESS | SALARY   |
+----+--------+-----+---------+----------+
|  2 | Khilan |  25 | Delhi   |  1500.00 |
|  5 | Hardik |  27 | Bhopal  |  8500.00 |
|  7 | Muffy  |  24 | Indore  | 10000.00 |
+----+--------+-----+---------+----------+

注意 −我们不能在字符串值中使用通配符字符’%’,’_’等。可以使用OR运算符执行上述查询,如下所示−

select * from CUSTOMERS WHERE NAME = 'Khilan' OR NAME = 'Hardik' OR NAME = 'Muffy';

输出

+----+--------+-----+---------+----------+
| ID | NAME   | AGE | ADDRESS | SALARY   |
+----+--------+-----+---------+----------+
|  2 | Khilan |  25 | Delhi   |  1500.00 |
|  5 | Hardik |  27 | Bhopal  |  8500.00 |
|  7 | Muffy  |  24 | Indore  | 10000.00 |
+----+--------+-----+---------+----------+

在UPDATE语句中使用IN操作符

我们还可以在UPDATE语句中使用SQL IN操作符,以便更新符合WHERE子句中指定的任何值的行。UPDATE语句用于修改数据库表中的现有数据。

示例

在这个示例中,我们使用IN操作符在UPDATE语句中指定多个值,并更新之前创建的CUSTOMERS表。在这里,我们将年龄为’25’或’27’的客户记录更改为’30’。

update customers set AGE = 30 where AGE IN (25, 27);

输出

我们得到以下结果。我们可以观察到3位客户的年龄已被修改 –

(3 rows affected)

验证

我们可以通过使用SELECT语句检索其内容来验证表中的更改是否反映出来。以下是显示Customers表中记录的查询:

select * from customers;

表格显示如下:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  30 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  30 | Mumbai    |  6500.00 |
|  5 | Hardik   |  30 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

如我们在上表中看到的,’Khilan’、’Chaitali’和’Hardik’的年龄已更新为’30’。

使用NOT运算符和IN运算符

为了否定一个条件,我们使用NOT运算符。SQL的IN运算符可以与NOT运算符结合使用,在WHERE子句中排除特定的值。换句话说,将检查表达式中列表的缺席。

语法

下面是NOT IN运算符的基本语法:

WHERE column_name NOT IN (value1, value2, …);

示例

现在,我们试图显示CUSTOMERS表中所有不等于’25’、’23’和’22’的记录 –

select * from CUSTOMERS
WHERE AGE NOT IN (25, 23, 22);

输出

我们得到的结果如下所示:

+----+--------+-----+-----------+----------+
| ID | NAME   | AGE | ADDRESS   | SALARY   |
+----+--------+-----+-----------+----------+
|  1 | Ramesh |  32 | Ahmedabad |  2000.00 |
|  5 | Hardik |  27 | Bhopal    |  8500.00 |
|  7 | Muffy  |  24 | Indore    | 10000.00 |
+----+--------+-----+-----------+----------+

使用IN运算符与列名

我们也可以使用SQL的IN运算符与列名一起,比较一个列的值与另一个列的值。它用于选择给定列中存在特定值的行。

示例

在下面的查询中,我们试图选择具有thSALARY列的值的行-

select * from CUSTOMERS
WHERE 2000 IN (SALARY);

输出

这将产生以下结果−

+----+---------+-----+-----------+---------+
| ID | NAME    | AGE | ADDRESS   | SALARY  |
+----+---------+-----+-----------+---------+
|  1 | Ramesh  |  32 | Ahmedabad | 2000.00 |
|  3 | kaushik |  23 | Kota      | 2000.00 |
+----+---------+-----+-----------+---------+

使用IN运算符的子查询

我们可以使用带有IN运算符的子查询来返回来自单个列的记录。这意味着在子查询中不能包含SELECT列列表中的多个列。

语法

指定查询的IN运算符的基本语法如下:

WHERE column_name IN (subquery);

这里,

  • 子查询 − 这是一个SELECT语句,它有一个结果集用于与表达式进行测试。如果任何这些值与表达式匹配,则IN条件评估为true。

示例

在下面给出的查询中,我们显示所有来自CUSTOMERS表的记录,其中客户的姓名是通过工资大于2000获得的 –

select * from CUSTOMERS
WHERE NAME IN (SELECT NAME from CUSTOMERS WHERE SALARY > 2000);

输出

这将产生以下结果−

+----+----------+-----+---------+----------+
| ID | NAME     | AGE | ADDRESS | SALARY   |
+----+----------+-----+---------+----------+
|  4 | Chaitali |  25 | Mumbai  |  6500.00 |
|  5 | Hardik   |  27 | Bhopal  |  8500.00 |
|  6 | Komal    |  22 | MP      |  4500.00 |
|  7 | Muffy    |  24 | Indore  | 10000.00 |
+----+----------+-----+---------+----------+

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程