第5章关系数据库标准语言.ppt
《第5章关系数据库标准语言.ppt》由会员分享,可在线阅读,更多相关《第5章关系数据库标准语言.ppt(54页珍藏版)》请在三一文库上搜索。
1、第5章 关系数据库标准语言,5.1 SQL概述 5.2 SQL的数据查询功能 5.3 SQL的定义功能 5.4 SQL的数据操作功能,5.1 SQL概述,SQL是Structured Query Language的缩写,意思为“结构化查询语言” 。 SQL特点: 语言简洁、规范 非过程化 高度灵活化 平台无关性,SQL具有以下功能: 查询数据库中的数据 更新数据库中的数据 设置数据库用户访问的权限 修改数据库表的结构 增加、删除数据库中的表、视图,返回目录,5.2 SQL的数据查询功能,SELECT语句是数据查询语言组中唯一的语句,它包括单表查询、多表连接查询、嵌套查询和集合查询等。 5.2.
2、1 SELECT语法格式 SELECT ALL|DISTINCT TOP|PERCENT , AS FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC INTO ARRAY |INTO CURSOR |INTO DBF|TABLE |TO FILE ADDITIVE|TO PRINTERPROMPT,【说明】整个语句的含义是,根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中查找出满足条件的记录,再按SELECT子句中的目标表达式选出记录中的字段值形成结果表。GROUP限定结果分组,ORDER限定结果的排序。,SELECT子句对应关系代
3、数中的投影运算,其后面列出的属性名集合就是需要进行查询的数据集合; FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询; WHERE说明查询条件,即选择元组的条件; GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总; HAVING短语必须跟随GROUP BY使用,它用来限定分组必须满足的条件; ORDER BY短语用来对查询的结果进行排序。,5.2.2 简单查询,1. SELECT语句 SELECT语句从数据库中检索数据并将查询结果以表格的形式返回,其结果必是一个关系。 在简单查询中,可以从一个数据表中查询部分或者全部的字段。 【例5.1】查询“学生”表中
4、所有学生的姓名。 SELECT 姓名 FROM 学生 【例5.2】查询“课程”表中所有的信息。 SELECT * FROM 课程,查询结果也可以是通过某一字段或者几个字段计算得到的虚拟字段。 【例5.3】查询“入学成绩”表中,学生的学号、姓名,以及语文、外语、数学的平均成绩。 SELECT 学号,姓名,(语文+外语+数学)/3 FROM 入学成绩 使用“AS”重新为新字段命名的SELECT语句如下。 SELECT 学号,姓名,(语文+外语+数学)/3 AS 平均分 FROM 入学成绩,在查询中,可能产生完全相同的两个元组,用“DISTINCT”关键字可以去掉重复记录。 【例5.4】查询“学生”
5、表中,所有的专业名称。 SELECT DISTINCT(专业) FROM 学生,2.WHERE子句 带上WHERE子句的查询就是条件查询。查询的条件主要包括比较、范围设定、匹配测试、NULL值测试以及组合条件。 (1)比较条件 比较是SQL中最经常使用的查询条件,运算符有=、=、。 【例5.5】查询“学生”表中,计算机专业学生的姓名、学号以及入学成绩。 SELECT 姓名,学号,入学成绩 FROM 学生 WHERE 专业=”计算机”,(2)范围设定 测试表达式的值取自某个范围时,使用NOTBETWEEN.AND.来限定。 【例5.6】查询外语成绩在110分到130分之间的学生的姓名。 SELE
6、CT 姓名 FROM 入学成绩 WHERE 外语 BETWEEN 110 AND 130,(3)匹配测试 当查询需要进行字符串匹配时,使用“LIKE”。在匹配测试表达式中使用的通配符百分号(%)代表任意个任意字符,下划线(_)代表一个任意字符。 【例5.7】查询所有姓“王”的同学的信息。 SELECT * FROM 学生 WHERE 姓名 LIKE “王%”,(4)NULL值测试 NULL表示空,意思是还没有确定,与数值“0”不一样,0表示一个确切的数。 在判断NULL值时要使用“IS”语句 【例5.8】查询没有安排上课教师的课程。 SELECT * FROM 课程 WHERE 教师号 IS
7、NULL,(5)组合条件 搜索条件中还可使用AND、OR、NOT将简单的查询条件进行组合,进行复杂的搜索。 【例5.9】查询计算机专业的女生信息。 SELECT * FROM 学生 WHERE 性别=”女” AND 专业=”计算机”,5.2.3 嵌套查询,1.带有比较运算的子查询和使用量词的查询 当子查询的返回结果是个单列时,可以使用、=、!=等或使用带有量词ANY、SOME、ALL的比较运算符进行查询。 其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果为真。而ALL则要求子查询中的所有行都使结果为真时,结果才为真。 【例5.10】查询和刘云飞同一个专业的学
8、生的姓名、性别以及出生日期。 SELECT 姓名,性别,出生日期 FROM 学生 WHERE 专业=(SELECT 专业 FROM 学生 WHERE 姓名=”刘云飞”),【例5.11】查询课程成绩高于学号为“110102”的所有科成绩的学生学号(这里并不是每一门课程对应比较)。 SELECT 学号 FROM 选课 WHERE 成绩ALL (SELECT 成绩 FROM 选课 WHERE 学号=”110102”) 【例5.12】查询课程成绩至少高于学号为“110102”的一门课成绩的学生学号以及成绩。 SELECT 学号,成绩 FROM 选课 WHERE 成绩SOME (SELECT 成绩 FR
9、OM 选课; WHERE 学号=”110102”),2.使用谓词的查询 子查询中使用最多的是谓词IN,EXISTS和NOT IN,NOT EXISTS,含义为当查询的指定字段值包含(或不包含)在子查询结果字段值表中时条件为真。 IN用来测试集合中的成员,该集合是由SELECT子句产生的一组值的集合。 EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回。,【例5.13】查询计算机专业学生的学号、所选的课程号以及该门课的成绩。 SELECT 学号,课程号,成绩 FROM 选课 WHERE 学号 IN (SELECT 学号 FROM 学生; WHERE 专业=”计算机”) EXIS
10、TS可测试一个子查询的结果是否有元组,当作为子查询结果的集合为非空时则主查询返回结果,否则不返回。NOT EXISTS则与之相反。 【例5.14】查询没有选修任何一门课的学生信息。 SELECT * FROM 学生 WHERE NOT EXISTS (SELECT * FROM 选课; WHERE 学号=学生.学号),5.2.4 联接查询,有一些查询同时涉及到两个或两个以上的表时,这种查询称之为联接查询(也称为多表查询)。 1.简单联接查询 【例5.15】查询所有学生的姓名、学号以及入学时该学生的语文、数学、外语、综合的成绩。 SELECT 学生.姓名,学生.学号,语文,数学,外语,综合 FR
11、OM 学生,入学成绩; WHERE 学生.学号=入学成绩.学号 SQL允许在FROM子句中为关系名定义别名,格式为: . 例5.15的查询语句可以写做: SELECT S.姓名,S.学号,语文,数学,外语,综合 FROM 学生 S,入学成绩 R; WHERE S.学号=R.学号,联接条件,2.超联接查询 如果想要将不符合联接条件的记录也查询出来,就要利用超联接查询,超联接分为内联接(也称为等值联接)、左联接、右联接和全联接。其语法结构如下: 【格式】 SELECTFROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE,【说明】 INNER JOIN 或JOIN为内联接
12、,也称为等值联接,按照联接条件进行联接,不满足条件的记录不会出现在查询结果中,是常用的一种联接形式。 LEFT JOIN 为左联接,除满足连接条件的记录出现在查询结果中外,第一个表不满足条件的记录也会出现在查询结果中。 RIGHT JOIN 为右联接,除满足连接条件的记录出现在查询结果中外,第二个表不满足条件的记录也会出现在查询结果中。 FULL JOIN 为全联接,除满足连接条件的记录出现在查询结果中外,两个表中不满足条件的记录也会出现在查询结果中。 ON 指明联接条件,而不能在WHERE后面给出联接条件。,【例5.16】内联接查询。 SELECT 学生.学号, 学生.姓名,入学成绩,数学
13、FROM 学生 JOIN 入学成绩 ; ON 学生.学号=入学成绩.学号 注意:多个表用“JOIN”语句联接的顺序要与联接条件“ON”的顺序恰好相反。 等价于简单联接查询方式。 SELECT 学生.学号, 学生.姓名,入学成绩,数学 FROM 学生,入学成绩; WHERE 学生.学号=入学成绩.学号,【例5.17】左联接查询。 SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 LEFT JOIN 选课; ON 学生.学号=选课.学号)LEFT JOIN 课程 ON 选课.课程号=课程.课程号 因为是左联接查询,其中学生表中有四个学生记录没有选课,不符合联接条件,同样也被查询出来,
14、该学生没有选课,因此相应的课程名和成绩为空。,【例5.18】右联接查询。 SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 RIGHT JOIN 选课; ON 学生.学号=选课.学号)RIGHT JOIN 课程 ON 选课.课程号=课程.课程号 因为是右联接查询,其中课程表中有的课程记录没有被学生所选,不符合联接条件,同样也被查询出来,该课程没有被学生所选,因此相应的学号和姓名为空。,【例5.19】全联接查询。 SELECT 学生.学号,姓名,课程名,成绩 FROM (学生 FULL JOIN 选课; ON 学生.学号=选课.学号) FULL JOIN 课程 ON 选课.课程号=
15、课程.课程号 全联接查询的结果是左联接查询和右联接查询结果的并集。,5.2.5 排序(ORDER BY子句),使用ORDER BY子句对按照一个或多个字段对查询结果进行升序(ASC)或降序(DESC)排列,默认为升序排列。 ORDER BY语句只能对最终的查询结果进行排序,在子查询中不能使用。 ORDER BY语句后不能接任何运算表达式,不能按某个表达式的运算结果进行排序。 对于空值排序,升序时空值记录将最后显示,降序时将最先显示。 【例5.20】查询计算机专业的学生信息,结果按入学成绩降序排列。 SELECT * FROM 学生 WHERE 专业=”计算机” ORDER BY 入学成绩 DE
16、SC,使用TOP PERCENT语句可以只显示排序之后的前几条记录或前百分之多少条记录。 【例5.21】查询入学成绩前五名的学生信息。 SELECT * TOP 5 FROM 学生 ORDER BY 入学成绩 DESC 【例5.22】查询1001这门课成绩在前50%的学生的学号、成绩。查询结果如图5.21所示。 SELECT * TOP 50 PERCENT FROM 选课 WHERE 课程号=”1001” ORDER BY 成绩 DESC 注意: TOP语句要与ORDER BY语句同时使用才有效。,5.2.6 计算查询与分组查询(GROUP BY 子句),1.计算查询 有时用户的请求需要对查
17、询的内容进行计算才能得到结果。常用的计算函数如下: COUNT( ) 统计元组个数 COUNT(DISTINCT|ALL ) 统计一列中值的个数。 SUM(DISTINCT|ALL ) 计算某一列值的总和(此列必须是数值型)。 AVG(DISTINCT|ALL ) 计算某一列值的平均值(此列必须是数值型)。 MAX(DISTINCT|ALL ) 计算某一列值的最大值。 MIN(DISTINCT|ALL ) 计算某一列值的最小值。 注意:如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。,【例5.23】查询选修了课程的学生的人数。 SELECT COUNT(DISTINCT 学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言
链接地址:https://www.31doc.com/p-2577908.html