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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 数据库原理与应用(SQL Server)笔记 第四章 嵌套查询和其他查询子句

前言


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


一、嵌套查询


(一)子查询


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


子查询的格式:

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

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


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


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

1666918010213.jpg

sql语句:

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

测试结果:

1666918026213.jpg


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


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


1、ANY子查询


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


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

1666918044542.jpg

sql语句:

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

测试结果:

1666918065388.jpg

2、ALL子查询


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


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

1666918092555.jpg

sql语句:

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

测试结果:

1666918110708.jpg

(三)EXISTS子查询


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


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

1666918123904.jpg

sql语句:

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

测试结果:

1666918138829.jpg

例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='日用品' 
)

测试结果:

1666918156132.jpg


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


(一)UNION子句(并操作)


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


格式如下:

SELECT 语句
UNION
SELECT 语句
UNION
...

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

1666918216080.jpg

sql语句:

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

测试结果:

1666918231786.jpg


(二)INTERSECT子句(交操作)


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


格式如下:

SELECT 语句
INTERSECT
SELECT 语句

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

1666918280089.jpg

sql语句:

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

测试结果:

1666918298905.jpg

(三)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'

测试结果:

1666918354227.jpg

(四)INTO子句


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


(五)CTE子句


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


(六)TOP谓词


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


格式如下:

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


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
7天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
21天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
1月前
|
SQL 关系型数据库 数据库
SQL数据库:核心原理与应用实践
随着信息技术的飞速发展,数据库管理系统已成为各类组织和企业中不可或缺的核心组件。在众多数据库管理系统中,SQL(结构化查询语言)数据库以其强大的数据管理能力和灵活性,广泛应用于各类业务场景。本文将深入探讨SQL数据库的基本原理、核心特性以及实际应用。一、SQL数据库概述SQL数据库是一种关系型数据库
49 5
|
1月前
|
SQL 监控 安全
SQL注入公鸡分类及原理
SQL注入公鸡分类及原理
|
1月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
1月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
42 0
|
1月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
76 0
|
1月前
|
SQL
使用SQL进行内外连接和嵌套查询
使用SQL进行内外连接和嵌套查询
37 0
|
1月前
|
SQL 数据库
SQl查询之单表查询,连接与嵌套查询
SQl查询之单表查询,连接与嵌套查询
25 0