SQL中的IN运算符

IN运算符允许您在WHERE子句中指定多个值,它是多个OR条件的简写。

示例:获取您自己的SQL Server

返回所有来自'Germany'、'France'或'UK'的客户:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

语法:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

演示数据库:

以下是示例中使用的Customers表的部分选择:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

NOT IN

通过在IN运算符前使用NOT关键字,您可以返回列表中任何值都不是的所有记录。

示例:返回所有不来自'Germany'、'France'或'UK'的客户:

SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

IN(SELECT)

您还可以在WHERE子句中使用带有子查询的IN。使用子查询,您可以返回主查询结果中存在于子查询结果中的所有记录。

示例:返回所有在Orders表中有订单的客户:

SELECT * FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);

NOT IN(SELECT)

上面的示例返回了74条记录,这意味着有17个客户没有下过任何订单。让我们使用NOT IN运算符来验证是否正确。

示例:返回在Orders表中没有下过订单的所有客户:

SELECT * FROM Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);

通过练习测试自己:

练习: 使用IN运算符选择所有Country为"Norway"或"France"的记录。

SELECT * FROM YourTableName
WHERE Country IN ('Norway', 'France');

SQL BETWEEN运算符

BETWEEN运算符用于选择给定范围内的值,可以是数字、文本或日期。这是一个包容性的运算符,包括开始和结束值。

示例:获取您自己的SQL Server

选择所有价格在10和20之间的产品:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

语法:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

演示数据库:

以下是示例中使用的Products表的部分选择:

ProductID ProductName SupplierID CategoryID Unit Price
1 Chais 1 1 10 boxes x 20 bags 18
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
4 Chef Anton's Cajun Seasoning 2 2 48 - 6 oz jars 22
5 Chef Anton's Gumbo Mix 2 2 36 boxes 21.35

NOT BETWEEN

要显示在前面示例范围之外的产品,请使用NOT BETWEEN

示例:

SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

BETWEEN与IN结合使用

以下SQL语句选择所有价格在10和20之间的产品。此外,CategoryID必须是1、2或3:

示例:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1,2,3);

BETWEEN文本值

以下SQL语句选择所有ProductName在'Carnarvon Tigers'和'Mozzarella di Giovanni'之间的产品:

示例:

SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

以下SQL语句选择所有ProductName在'Carnarvon Tigers'和'Chef Anton's Cajun Seasoning'之间的产品:

示例:

SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Chef Anton''s Cajun Seasoning'
ORDER BY ProductName;

NOT BETWEEN文本值

以下SQL语句选择所有ProductName不在'Carnarvon Tigers'和'Mozzarella di Giovanni'之间的产品:

示例:

SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

BETWEEN日期

以下SQL语句选择所有OrderDate在'01-July-1996'和'31-July-1996'之间的订单:

示例:

SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;

或者:

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

示例表

以下是示例中使用的Orders表的部分选择:

OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 7/4/1996 3
10249 81 6 7/5/1996 1
10250 34 4 7/8/1996 2
10251 84 3 7/9/1996 1
10252 76 4 7/10/1996 2

SQL别名

SQL别名用于为表或表中的列提供临时名称,通常用于使列名更易读。别名仅在查询的持续时间内存在,使用AS关键字创建别名。

示例:获取您自己的SQL Server

SELECT CustomerID AS ID
FROM Customers;

AS是可选的

实际上,在大多数数据库语言中,您可以省略AS关键字并获得相同的结果:

SELECT CustomerID ID
FROM Customers;

语法

在列上使用别名时:

SELECT column_name AS alias_name
FROM table_name;

在表上使用别名时:

SELECT column_name(s)
FROM table_name AS alias_name;

演示数据库

以下是示例中使用的CustomersOrders表的部分选择:

Customers表

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

Orders表

OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 7/4/1996 3
10249 81 6 7/5/1996 1
10250 34 4 7/8/1996 2

列的别名

以下SQL语句为CustomerID列创建两个别名,一个是ID,另一个是CustomerName

SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

在使用空格字符的别名中使用别名

如果要使别名包含一个或多个空格,比如"My Great Products",请用方括号或双引号括起别名。

使用方括号括起带有空格字符的别名的示例:

SELECT ProductName AS [My Great Products]
FROM Products;

使用双引号括起带有空格字符的别名的示例:

SELECT ProductName AS "My Great Products"
FROM Products;

注意:某些数据库系统允许使用方括号和双引号,而有些只允许其中之一。

连接列

以下SQL语句创建一个名为"Address"的别名,该别名组合了四列(Address、PostalCode、City和Country):

SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

注意:要使MySQL中的上述SQL语句工作,请使用以下内容:

SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;

注意:要使Oracle中的上述SQL语句工作,请使用以下内容:

SELECT CustomerName, (Address || ', ' || PostalCode || ' ' || City || ', ' || Country) AS Address
FROM Customers;

表的别名

当您想要为表使用别名时,适用相同的规则。

Customers表称为Persons

SELECT * FROM Customers AS Persons;

在表的查询中使用两个表别名时,可能会显得没用,但是当您在查询中使用多个表时,可以使SQL语句更短。

以下SQL语句选择所有CustomerID为4(Around the Horn)的客户的订单。我们使用"Customers"和"Orders"表,并分别给它们命名为"c"和"o":

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;

以下SQL语句与上面相同,但没有别名:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;

当:

  • 查询涉及多个表
  • 查询中使用函数
  • 列名较大或不太易读
  • 两个或更多列合并在一起时

别名可能很有用。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

SQL 中的运算符与别名:使用示例和语法详解的更多相关文章

  1. SQL中常用的字符串LEFT函数和RIGHT函数详解!

    今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...

  2. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  3. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  4. MySQL之表、列别名及各种JOIN连接详解

    MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...

  5. PHP中IP地址与整型数字互相转换详解

    这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...

  6. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  7. Hive笔记--sql语法详解及JavaAPI

    Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...

  8. SQL Server 表的管理_关于事务操作的详解(案例代码)

    SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...

  9. Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码

    Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...

  10. ArcGIS中的北京54和西安80投影坐标系详解

    ArcGIS中的北京54和西安80投影坐标系详解 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理 ...

随机推荐

  1. ubuntu18.04更换下载源

    步骤一 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 步骤二 vim /etc/apt/sources.list 步骤三 # http ...

  2. 【Azure 事件中心】China Azure上是否有Kafka服务简答

    问题描述 China Azure 上是否有Kakfa服务可以使用呢? 问题回答 China Azure并没有专门的Kafka服务,但是可以使用Azure Event Hub. 创建标准版及以上的Eve ...

  3. 【Azure 事件中心】在Windows系统中使用 kafka-consumer-groups.bat 查看Event Hub中kafka的consumer groups信息

    问题描述 使用 Apache Flink 连接支持 Apache Kafka的Azure Event Hub后,由于消费端的Consumer Group是动态创建,在门户页面和Service Bus ...

  4. 使用JMeter的JSON提取器:通过递归下降查找,从接口响应中提取特定字段

    在接口测试中,我们经常需要从返回的JSON数据中提取特定字段以便后续使用.JMeter提供了JSON提取器,可以帮助我们实现这一目标.本文将介绍如何使用JMeter的JSON提取器通过递归下降查找的方 ...

  5. 有n步台阶,一次只能上1步或2步,共有多少种走法

    循环迭代:   1 public class steps { 2 public int js(int n) { 3 int one = 2; //初始化为第三级台阶最后跨一步的走法 4 int two ...

  6. 解决 Steam for Linux 部分 Valve 游戏中文显示问题/军团要塞2的字体显示问题

    解决 Steam for Linux 部分 Valve 游戏中文显示问题 发表于 Apr 7th 2019 | 分类于 Keep Digging Steam for Linux 上有许多好玩的免费游戏 ...

  7. 泰凌微2.4G无线私有协议芯片开发总结

    案例     近些年,团队一直围绕着无线这块来做产品方案.一个无意的举动,接触到了泰凌微的2.4G私有协议芯片,发现这颗芯片在好几个场景中使用非常合适.就把这个芯片推荐给了客户,经过几个案子的历练.积 ...

  8. DWR之入门实例(一)

    DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给 ...

  9. PAT 甲级1005【1005 Spell It Right】

    用JAVA可以用BigInteger解决. import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu ...

  10. 直播预约 | 邀您共同探讨“云XR技术如何改变元宇宙的虚拟体验”

    随着数字化时代的到来,元宇宙成为了人们关注的焦点.它是一个虚拟的世界,融合了现实与虚拟的元素,让人们可以以全新的方式进行交互.创作和体验. 云XR技术是元宇宙建设的重要支撑技术之一,元宇宙需要具备高度 ...