- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主讲: 顾 曦
电话Email:guxi@
;主要内容; 1.1 投影运算
1.2 选择运算
1.3 排序运算
1.4 查询表
;1.1 投影运算;基本语法为;1.1.1 查询指定列;1.1.2 消除重复元组;1.1.3 查询所有列;1.1.4 给属性列取别名;1.1.5 查询经过计算的列;1.2 选择运算(WHERE子句);1.2.1 比较运算;该查询的执行过程可能有多种方法:
全表扫描法
依次取出Class表中的每个元组
判断该元组的grade属性值是否等于2007
若是则将该元组的班级编号、班级名称和所属学院属性取出,形成一个新元组
最后将所有新元组组织为一个结果关系输出
该方法适用于小表,或者该表未在grade属性列上建索引
索引搜索法
如果该表在grade属性列上建有索引,且满足条件的记录不多,则可使用索引搜索法来检索数据
具体使用何种方法由数据库管理系统的查询优化器来选择,详见第8章内容;在学生Student表中查询年龄大于或等于19岁的同学学号、姓名和出生日期。
SELECT studentNo, studentName, birthday
FROM Student
WHERE year(curdate()) - year(birthday)=19;.1.2.2 范围查询;[例3.9] ;1.2.3 集合查询;[例3.11] ;1.2.4 空值查询;[例3.13] ;1.2.5 字符匹配查询;匹配字符串可以是一个具体的字符串,也可以包括通配符%和_
%表示任意长度的字符串
ab%,表示所有以ab开头的任意长度的字符串;
zhang%ab,表示以zhang开头,以ab结束,中间可以是任意个字符的字符串。
符号_(下划线)表示任意一个字符
ab_,表示所有以 ab开头的3个字符的字符串,其中第3个字符为任意字符;
a__b表示所有以a开头,以b 结束的4个字符的字符串,且第2、3个字符为任意字符。
;[例3.14] ;[例3.15] ;[例3.16] ;[例3.17] ;转义;1.2.6 逻辑查询;[例3.20] ;注意:在逻辑运算中,不可以对同一个属性进行逻辑“与”的等值运算
例:
在选课Score表中查询同时选修了“001”和“002”课程的同学的选课信息,如下查询是错误的,得不到结果:
SELECT *
FROM Score
WHERE courseNo=001 AND courseNo=002
要实现该查询,需要使用连接运算或嵌套子查询
通过连接运算表示该查询,参见例3.29、例3.31
通过嵌套子查询,参见例3.39、例3.40
;[例3.21] 在Student表中查询籍贯不是“南昌”或“上海”的同学姓名、籍贯和所属班级编号。
SELECT studentName, native, classNo
FROM Student
WHERE native!=南昌 AND native!=上海;[例3.23] ;1.3 排序运算;[例3.24] ;[例3.25];1.4 查询表;在FROM子句后是一个子查询,表示对子查询的查询结果——查询表进行查询
必须为查询表取一个名称(称为元组变量),如使用AS a取名为a
FROM (SELECT * FROM Student WHERE sex=女) AS a
该查询等价于下面的查询:
SELECT studentNo, studentName, birthday
FROM student
WHERE year(birthday)=1991 AND sex=女
; 2.1 等值与非等值连接
2.2 自表连接
2.3 外连接
;;2.1 等值与非等值连接;比较运算符;2.1.1 等值连接[例3.27] ;SELECT studentNo, studentName, native,
Student.classNo, className
FROM Student, Class
WHERE Student.classNo=Class.classNo
AND institute=会计学院
在连接操作中,如果涉及到多个表的相同属性名,必须在相同的属性名前加上表名加以区分
如Student.classNo、Class.classNo
WHERE子句中
Student.classNo=Class.classNo为连接条件(from子句中涉及的关系)
institute=会计学院 为选择条件;别名;[例3.28] ;课程号既是课程表的主码,也是成绩表的外码,这2个表的连接条件是课程号
文档评论(0)