SQL IN – SQL NOT IN

时间:2020-02-23 14:32:28  来源:igfitidea点击:

SQL IN运算符与WHERE子句一起使用,以提供多个值作为WHERE子句的一部分。

1. SQL IN

SQL IN运算符几乎就像在同一列上具有多个OR运算符一样。
让我们详细讨论一下SQL IN运算符。

有两种定义IN运算符的方法。
我们将在下面详细讨论这两种方式。

1.1)作为IN的一部分的多个值

语法:

SELECT Column(s) FROM table_name WHERE column IN (value1, value2, ... valueN);

使用上述语法,我们可以定义多个值作为IN运算符的一部分。

通过一些示例,我们将更详细地理解上述语法。

让我们考虑以下学生表格作为示例。

RollNoStudentNameStudentGenderStudentAgeStudentPercent
1GeorgeM1485
2MonicaF1288
3JessicaF1384
4TomM1178

方案:获取12岁或者13岁学生的百分比。

查询:

SELECT StudentPercent FROM Student WHERE StudentAge IN ('12', '13');

输出:

StudentPercent
88
84

1.2)选择查询作为IN的一部分

语法:

SELECT Column(s) FROM table_name WHERE column IN (SELECT Statement);

使用上述语法,我们可以使用SQL SELECT语句作为IN运算符的一部分来提供值。

通过一些示例,我们将更详细地理解上述语法。
让我们考虑以下"产品和供应商"表作为示例。

产品表

ProductIdProductNameProductPrice
1Cookie10
2Cheese11
3Chocolate15
4Jam20

供应商表

ProductIdProductNameSupplierName
1CookieABC
2CheeseXYZ
3ChocolateABC
4JamXDE

场景:获取供应商为ABC的产品的价格。

查询:

SELECT ProductPrice FROM Product WHERE ProductName IN 
  (SELECT ProductName FROM Supplier WHERE SupplierName = "ABC");

输出:

ProductPrice
10
15

1.3)SQL嵌套IN

我们还可以在其他IN运算符内部使用IN。
为了更好地理解它,让我们考虑以下情况。

场景:获取供应商为ABC和XDE的产品的价格。

查询:

SELECT ProductPrice FROM Product WHERE ProductName IN 
  (SELECT ProductName FROM Supplier WHERE SupplierName IN ( "ABC", "XDE" ));

输出

ProductPrice
10
15
20

2. SQL NOT IN

如果不满足作为IN运算符一部分提到的值,则使用SQL NOT IN运算符过滤结果。
让我们详细讨论一下SQL NOT IN运算符。

语法:

SELECT Column(s) FROM table_name WHERE Column NOT IN (value1, value2... valueN);

在上面的语法中,将考虑将IN子句中不满足的值用作结果。
让我们以先前定义的Student表为例。

方案:获取年龄不在12或者13岁的学生所占的百分比

询问

SELECT StudentPercent FROM Student WHERE StudentAge NOT IN ('12', '13');

输出:

StudentPercent
85
78

2.1)选择查询作为SQL NOT IN的一部分

语法:

SELECT Column(s) FROM table_name WHERE column NOT IN (SELECT Statement);

使用上述语法,我们可以使用SELECT语句作为IN运算符的一部分来提供值。
通过一些示例,我们将更详细地理解上述语法。
我们以先前定义的"产品和供应商"表为例。

场景:获取供应商不是ABC的产品的价格。

查询:

SELECT ProductPrice FROM Product WHERE ProductName NOT IN 
  (SELECT ProductName FROM Supplier WHERE SupplierName = "ABC");