实验5 SQL分组、排序及多表连接语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL分组、排序及多表连接语句
一、实验目的
1.熟练掌握SQL分组语句;
2.熟练掌握SQL排序语句;
3.熟练掌握多表连接语句;
二、实验内容
给定一个练习数据库和相应的练习题,要求上机完成,并验证结果
实验基础知识提要
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECT select_list
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HA VING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
From子句中的连接类型
指定从其中检索行的表,当存在多个表时用“,”分隔。表之间可以使用连接,连接的类型如下:
INNER
指定返回所有相匹配的行对。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。
LEFT [OUTER]
指定除所有由内联接返回的行外,所有来自左表的不符合指定条件的行也包含在结果集内。来自左表的输出列设置为NULL。
RIGHT [OUTER]
指定除所有由内联接返回的行外,所有来自右表的不符合指定条件的行也包含在结果集内。来自右表的输出列设置为NULL。
FULL [OUTER]
如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为NULL。除此之外,结果集中还包含通常由内联接返回的所有行。
Group By子句
指定用来放置输出行的组,并且如果SELECT 子句
指定组或聚合的搜索条件。HA VING 通常与GROUP BY 子句一起使用。如果不使用GROUP BY 子句,HA VING 的行为与WHERE 子句一样。
Order By子句
指定结果集的排序。除非同时指定了TOP,否则ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
ASC
指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
DESC
指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
空值被视为最低的可能值。
三、实验步骤
构建以下的数据表作为实验数据内容
3.3 Products(产品)
运行SQL SERVER服务管理器,确认数据库服务器开始运行。
运行企业管理器,以图示方式点击“附加数据库”,恢复db目录下的数据库文件
打开查询分析器,选择刚才恢复的数据库exampleDB,输入SQL指令,获得运行结果。任务:完成以下SQL查询语句
⏹查询顾客表(Customer)中没有设定区域的顾客编号和公司名
⏹统计职工表(Employees)中头衔的数量
⏹查找订单表(Orders)中顾客编号为’VICTE’和’WELLI’的的订单号和运费,并按照运
费的降序排列
⏹查找产品表(Products)中的平均库存总价(库存总价=单价×库存数)
⏹查找提供产品的各个供应商编号及其供应的产品数量
⏹查找提供产品的各个供应商名称及其供应的产品数量
⏹在订单详细信息表(OrderDetails)中查找每个订单号对应的产品种类超过4种的订
单号和产品种类数,并按照产品种类数升序排列
⏹查询客户的公司名和它所下订单的订单编号
⏹找出所有的职员姓和名以及他的直接上级的姓和名
使用外部连接,查找所有的职员的基本信息以及其直接上级的姓、名
分析思考问题:
1. 分析Where筛选和Having筛选的区别;
Having 和where 都是用来筛选的,having是筛选组,where是记录
2.给出多表查询中的左外连接,右外连接和全连接示例SQL语句,并分析其使用场景;
左:select a.*,b.* from a left join b on a.id=b.parent_id
结果 1 a null null null 2 b 1 d 2 3 c 2 e 3
右:select a.*,b.* from a right join b on a.id=b.parent_id
2 b 1 d 2
3 c 2 e 3 null null 3 f 4
全:select a.*,b.* from a full join b on a.id=b.parent_id
1 a null null null
2 b 1 d 2
3 c 2 e 3 null null 3 f 4
3. 给出不少于5个聚合函数,并写出示例SQL语句,说明含义。其中至少有两个SQL
语句要包含Having子句
Avg: select avg(grade)
From student
Count: select type
From title
Group by type
Having count(type)>3
Max: select max(h)
From title