皇甫大双
摘要:在数据库系统设计与实现的过程中,许多的模块都需要实现查询的功能,如果要从数据库中查询满足条件的数据,可以通过Select语句来实现。所以关注SQL Server数据库查询的研究以及实例应用就显得很有必要。
关键词:数据库;查询;数据分组;测试
中图分类号:TP393文献标识码:A
文章编号:1009-3044(2020)28-0046-02
开放科学(资源服务)标识码(OSID):
在数据库系统设计与实现的过程中,许多的模块都需要实现查询的功能,如果要从数据库中查询满足条件的数据,可以通过Select语句来实现。
查询(Query)通常又被称为检索,是数据库技术中最基本、最核心的操作之一。SQL Server数据库提供了强大的查询功能,主要包括有简单查询、条件查询、数据分组统计查询、连接查询以及子查询等。基于此,本论文主要以商品销售管理数据库系统为例,重点探讨较为复杂的子查询在实际问题中的研究以及应用。
1 子查询知识简介
1.1子查询的概念
子查询通常又被称为嵌套查询,是一个嵌套在Select、Insert、Update、Delete数据操纵语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。子查询也称为内部查询或内部选择,一般都需要用括号括起来,而包含子查询的语句称为外部查询或外部选择。
1.2常见的几种子查询
在T-SQL语句中使用in或not in的子查询、使用比较运算符的子查询、使用any、all比较运算符的子查询以及使用exists或not exists的子查询,这四种查询是较为常见和使用的子查询。
1.3 子查询的语法格式
Select <字段列表> from <表名>
Where <列表或列表表达式>(子查询)
2 商品销售管理数据库
在商品销售管理系统中创建一个名为Manage的数据库,该数据库包含客户信息表(Buyers)、商品信息表(Wares)和商品订购信息表(Sales)三个表格,具体的表结构如下所示。
3 子查询的实例应用
3.1 使用in或not in子查询进行集成员测试查询
使用子查询进行集成员测试时,通过逻辑运算符in或not in将一个表达式的值与子查询返回的零个或多个值进行比较。In或not in子查询用于对一个给定值是否存在于子查询结果集中的判断,其中,当表达式与子查询结果集中的某个值相等时,返回True,否则返回False,若使用了not,则返回的值刚好相反。举例如下:
使用子查询检索订购了货品编号为20200001的客户的所有信息,在查询分析器中输入以下的T-SQL代码即可实现:
Select * From Buyers
Where BuyerID in (Select BuyerID From Sales where WaresID=20200001)
3.2 使用子查询进行比较测试
在带有比较运算符的子查询中,子查询的结果是一个单值。父查询通过比较运算符将父查询中的一个表达式与子查询的结果(单值)进行比较,当表达式的值与子查询结果比较后,运算的结果为True,则父查询中的“表达式比较运算符(子查询)”条件表达式返回True,否、则返回False,常用的比较运算符有=、>、<、>=、<=、<>、!>、!<、!=等,举例如下:
使用子查询检索商品信息表Wares中价格高于平均价格商品的信息,在查询分析器中输入以下的T-SQL代码即可实现:
Select * From Wares
Where unitPrice > (select Avg(unitPrice) from Wares)
3.3 使用any、all运算符的批量比较测试子查询
子查询中返回单值时可以使用比较运算符,如若返回的是一个结果集多值的情况下,这时不仅要用到比较运算符,同时还需要用到any或all两个逻辑运算符。any、all与比较运算符的应用如下表所示:
使用any运算符的举例为:使用子查询检索某次订货金额低于500元的客户信息,在查询分析器中输入以下的T-SQL代码即可实现:
Select * from Buyers
Where 500 > any(Select amount From Sales where Buyers.BuyerID=Sales.BuyerID )
使用all運算符的举例为:使用子查询检索未曾被客户购买的商品编号以及商品名称,在查询分析器中输入以下的T-SQL代码即可实现:
Select WaresID,WaresName from Wares
Where WaresID<> all(Select distinct WaresID from Sales)
3.4 使用Exists子查询进行存在性测试
使用Exists关键字引入一个子查询时,相当于进行一次存在测试。外部查询的where字句测试子查询返回的行是否存在,如果在子查询的结果集中包含有,一条或多条记录,则存在性测试返回True,否则返回False,Not Exists将对存在性测试结果取相反。举例如下:
使用子查询检索所有没有订货的客户信息,在查询分析器中输入以下的T-SQL代码即可实现:
Select * from Buyers
Where not Exists (select * from Sales where Buyers.BuyerID=sales.BuyerID)
4 结束语
SQL Server数据库中数据的查询是一个非常重要同时也是使用频繁的功能,特别是涉及两个以上的多表查询的时候子查询的使用就显得尤为重要。有了子查询,我们可以将另一张表中需要的数据通过子查询的方式先查出来,然后再通过连接将结果和另一个表中的结果根据连接条件组合在一起,由于连接之前先做了一次查询,查询的结果只是符合要求的数据记录,而不是所有的,这样其实就减少了连接时表的数据记录,大大地提高了查询的速度。
参考文献:
[1] 周旺红.SQL Server 2012数据库T-SQL查询方法及实例解析[J].信息与电脑(理论版),2018(24):144-145.
[2] 张沛露,王建军.基于网络平台的数据库基础课程教学模式初探[J].科技传播,2010,2(24):232,227.
[3] 孙志梅.浅谈“数据库基础及应用”教学中的体会[J].民营科技,2009(10):89.
[4] 张伟平,许帅,李媛媛,等.翻转课堂对学习效果有效性的研究:教师角色视角——以教育技术学专业《数据库基础》实验课程为例[J].当代教育理论与实践,2017,9(1):73-75.
[5]韩丽.“SQL Server数据库基础”课程教学实践——面向高职高专计算机应用专业学生[J].科教文汇(下旬刊),2010(5):173-174.
【通联编辑:代影】