当前位置: 首页 > news >正文

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表的部分选择:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

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表的部分选择:

ProductIDProductNameSupplierIDCategoryIDUnitPrice
1Chais1110 boxes x 20 bags18
2Chang1124 - 12 oz bottles19
3Aniseed Syrup1212 - 550 ml bottles10
4Chef Anton’s Cajun Seasoning2248 - 6 oz jars22
5Chef Anton’s Gumbo Mix2236 boxes21.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表的部分选择:

OrderIDCustomerIDEmployeeIDOrderDateShipperID
102489057/4/19963
102498167/5/19961
102503447/8/19962
102518437/9/19961
102527647/10/19962

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表
CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
Orders表
OrderIDCustomerIDEmployeeIDOrderDateShipperID
102489057/4/19963
102498167/5/19961
102503447/8/19962

列的别名

以下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,或者扫描下方二维码,关注公众号,即可获取最新文章。

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

在这里插入图片描述

相关文章:

  • java/Android:将字符串按数量分割
  • 「torch.cosine_smilarity() = 0」引发的关于cpu与gpu精度问题的探讨
  • 自动驾驶术语汇总
  • mac rancher desktop 修改docker镜像源
  • Vue框架学习笔记——数据代理
  • 2023年【道路运输企业安全生产管理人员】最新解析及道路运输企业安全生产管理人员复审考试
  • 微服务学习(十二):安装Minio
  • spark shuffle 剖析
  • 芯片安全和无线电安全底层渗透技术
  • 算法设计与实现--分治篇
  • 什么是软件需求?以及需求的最佳实践?
  • 语音识别入门——常用软件及python运用
  • UML建模图文详解教程01——Enterprise Architect的安装与使用
  • 【STM32】GPIO输出
  • Jmeter性能综合实战——签到及批量签到
  • 【5+】跨webview多页面 触发事件(二)
  • 【技术性】Search知识
  • 4. 路由到控制器 - Laravel从零开始教程
  • CSS盒模型深入
  • es的写入过程
  • GraphQL学习过程应该是这样的
  • HomeBrew常规使用教程
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Leetcode 27 Remove Element
  • Otto开发初探——微服务依赖管理新利器
  • socket.io+express实现聊天室的思考(三)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 大主子表关联的性能优化方法
  • 对象管理器(defineProperty)学习笔记
  • 回流、重绘及其优化
  • 配置 PM2 实现代码自动发布
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 首页查询功能的一次实现过程
  • 思否第一天
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一个完整Java Web项目背后的密码
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (5)STL算法之复制
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (五)网络优化与超参数选择--九五小庞
  • (转)关于多人操作数据的处理策略
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(六):替换字符串中匹配的子串
  • .jks文件(JAVA KeyStore)
  • .Net CF下精确的计时器
  • .NET delegate 委托 、 Event 事件,接口回调