SQL 中的运算符与别名:使用示例和语法详解
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;
演示数据库
以下是示例中使用的Customers和Orders表的部分选择:
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 中的运算符与别名:使用示例和语法详解的更多相关文章
- SQL中常用的字符串LEFT函数和RIGHT函数详解!
今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- MySQL之表、列别名及各种JOIN连接详解
MySQL在SQL中,合理的别名可以让SQL更容易以及可读性更高.别名使用as来表示,可以分为表别名和列别名,别名应该是先定义后使用才对,所以首先要了解sql的执行顺序(1) from(2) on(3 ...
- PHP中IP地址与整型数字互相转换详解
这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- Hive笔记--sql语法详解及JavaAPI
Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...
- SQL Server 表的管理_关于事务操作的详解(案例代码)
SQL Server 表的管理_关于事务操作的详解(案例代码) 1.概念 事务(transaction): 是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能.即要么全 ...
- Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...
- ArcGIS中的北京54和西安80投影坐标系详解
ArcGIS中的北京54和西安80投影坐标系详解 1.首先理解地理坐标系(Geographic coordinate system),Geographic coordinate system直译为地理 ...
随机推荐
- tox运行报C901错误解决办法
# 报C901表示该函数太复杂! 解决办法 在函数上添加如下注释即可 # flake8: noqa: C901
- X86模拟龙芯与编译 .NET CoreCLR
目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...
- 用 NetworkX + Gephi + Nebula Graph 分析<权力的游戏>人物关系(下篇)
在上一篇[1]中,我们通过 NetworkX 和 Gephi 展示了<权力的游戏>中的人物关系.在本篇中,我们将展示如何通过 NetworkX 访问图数据库 Nebula Graph. N ...
- 机器学习可解释性--LIME
A Unified Approach to Interpreting Model Predictions trusting a prediction or trusting a model 如果⼀个机 ...
- rt_snprintf()是什么
在c++中snprintf()函数的解释 1,函数原型: int snprintf(char* dest_str,size_t size,const char* format,...); 2,功能 将 ...
- IDEA使用与多线程
IDEA缩写和快捷键 psvm全称public static void main sout 全称public static void main alt+enter 处理异常 s.out 自动打印s c ...
- 对象遍历 Object.keys(obj).forEach(name=> {})
Object.keys(props).forEach(name => { watch[name] = function (value) { this.columnConfig.update(na ...
- 新版idea配置maven注意点!!
1. maven配置 首先是按要求配置了maven,关闭所有项目->自定义->所有设置 配置完成之后发现新建项目下方还是显示从官方源下载maven包装器,而且在项目中出现这个配置文件 可以 ...
- 简单实用算法——二分查找法(BinarySearch)
目录 算法概述 适用情况 算法原理 算法实现(C#) 实际应用:用二分查找法找寻边界值 参考文章 算法概述 二分查找(英语:binary search),也叫折半查找(英语:half-interval ...
- BES2300方案设计开发阶段总结
前记 从事BES芯片的方案设计已经快三年了 ,这三年,伴随着和BES的一起共同成长,我们做了不少业内大的客户.从去年年初开始接触2300方案开发,到目前为止,已经做出了不少产品.这里就说一下心得体 ...