数据库原理与应用(SQL Server)笔记——第九章 嵌套查询和其他查询子句

目录

前言

一、嵌套查询

(一)子查询

(二)ANY或ALL谓词的子查询和比较运算的子查询

1、ANY子查询

2、ALL子查询

(三)EXISTS子查询

二、其他查询子句(集合查询)

(一)UNION子句(并操作)

(二)INTERSECT子句(交操作)

(三)EXCEPT子句(差操作)

(四)INTO子句

(五)CTE子句

(六)TOP谓词

总结


前言

本次内容,我们主要掌握数据库的嵌套查询和其他查询子句,将介绍几个查询子句,通过几个例子来掌握嵌套查询和其他查询子句的查询技巧。

一、嵌套查询

(一)子查询

当一个SELECT语句无法完成查询任务时,需要另一个或多个SELECT语句的查询结果作为查询条件的一部分,这种查询称为嵌套查询,也称为子查询,并且嵌套查询的处理过程是由内向外的。

子查询的格式:

SELECT <列名1>... (列名n)
FROM <表1>...(表n)
WHERE <列名> <操作符>
(
    SELECT子查询
)

简单点说,下层嵌套的SELECT子查询的查询结果作为上层SELECT子查询的查询条件进行查询。

IN子查询的用于进行一个给定值是否在子查询结果中的判断,即上面 WHERE <列名> <操作符> 中的操作符为IN,若在操作符IN前面加NOT,则返回的值相反。

例1、根据如下所给表,利用T-SQL语句查询与雪碧不在同一商品种类的所有商品信息。

sql语句:

USE Sales
SELECT *
FROM Product
WHERE CategoryID NOT IN
(SELECT CategoryID
FROM Product
WHERE ProductName='雪碧'
)

测试结果:

(二)ANY或ALL谓词的子查询和比较运算的子查询

比较运算的子查询指父查询与子查询之间用比较运算符进行关联,即“< > = <= >= != !< !>”等等比较运算符。

1、ANY子查询

子查询结果中任意一个值满足比较条件就返回,否则返回的值相反。这里的操作符为ANY。

例2、根据如下所给表,利用T-SQL语句查询所有商品中比可口可乐任意一个库存量小的商品信息。

sql语句:

USE Sales
SELECT *
FROM Product
WHERE Stocks<ALL
(SELECT Stocks
FROM Product
WHERE ProductName='可口可乐'
)

测试结果:

2、ALL子查询

子查询结果中任每个值都满足比较条件就返回,否则返回的值相反。这里的操作符为ALL。

例3、根据如下所给表,利用T-SQL语句查询出比可口可乐价格都贵的商品信息。

sql语句:

USE Sales
SELECT *
FROM Product
WHERE Price>ALL
(SELECT Price
FROM Product
WHERE ProductName='可口可乐'
)

测试结果:

(三)EXISTS子查询

EXISTS子查询判断子查询结果中是否有记录(是否为空表),若有则结果为真,否则为假,返回值相反。

例4、根据如下所给表,利用T-SQL语句查询所有商品中属于日用品类的商品信息。

sql语句:

USE Sales
SELECT *
FROM Product
WHERE EXISTS
(
SELECT *
FROM Category
WHERE Category.CategoryID=Product.CategoryID AND CategoryName='日用品'
)

测试结果:

例5、根据上表,利用T-SQL语句查询查询所有商品中调料和饮料类的商品ID和名称。

sql语句:

USE Sales
SELECT ProductID,ProductName
FROM Product
WHERE NOT EXISTS
(
SELECT *
FROM Category
WHERE Category.CategoryID=Product.CategoryID AND CategoryName='日用品' 
)

测试结果:

二、其他查询子句(集合查询)

(一)UNION子句(并操作)

UNION子句,也称为并操作。即可以将两个或者两个以上的查询结果合并成一个结果集,要注意每个语句中查询的列数和列的顺序必须相同,且数据类型必须兼容。

格式如下:

SELECT 语句
UNION
SELECT 语句
UNION
...

例6、根据如下所给表,利用T-SQL语句查询所有商品中商品种类为1及商品种类为2的商品名称。

sql语句:

USE Sales
SELECT ProductName
FROM Product
WHERE CategoryID=1
UNION
SELECT ProductName
FROM Product
WHERE CategoryID=2

测试结果:

(二)INTERSECT子句(交操作)

INTERSECT子句,也称为交操作,用于比较两个查询结果,即返回操作数INTERSECT两边的两个查询结果中的所有非重复值,要注意每个语句中查询的列数和列的顺序必须相同,且数据类型必须兼容。

格式如下:

SELECT 语句
INTERSECT
SELECT 语句

例7、根据如下所给表,利用T-SQL语句查询所有员工中既在2020-4-10发过工资又在2020-5-10发过工资的员工工号。

sql语句:

USE YGGZ
SELECT EmpNO
FROM Salay
WHERE PayDate='2020-4-10'
INTERSECT
SELECT EmpNO
FROM Salay
WHERE PayDate='2020-5-10'

测试结果:

(三)EXCEPT子句(差操作)

EXCEPT子句,也称为交操作,用于比较两个查询结果,即从左查询中返回右查询没有找到的所有非重复值,要注意每个语句中查询的列数和列的顺序必须相同,且数据类型必须兼容。

格式如下:

SELECT 语句
EXCEPT
SELECT 语句

例8、根据上题所给表,利用T-SQL语句查询所有员工中既在2020-4-10发过工资但在2020-5-10未发过工资的员工工号。

sql语句:

USE YGGZ
SELECT EmpNO
FROM Salay
WHERE PayDate='2020-4-10'
EXCEPT
SELECT EmpNO
FROM Salay
WHERE PayDate='2020-5-10'

测试结果:

(四)INTO子句

INTO子句用于将查询的结果插入到创建的新表中。

(五)CTE子句

CTE子句用于指定临时结果集。

(六)TOP谓词

若只需要得到查询结果的前几项数据,就要用到TOP谓词进行对查询结果集的限定,即使用TOP n [PERCENT],即列出查询结果的前n项或列出查询结果的前%项。

格式如下:

TOP n [ 数字 ] [ 百分数% ]

总结

以上就是本次数据库原理与应用的全部内容,感谢您的阅读和支持,若有表述或者代码中的不当之处,欢迎指出!您的指出和建议能给作者带来很大的动力!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风(●•σ )

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值