SQL NOT IN运算符

SQL NOT IN运算符

本文将通过多个示例清晰演示SQL NOT IN运算符。在进入示例之前,让我们了解一下SQL NOT IN运算符及其SQL语法。

SQL NOT IN是什么?

SQL NOT IN运算符用于根据预定义的值集合从SQL查询中排除行。它经常在SELECT语句的WHERE子句中使用。NOT IN运算符的一般语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);

如果IN运算符指定的VALUES不满足条件,则会使用NOT IN SQL查询或NOT IN运算符对结果进行过滤。这意味着NOT IN SQL查询将VALUES与提供的表达式或列名进行比较。如果找到匹配项,则SELECT语句将不会将该特定记录包括在SQL查询的结果中。

SQL中的NOT IN运算符正好与IN运算符相反。此外,SQL中还存在逻辑运算符NOT,可用于选择条件语句为假的行。与此类似,当将WHERE子句和NOT IN运算符组合时,WHERE子句中指定的VALUES不会包含在NOT IN SQL查询的输出中。

参考下面的示例以清楚地了解SQL NOT IN运算符的工作原理以及将其与诸如WHERE的各种条件子句一起使用时的工作方式。

例子1:

为了首先应用NOT IN运算符,让我们创建一个名为Player_info的表,其中包含与球员相关的基本信息,并将VALUES插入其中。

CREATE TABLE Player_info(ID INT(10),
    First_Name VARCHAR(255),
    Last_Name VARCHAR(255),
    Year_Of_Birth INT,
    Place_Of_Birth VARCHAR(255),
    Country VARCHAR(255),
    );

现在,我们将使用INSERT INTO语句将值插入到此表中。

INSERT INTO Player_info VALUES(1, 'MS', 'Dhoni', 1981,  'Ranchi', 'India');
INSERT INTO Player_info VALUES(2, 'FAF', 'Duplessis', 1979, 'CapeTown', 'SouthAfrica');
INSERT INTO Player_info VALUES(3, 'Ruturaj', 'Gaikwad', 1994, 'Mumbai', 'India');
INSERT INTO Player_info VALUES(4, 'Virat', 'Kohli', 1990, 'Delhi', 'India');
INSERT INTO Player_info VALUES(5, 'Karn', 'Sharma', 1987, 'Haryana', 'India');
INSERT INTO Player_info VALUES(6, 'Ravindra', 'Jadeja', 1988,  'Nagpur', 'India');
INSERT INTO Player_info VALUES(7, 'Sam', 'Curran', 1998, 'Manchester', 'England');

表格将是这样的:

select * FROM Player_info;
ID First_Name Last_Name Year_Of_Birth Place_Of_Birth Country
1 MS Dhoni 1981 Ranchi India
2 FAF Duplessis 1979 CapeTown SouthAfrica
3 Ruturaj Gaikwad 1994 Mumbai India
4 Virat Kohli 1990 Delhi India
5 Karn Sharma 1987 Haryana India
6 Ravindra Jadeja 1988 Nagpur India
7 Sam Curran 1998 Manchester England

现在,我们将应用NOT IN操作符来通过特定条件排除表中的一些记录。

SELECT * FROM Player_info WHERE Place_Of_Birth NOT IN('Manchester');

此查询将排除出出生地为曼彻斯特的行。因此,最后一条记录将被排除,而其余所有记录都将由select语句返回。

输出:

ID First_Name Last_Name Year_Of_Birth Place_Of_Birth Country
1 MS Dhoni 1981 Ranchi India
2 FAF Duplessis 1979 CapeTown SouthAfrica
3 Ruturaj Gaikwad 1994 Mumbai India
4 Virat Kohli 1990 Delhi India
5 Karn Sharma 1987 Haryana India
6 Ravindra Jadeja 1988 Nagpur India

将多个值传递给NOT IN运算符,以便排除更多记录。

观察下面的查询:

SELECT * FROM Player_info WHERE Country NOT IN('SouthAfrica', 'England');

输出:

ID First_Name Last_Name Year_Of_Birth Place_Of_Birth Country
1 MS Dhoni 1981 Ranchi India
3 Ruturaj Gaikwad 1994 Mumbai India
4 Virat Kohli 1990 Delhi India
5 Karn Sharma 1987 Haryana India
6 Ravindra Jadeja 1988 Nagpur India
3 Ruturaj Gaikwad 1994 Mumbai India

示例2:

让我们看另一个使用NOT IN操作符的例子

考虑一个名为product_desc的表,其中包含产品的销售价格和购买价格。

CREATE TABLE Product_desc(
   Product_id INT(10),  
   Product_name VARCHAR(100),
   Buying_price INT(20),
   Selling_price INT(10),
);

现在,我们要向其中插入VALUES。

INSERT INTO Product_desc VALUES (1, 'Wireless mouse', 5000, 6000);
INSERT INTO Product_desc VALUES (2,'Laptop', 60000, 65000);
INSERT INTO Product_desc VALUES (3, 'Tablet', 40000, 50000);
INSERT INTO Product_desc VALUES (4, 'Speaker', 2000, 2500);
INSERT INTO Product_desc VALUES (5, 'Earphones', 1000, 1200);
INSERT INTO Product_desc VALUES (6, 'SSD_disk', 7500, 9000);

所以,这个表格的形式将是:

SELECT * FROM Product_desc;
Product_id Product_name Buying_price Selling_price
1 Wireless_mouse 5000 6000
2 Laptop 60000 65000
3 Tablet 40000 50000
4 Speaker 2000 2500
5 Earphones 1000 1200
6 SSD_disk 7500 9000

在这里,我们将使用NOT IN运算符来排除产品Speaker和SSD_disk的记录。

SELECT * FROM Product_desc WHERE Product_ name NOT IN('Speaker', 'SSD_disk');

输出:

Product_id Product_name Buying_price Selling_price
1 Wireless_mouse 5000 6000
2 Laptop 60000 65000
3 Tablet 40000 50000
5 Earphones 1000 1200

示例3:

考虑下面显示的具有记录的员工表:

emp_id emp_name City Age salary
1 Suresh Hyderabad 30 20000
2 Shreya Singh Lucknow 27 25000
3 Kavitha Kulkarni Delhi 33 60000
4 Raj Pawar Amritsar 30 50000
5 Jay Sharma Bangalore 25 40000
6 Sravan Kumar Chennai 30 20000

在这里,我们将删除名为Shreya Singh和Raj Pawar的员工的记录:

SELECT * FROM employee WHERE emp_name NOT IN('Shreya Singh', 'Raj Pawar');

输出:

emp_id emp_name City Age salary
1 Suresh Hyderabad 30 20000
3 Kavitha Kulkarni Delhi 33 60000
5 Jay Sharma Bangalore 25 40000
6 Sravan Kumar Chennai 30 20000

示例 4:

考虑下面的Subscription表,使用NOT IN运算符排除几条记录。

Customer_name Subscription_name purchasetime
Krishna Gold 03:13:20
Abrar Basic 02:23:39
Ali Premium 05:45:30
Mahesh Basic 06:30:32
Hafeez Gold 11:25:35
Joseph Premium 10:32:50
Ramya Premium 11:42:53

让我们排除掉”Subscription_name”列中所有包含”Premium”值的记录:

select * FROM Subscription WHERE Subscription_name NOT IN('Premium');

输出:

Customer_name Subscription_name purchasetime
Krishna Gold 03:13:20
Abrar Basic 02:23:39
Mahesh Basic 06:30:32
Hafeez Gold 11:25:35

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程