前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 中的运算符与别名:使用示例和语法详解

SQL 中的运算符与别名:使用示例和语法详解

原创
作者头像
小万哥
发布2023-11-25 21:43:24
3480
发布2023-11-25 21:43:24
举报
文章被收录于专栏:程序人生丶

SQL中的IN运算符

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

示例:获取您自己的SQL Server

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

代码语言:sql
复制
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

语法:

代码语言:sql
复制
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'的客户:
代码语言:sql
复制
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

IN(SELECT)

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

示例:返回所有在Orders表中有订单的客户:
代码语言:sql
复制
SELECT * FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);

NOT IN(SELECT)

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

示例:返回在Orders表中没有下过订单的所有客户:
代码语言:sql
复制
SELECT * FROM Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);

通过练习测试自己:

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

代码语言:sql
复制
SELECT * FROM YourTableName
WHERE Country IN ('Norway', 'France');

SQL BETWEEN运算符

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

示例:获取您自己的SQL Server

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

代码语言:sql
复制
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

语法:

代码语言:sql
复制
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

示例:
代码语言:sql
复制
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;

BETWEEN与IN结合使用

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

示例:
代码语言:sql
复制
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1,2,3);

BETWEEN文本值

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

示例:
代码语言:sql
复制
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;

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

示例:
代码语言:sql
复制
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'之间的产品:

示例:
代码语言:sql
复制
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'之间的订单:

示例:
代码语言:sql
复制
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;

或者:

代码语言:sql
复制
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

代码语言:sql
复制
SELECT CustomerID AS ID
FROM Customers;

AS是可选的

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

代码语言:sql
复制
SELECT CustomerID ID
FROM Customers;

语法

在列上使用别名时:

代码语言:sql
复制
SELECT column_name AS alias_name
FROM table_name;

在表上使用别名时:

代码语言:sql
复制
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

代码语言:sql
复制
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

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

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

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

代码语言:sql
复制
SELECT ProductName AS [My Great Products]
FROM Products;

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

代码语言:sql
复制
SELECT ProductName AS "My Great Products"
FROM Products;

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

连接列

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

代码语言:sql
复制
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

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

代码语言:sql
复制
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;

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

代码语言:sql
复制
SELECT CustomerName, (Address || ', ' || PostalCode || ' ' || City || ', ' || Country) AS Address
FROM Customers;

表的别名

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

Customers表称为Persons

代码语言:sql
复制
SELECT * FROM Customers AS Persons;

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

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

代码语言:sql
复制
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语句与上面相同,但没有别名:

代码语言:sql
复制
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;

当:

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

别名可能很有用。

最后

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL中的IN运算符
    • 示例:获取您自己的SQL Server
      • 语法:
        • 演示数据库:
          • NOT IN
            • 示例:返回所有不来自'Germany'、'France'或'UK'的客户:
          • IN(SELECT)
            • 示例:返回所有在Orders表中有订单的客户:
          • NOT IN(SELECT)
            • 示例:返回在Orders表中没有下过订单的所有客户:
          • 通过练习测试自己:
          • SQL BETWEEN运算符
            • 示例:获取您自己的SQL Server
              • 语法:
                • 演示数据库:
                  • NOT BETWEEN
                    • 示例:
                  • BETWEEN与IN结合使用
                    • 示例:
                  • BETWEEN文本值
                    • 示例:
                    • 示例:
                  • NOT BETWEEN文本值
                    • 示例:
                  • BETWEEN日期
                    • 示例:
                  • 示例表
                  • SQL别名
                    • 示例:获取您自己的SQL Server
                      • 语法
                        • 演示数据库
                          • Customers表
                          • Orders表
                        • 列的别名
                          • 在使用空格字符的别名中使用别名
                            • 连接列
                              • 表的别名
                              • 最后
                              相关产品与服务
                              云数据库 MySQL
                              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档