数据库系统原理(机械工业出版社)第六章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【例】求选修C1课程且成绩为90分以上的学生学号、 姓名及成绩。
SELECT 学生.学号,姓名,成绩
FROM 学生,选课
WHERE 学生.学号=选课.学号 AND 课程号=‘C1’ AND 成绩>90
2.用JOIN表示连接条件(T-SQL写法)
内连接:列出与连接条件匹配的数据行
左外部连接:在结果中保留连接表达式左表中的非匹配记录; 右外部连接:在结果中保留连接表达式右表中的非匹配记录。 全外连接:在结果中保留连接表达式两边表中的非匹配记录
学生课程库:学生(学号,姓名,年龄,所在系); 课程(课程号,课程名,先行课); 选课(学号,课程号,成绩).
简单查询:查询过程中只涉及到一个表的查询语 句。 【例】求数学系学生的学号和姓名。 SELECT 学号,姓名 FROM 学生 WHERE 所在系=‘数学系’ 【例】求选修了课程的学生学号。 SELECT DISTINCT 学号 FROM 选课
查询列为:
全部列
表或视图 的全部列
〈查询列〉::=*|〈表或视图〉.*|〈列名或表达
式〉 [AS]〈列别名〉 |〈列别名〉=〈表达式〉
返回结果中的百分 之〈数值〉行记录 代替出现在结果集 中的列名或表达式
(2) INTO子句和FROM子句
INTO子句将查询结果加到创建表中, 临时表的表名前加“#”字。
%’
【例】求缺少了成绩的学生的学号和课 程号。 SELECT 学号,课程号 FROM 选课 WHERE 成绩 IS NULL
[^] 与特定范围之外的任意单字符 匹配。 [] 与特定范围中的任意单字符匹 配。
查询实例
设图书借阅数据库中包括:
图书(书号,类别,出版社,作者,书名,定价); 读者(书证号,姓名,单位,性别,电话); 借阅(书号,读者书证号,借阅日期).

女 男
20
22 21
11
12 13 14
生产科
计划科 一车间 科研所
566
578 467
【例】用SQL表达职工和部门之间的内连接、左外部连 接和右外部连接的语句 内连接: SELECT 职工.*,部门名称,电话 FROM 职工 INNER JOIN 部门 ON 职工.所在部门= 部门.部门号 左外部连接: SELECT 职工.*,部门名称,电话 FROM 职工 LEFT OUTER JOIN 部门 ON 职工.所在 部门= 部门.部门号 右外部连接: SELECT 职工.*,部门名称,电话 FROM 职工 RIGHT OUTER JOIN 部门 ON 职工.所 在部门 =部门.部门号
FROM语法格式为: FROM〈数据源组〉
数据源的语法为: 〈数据源〉::=〈表名〉[[AS]〈表别名〉] |〈视图名〉[[AS]〈视 图别名〉] |〈嵌套的SELECT语句〉[[AS]〈别名〉] |〈连接表〉 连接表的语法为:
笛卡儿积运算
〈连接表〉::= <数据源> <连接类型> <数据源> ON <连接条件>
(4) 组合查询操作符和其他SQL操作符
1) UNION:并查询,并在结果集中去掉重复行。格式
为: 〈查询1〉 UNION 〈查询2〉
2) *:取全部字段。格式为: * 或〈表名〉.*
3) ALL:全部。保留重复值(有统计函数时要求计算
重复值)。格式为: ALL〈字段〉或 ALL〈字段
组〉
6.4 . 2 简单查询操作
张三 张三 李四
20 20 21
计算机系 计算机系 数学系
98001 98001 98005
数据库 数据结构 微积分
62 73 80
自然连接
学生.学号 姓名 年龄 所在系 课名 成绩
98001 98001 98005
张三 张三 李四
20 20 21
计算机系 计算机系 数学系
数据库 数据结构 微积分
62 73 80
所在部门
姓名 李勇 刘晨 王敏 张立
性别 男 女 女 男
部门号
部门名称
电话 566 578 467
1010 1011 1012 1014
11
11 12 13 14
生产科 计划科 一车间 科研所
右外部连接的结果集
职工号 姓名 性别 年龄 所在部门 部门名称 电话
1010
1012 1014
李勇
王敏 张立
[FROM〈数据源〉]
[WHERE〈元组条件表达式〉]
[GROUP BY <分组项>][HAVING <组选择条件>]
[ORDER BY <排序条件>] [COMPUTE〈统计列组〉][BY〈表达式〉]
(1) SELECT子句
所有行 结果中仅 有唯一行
结果中的前 〈数值〉行
SELECT [ALL|DISTINCT] [TOP <数值 >[PERCENT]] <查询列组>
交叉连接
学生.学号
98001 98001 98001 98005 98005 98005
姓名Biblioteka Baidu
张三 张三 张三 李四 李四 李四
年龄
20 20 20 21 21 21
所在系
计算机系 计算机系 计算机系 数学系 数学系 数学系
选课.学号
98001 98001 98005 98001 98001 98005
语义 在[不在]其中 任何一个 全部(每个) [不]存在 在[不在]范围 操作符 [NOT] IN ANY ALL EXISTS BETWEEN…AND… 使用格式或示例 〈字段〉 IN (〈数据表|子查询〉) 〈字段〉〈比较符〉ANY (数据表|子查询) 〈字段〉〈比较符〉ALL (数据表|子查询) EXISTS (〈子查询〉) 〈字段〉 BETWEEN 小值 AND 大值
学生.学号
姓名
年龄
所在系
选课.学号
课名
成绩
98001 98001 98005
张三 张三 李四
20 20 21
计算机系 计算机系 数学系
98001 98001 98005
数据库 数据结构 微积分
62 73 80
等值连接(学生.学号=选课.学号)
学生.学号 姓名 年龄 所在系 选课.学号 课名 成绩
98001 98001 98005
6.4 . 3 连接查询 操作 学生
学号 98001 98005 姓名 张三 李四 年龄 20 21
例设学生和选课表的数据如下,它们的交叉连接、 等值连接和自然连接的结果如下。
选课 所在系 计算机系 数学系 学号 98001 98001 98005 课程名 数据库 数据结构 微积分 成绩 62 73 80
1. 连接条件通过WHERE子句表达:连接条件和元组选择条件 之间用AND操作符衔接。(标准写法)
(1) 等值连接和非等值连接
[<表名1>.]<列名1> <比较运算符>[<表名2>.]<列名2>
比较运算符:=、>、<、>=、<= 和!=;列名称为连接字段。
【例】查询每个学生的情况以及他(她)所选修的课程。 SELECT 学生.*,选课.* FROM 学生,选课 WHERE 学生.学号=选课.学号
课名
数据库 数据结构 微积分 数据库 数据结构 微积分
成绩
62 73 80 62 73 80
学生
学号 98001 98005 姓名 张三 李四 年龄 20 21 所在系 计算机系 数学系 学号 98001 98001 98005
选课
课程名 数据库 数据结构 微积分 成绩 62 73 80
等值连接(学生.学号=选课.学号)
20
22 21
11
12 13
生产科
计划科 一车间
566
578 467
左外部连接的结果集
职工表
职工号
部门表
年龄 20 19 22 21 12 13
所在部门
姓名 李勇 刘晨 王敏 张立
性别 男 女 女 男
部门号
部门名称
电话 566 578 467
1010 1011 1012 1014
11
11 12 13 14
职工表
职工 号 1010 1011 1012 1014 姓名 性别 年龄 所在部 门 11
部门表
部门 号 11 12 12 13 13 14 部门名 称 生产科 计划科 一车间 科研所 电话
李勇
刘晨 王敏 张立

女 女 男
20
19 22 21
566
578 467
内连接的结果集
职工表
职工号
部门表
年龄 20 19 22 21 12 13
【例】将计算机类的书存入永久的计算机图书表,将借书 日期在99年以前的借阅记录存入临时的超期借阅表。 SELECT * INTO 计算机图书 FROM 图书 WHERE 类别=’计算机’ GO SELECT * INTO #超期借阅 FROM 借阅 WHERE 借阅日期<’1999-01-01’ GO
6.4 数据查询操作
6.4 .1 T-SQL 数据查询语句 6.4 . 2 简单查询操作
6.4 . 3 连接查询操作
6.4 . 4 嵌套查询操作
6.4 . 5 使用函数和分组查询操作
6.4 . 6 使用计算和汇总查询操作
6.4 . 1 T-SQL 数据查询语句
1. 数据检索语句的语句格式 SELECT〈查询列〉 [INTO〈新表名〉]
所在部门
姓名 李勇 刘晨 王敏 张立
性别 男 女 女 男
部门号
部门名称
电话 566 578 467
1010 1011 1012 1014
11
11 12 13 14
生产科 计划科 一车间 科研所
内连接的结果集
职工号 姓名 性别 年龄 所在部门 部门名称 电话
1010
1012 1014
李勇
王敏 张立

女 男
| <数据源> CROSSJOIN <数据源> | <连接表> <连接类型>::= [INNER| {{LEFT|RIGHT|FULL}[OUTER]}]
内连接
JOIN
左外连接 右外连接 全外连接
(3) WHERE子句: WHERE<查询条件>|<旧格式连接条件>
(4) GROUP BY子句:GROUP BY [ALL]〈分组表达式组〉 (5) HAVING子句: HAVING〈分组或汇总筛选条件〉 (6) ORDER BY:ORDER BY〈排序项〉[ASC|DESC][,…n] (7) COMPUTE子句:在结果集中后将汇总值放入摘要列, COMPUTE与BY配合,起到换行控制和分段小计的作用。 COMPUTE〈统计函数组〉[BY〈分组项〉] 其中:BY〈分组项〉表示在结果集中产生换行控制及分段小 计。COMPUTE BY必须和ORDER BY配合使用。
WHERE 课程号 = 'C1' AND 成绩 BETWEEN 80 AND 90
例子
【例】求数学系或计算机系姓张的学生 的信息。 SELECT *
通配 符 _ 说明
FROM 学生
WHERE 所在系 IN ( ‘数学系’, ‘计算机系’ ) AND 姓名 LIKE ‘张
表示任意单个字符
%
表示任意长度的字符串
学生课程库:学生(学号,姓名,年龄,所在系);
例子
课程(课程号,课程名,先行课); 选课(学号,课程号,成绩).
【例】求学生的学号、姓名、选修的课程名及成绩。
SELECT 学生.学号,姓名,课程名,成绩
FROM 学生,课程,选课
WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号
是[不是]空值
模式比较 与运算 或运算 非运算
IS [NOT] NULL
[NOT] LIKE AND OR NOT
〈字段〉 IS [NOT] NULL
〈字段〉 LIKE 〈字符常数〉 其中, “_” 单字符通配符和 “%” 多字符通配符 〈条件1〉AND〈条件2〉 〈条件1〉OR〈条件2〉 NOT〈条件〉
2. SELECT语句的操作符
(1) 算术操作符 +(加号)、-(减号)、*(乘号)和 /(除号)。 (2) 比较操作符 =(等于)、>(大于)、<(小于)、<=(小于等于)、 >=(大于等于)、!=(不等于)、<>(小于大于)、!>
(不大于)和 !<(不小于),共9种操作符。
(3) 逻辑操作符
学生课程库:学生(学号,姓名,年龄,所在系);
例子
课程(课程号,课程名,先行课); 选课(学号,课程号,成绩).
【例】求选修C1课程的学生学号和成绩,并要求对查询结果按 成绩的降序排列,如果成绩相同则按学号的升序排列。 SELECT 学号,成绩 FROM 选课 WHERE 课程号='C1' ORDER BY 成绩 DESC,学号 ASC 【例】求选修课程C1且成绩在80~90之间的学生学号和成绩, 并将成绩乘以系数0.8输出。 SELECT 学号,成绩*0.8 FROM 选课
生产科 计划科 一车间 科研所
左外部连接的结果集
职工号 姓名 性别 年龄 所在部门 部门名称 电话
1010
1011 1012 1014
李勇
刘晨 王敏 张立

女 女 男
20
19 22 21
11
生产科
566
12 13
计划科 一车间
578 467
右外部连接的结果集
职工表
职工号
部门表
年龄 20 19 22 21 12 13
相关文档
最新文档