一、相关知识点
嵌套查询(Nested Query)是数据库查询中常用的一种查询技术。它允许在查询的条件或结果中包含另一个查询。
在关系型数据库中,嵌套查询是通过在一个查询中引用另一个查询的方式来实现的。嵌套查询可以用于在查询结果中过滤数据、计算聚合值、进行多表查询等。
二、软件版本
Microsoft SQL Server Management Studio(v18.7.1)
三、实验所用数据库
实验所基于的销售管理数据库中涉及以下表:
四、实验内容
1、查询和“章宏”同一部门的员工号,员工姓名。(分别用IN和EXIST实现)
2、查询年龄最小的员工姓名、性别和工资。
3、查询比平均工资高的员工姓名和工资。
4、查询订购牛奶的客户名称和联系地址。
5、查询尚未被下订单的商品编号、商品名称。(分别用NOT IN和NOT EXIST实现)
6、查询每个客户订购各商品的总数量,输出客户编号,客户名称,商品编号、商品名称,总数量。
7、统计每种商品订购总金额,输出总金额超过2000的商品编号,商品名称。
8、用连接查询实现(4)-(7)
五、实验过程及数据记录
1、查询和“章宏”同一部门的员工号,员工姓名。(分别用IN和EXIST实现)
(1)IN实现:
(2)EXISTS实现:
2、查询年龄最小的员工姓名、性别和工资。
3、查询比平均工资高的员工姓名和工资。
4、查询订购牛奶的客户名称和联系地址。
5、查询尚未被下订单的商品编号、商品名称。(分别用NOT IN和NOT EXIST实现)
(1)NOT IN实现:
(2)NOT EXISTS实现:
(3)连接查询实现:
6、查询每个客户订购各商品的总数量,输出客户编号,客户名称,商品编号、商品名称,总数量。
7、统计每种商品订购总金额,输出总金额超过2000的商品编号,商品名称。
六、实验小结
1、在实验中,如果需要用到group by 短语,select短语和having短语中用到的属性需要全部列入group by 短语中,但在逻辑上并不需要用到这些分组条件。
2、本实验的难点在于理解相关子查询。我的理解思路是:将外层表的相关属性,一个一个地代入到子查询的筛选条件中,从而先完成子查询,再利用子查询的结果完成父查询。
3、exists短语返回一个布尔值,当存在查询结果时,返回1,否则返回0。
4、子查询中不带表名的属性名默认为子查询表中的属性。
5、子查询可以直接使用仅包含在父查询表中的属性名而不需要声明父查询表。
6、当子查询表与父查询表含有相同属性名,在使用父查询表中的这个属性名时,必须声明它属于父查询表,否则默认认为它属于子查询表。
7、在父查询表与子查询表为同一个表时,可以通过别名加以区分。