SQL IN运算符
- IN是SQL中的一个运算符,通常与WHERE子句一起使用。
- 使用IN运算符,可以指定多个值。
- 它允许我们轻松测试一个表达式是否与值列表中的任何值匹配。
- IN运算符用于替代多个OR条件。
SQL中IN运算符的语法:
SELECT ColumnName FROM TableName WHERE ColumnName IN (Value 1, Value 2,…., ValueN);
现在让我们通过示例深入了解SQL中的IN操作符。所有示例中的查询将使用MySQL数据库编写。
假设我们有一个包含以下数据的t_students表:
ID | Name | Hometown | Percentage | Favourite_Subject |
---|---|---|---|---|
1 | Soniya Jain | Udaipur | 89 | Physics |
2 | Harshada Sharma | Kanpur | 92 | Chemistry |
3 | Anuja Rajput | Jaipur | 78 | History |
4 | Pranali Singh | Nashik | 88 | Geography |
5 | Renuka Deshmukh | Panipat | 90 | Biology |
6 | Swati Kumari | Faridabad | 93 | English |
7 | Prachi Jaiswal | Gurugram | 96 | Hindi |
8 | Sheetal Sonar | Jaipur | 93 | Physics |
9 | Erica Goenka | Faridabad | 92 | Biology |
10 | Monali Chaudhari | Panipat | 90 | History |
示例1:
编写一个查询,显示t_students表中所有学生的记录,其中学生的家乡是以下地点之一:Faridabad,Panipat或Jaipur。
查询语句:
mysql> SELECT *FROM t_students WHERE Hometown IN ("Faridabad", "Panipat", "Jaipur");
在这里,我们编写了一个带有WHERE子句的SELECT查询,该子句基于Hometown列和IN运算符。所有被允许作为Hometown列的地点——Faridabad、Panipat或Jaipur——都作为参数传递给IN运算符。因此,只有t_students表中的那些家乡是传递给IN运算符的地点之一的学生将被考虑在输出中。
您将得到以下输出:
ID | Name | Hometown | Percentage | Favourite_Subject |
---|---|---|---|---|
3 | Anuja Rajput | Jaipur | 78 | History |
5 | Renuka Deshmukh | Panipat | 90 | Biology |
6 | Swati Kumari | Faridabad | 93 | English |
8 | Sheetal Sonar | Jaipur | 93 | Physics |
9 | Erica Goenka | Faridabad | 92 | Biology |
10 | Monali Chaudhari | Panipat | 90 | History |
在 t_students 表中有六名学生的家乡是以下地方之一:Faridabad,Panipat 或 Jaipur。
示例2:
编写查询以显示 t_students 表中所有学生的记录,其中学生的喜欢科目是以下科目之一:History,Biology,Physics 或 Chemistry。
查询:
mysql> SELECT *FROM t_students WHERE Favourite_Subject IN ("History", "Biology", "Physics", "Chemistry");
这里,我们使用了SELECT查询,并在Favourite_Subject列上添加了WHERE子句,接着是IN运算符。在IN运算符中,将允许的所有学科,即历史、生物、物理或化学作为参数传递。因此,输出中只会考虑那些t_students表中喜欢的学科是传递给IN运算符的学科之一的学生。
你将得到以下输出:
ID | Name | Hometown | Percentage | Favourite_Subject |
---|---|---|---|---|
1 | Soniya Jain | Udaipur | 89 | Physics |
2 | Harshada Sharma | Kanpur | 92 | Chemistry |
3 | Anuja Rajput | Jaipur | 78 | History |
5 | Renuka Deshmukh | Panipat | 90 | Biology |
8 | Sheetal Sonar | Jaipur | 93 | Physics |
9 | Erica Goenka | Faridabad | 92 | Biology |
10 | Monali Chaudhari | Panipat | 90 | History |
在t_students表中有七个学生,他们最喜欢的科目是以下科目之一: 历史、生物、物理或化学。
示例3:
编写一个查询,显示t_students表中所有学生的记录,其中学生获得的百分比是以下值之一: 78、88、89、90或92。
查询:
mysql> SELECT *FROM t_students WHERE Percentage IN (78, 88, 89, 90, 92);
这里,我们编写了一个带有WHERE子句的SELECT查询,后跟IN运算符的Percentage列。IN运算符的参数是所有在Percentage列中允许的值,即78、88、89、90或92。因此,只有那些在t_students表中取得了IN运算符传递的百分比值之一的学生将被考虑在输出中。
您将得到以下输出:
ID | Name | Hometown | Percentage | Favourite_Subject |
---|---|---|---|---|
1 | Soniya Jain | Udaipur | 89 | Physics |
2 | Harshada Sharma | Kanpur | 92 | Chemistry |
3 | Anuja Rajput | Jaipur | 78 | History |
4 | Pranali Singh | Nashik | 88 | Geography |
5 | Renuka Deshmukh | Panipat | 90 | Biology |
9 | Erica Goenka | Faridabad | 92 | Biology |
10 | Monali Chaudhari | Panipat | 90 | History |
t_students表中有七个学生,他们获得了以下百分比值之一:78、88、89、90或92。
考虑我们有另一个表employee,其中包含以下数据:
ID | Name | Date_of_Birth | Department | Salary | Job_Location |
---|---|---|---|---|---|
1 | Mansi Shah | 1999-01-10 | Marketing | 35000 | Surat |
2 | Tejal Wagh | 1993-07-05 | HR | 52000 | Pune |
3 | Sejal Kumari | 1995-06-08 | Production | 60000 | Nashik |
4 | Sonal Jain | 1996-12-10 | HR | 23000 | Surat |
5 | Surili Maheshwari | 1993-05-03 | Development | 75000 | Shimla |
6 | Shrusti Sharma | 1999-01-10 | Accounts | 53000 | Noida |
7 | Ankita Joshi | 1990-10-01 | RnD | 48000 | Delhi |
8 | Sharda Patel | 1989-12-12 | Marketing | 30000 | Delhi |
9 | Shivangi More | 1989-01-09 | Accounts | 67000 | Mumbai |
10 | Shweta Tiwari | 1981-10-09 | Purchasing | 60000 | Bangalore |
示例4:
编写一个查询以显示员工表中生日为以下日期之一的所有记录:1999-01-10,1989-01-09,1993-03-05或1993-05-03。
查询:
mysql> SELECT *FROM employee WHERE Date_of_Birth IN ("1999-01-10", "1989-01-09", "1993-03-05", "1993-05-03");
在这里,我们编写了一个带有WHERE子句的SELECT查询,后跟IN运算符的Date_of_Birth列。所有在Date_of_Birth列中允许的日期,即1999-01-10、1989-01-09、1993-03-05或1993-05-03,作为参数传递给IN运算符。因此,只有符合与IN运算符传递的日期相匹配的员工将被考虑在输出中。
您将获得以下输出:
ID | Name | Date_of_Birth | Department | Salary | Job_Location |
---|---|---|---|---|---|
1 | Mansi Shah | 1999-01-10 | Marketing | 35000 | Surat |
5 | Surili Maheshwari | 1993-05-03 | Development | 75000 | Shimla |
6 | Shrusti Sharma | 1999-01-10 | Accounts | 53000 | Noida |
9 | Shivangi More | 1989-01-09 | Accounts | 67000 | Mumbai |
示例5:
编写一个查询以显示employee表中员工的所有记录,其中员工所在的部门属于以下部门之一:采购、财务、市场营销、生产或研发。
查询语句:
mysql> SELECT *FROM employee WHERE Department IN ("Purchasing", "Accounts", "Marketing", "HR", "Production", "RnD");
在这里,我们编写了一个在Department列上带有WHERE子句和IN运算符的SELECT查询。将允许的所有部门,即Purchasing、Accounts、Marketing、Production或RnD,作为参数传递给IN运算符。因此,只有那些在传递给IN运算符的部门中工作的员工将被考虑在输出中。
您将获得以下输出结果:
ID | Name | Date_of_Birth | Department | Salary | Job_Location |
---|---|---|---|---|---|
1 | Mansi Shah | 1999-01-10 | Marketing | 35000 | Surat |
2 | Tejal Wagh | 1993-07-05 | HR | 52000 | Pune |
3 | Sejal Kumari | 1995-06-08 | Production | 60000 | Nashik |
4 | Sonal Jain | 1996-12-10 | HR | 23000 | Surat |
6 | Shrusti Sharma | 1999-01-10 | Accounts | 53000 | Noida |
7 | Ankita Joshi | 1990-10-01 | RnD | 48000 | Delhi |
8 | Sharda Patel | 1989-12-12 | Marketing | 30000 | Delhi |
9 | Shivangi More | 1989-01-09 | Accounts | 67000 | Mumbai |
10 | Shweta Tiwari | 1981-10-09 | Purchasing | 60000 | Bangalore |
雇员表中有九个员工在采购、帐务、营销、生产或研发部门工作。
示例6:
编写一个查询,显示员工表中工作地点在以下地方之一的所有记录:纳西克、苏拉特、诺伊达、德里或浦那。
查询:
mysql> SELECT *FROM employee WHERE Job_location IN ("Nashik", "Surat", "Noida", "Delhi", "Pune");
在这里,我们编写了一个带有WHERE子句的SELECT查询,该子句是基于Job_Location列的IN运算符。将Job_Location列中允许的所有地点,如Nashik,Surat,Noida,Delhi或Pune作为参数传递给IN运算符。因此,只有那些工作地点位于传递给IN运算符的地点中的员工将被考虑在输出中。
您将获得以下输出:
ID | Name | Date_of_Birth | Department | Salary | Job_Location |
---|---|---|---|---|---|
1 | Mansi Shah | 1999-01-10 | Marketing | 35000 | Surat |
2 | Tejal Wagh | 1993-07-05 | HR | 52000 | Pune |
3 | Sejal Kumari | 1995-06-08 | Production | 60000 | Nashik |
4 | Sonal Jain | 1996-12-10 | HR | 23000 | Surat |
6 | Shrusti Sharma | 1999-01-10 | Accounts | 53000 | Noida |
7 | Ankita Joshi | 1990-10-01 | RnD | 48000 | Delhi |
8 | Sharda Patel | 1989-12-12 | Marketing | 30000 | Delhi |
在员工表中有7个员工的工作地点是Nashik、Surat、Noida、Delhi或Pune。
示例7:
编写一个查询,显示员工表中薪水为以下值之一的所有记录: 60000、53000、30000或45000。
查询:
mysql> SELECT *FROM employee WHERE Salary IN (60000, 53000, 30000, 45000);
在这里,我们使用了一个SELECT查询,并在Salary列之后使用了WHERE子句和IN运算符。在IN运算符的参数中传递了Salary列中允许的所有值,即60000、53000、30000或45000。因此,只有那些薪水在传递给IN运算符的值之间的员工将被考虑在输出中。
你将得到以下输出:
ID | Name | Date_of_Birth | Department | Salary | Job_Location |
---|---|---|---|---|---|
3 | Sejal Kumari | 1995-06-08 | Production | 60000 | Nashik |
6 | Shrusti Sharma | 1999-01-10 | Accounts | 53000 | Noida |
8 | Sharda Patel | 1989-12-12 | Marketing | 30000 | Delhi |
10 | Shweta Tiwari | 1981-10-09 | Purchasing | 60000 | Bangalore |
在员工表中,有四个员工的薪水分别为60000、53000、30000和45000。