第3章SQL语言ppt课件.ppt
《第3章SQL语言ppt课件.ppt》由会员分享,可在线阅读,更多相关《第3章SQL语言ppt课件.ppt(84页珍藏版)》请在三一文库上搜索。
1、1,第3章 SQL语言,2,本章概要,SQL是结构化查询语言(Structured Query Language)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。 SQL 语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。,3,2.1 SQL语言的基本概念与特点,一、主要特点 SQL语言类似于英语的自然语言,简洁易用。 SQL语言是一种非过程语言,即用户只要提出“干什么”即可,不必管具体操作过程,也不必了解数据的存取路径,只要指明所需的数据即可。 SQL语言是一种面向集合的语言,每个命令的操作对象是一个或多个关系,结果也是一个关系。 SQL语言既是自含式语言,
2、又是嵌入式语言。可独立使用,也可嵌入到宿主语言中。 自含式语言可以独立使用交互命令,适用于终端用户、应用程序员和DBA; 嵌入式语言使其嵌入在高级语言中使用,供应用程序员开发应用程序。,4,二、基本概念 基本表(BASE TABLE):是独立存在的表,不是由其它的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。 视图(VIEW):是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。,5,图2.1 SQL语言
3、支持的关系数据库的三级逻辑结构,SQL语言支持数据库的三级模式结构,如图2.1所示。其中外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。,6,5. SQL语言具有: 数据查询(QUERY) 数据定义(DEFINITION) 数据操纵(MANIPULATION) 数据控制(CONTROL) 四种语言一体化的功能。,7,2.2 SQL数据定义,SQL语言使用数据定义语言(DATA DEFINITION LANGUAGE,简称DDL)实现其数据定义功能,可对数据库用户、基本表、视图、索引进行定义和撤消。,8,2.3 SQL数据查询,2.3.1 SELECT命令的格式与基本使用
4、数据查询是数据库中最常见的操作。 SQL语言提供SELECT语句,通过查询操作可得到所需的信息。 SELECT语句的一般格式为: SELECT列名,列名 FROM表名或视图名,表名或视图名 WHERE检索条件 GROUP BY HAVING ORDER BY ASC|DESC;,9,SELECT语句的格式: SELECT ALL|DISTINCTTOP N PERCENTWITH TIES 列名1 AS 别名1 , 列名2 AS 别名2 INTO 新表名 FROM 表名 1AS 表1别名 INNER|RIGHT|FULL|OUTEROUTERJOIN 表名2 AS 表2别名 ON 条件,10,
5、查询的结果是仍是一个表。 SELECT语句的执行过程是: 根据WHERE子句的检索条件,从FROM子句指定的基本表或视图中选取满足条件的元组,再按照SELECT子句中指定的列,投影得到结果表。 如果有GROUP子句,则将查询结果按照相同的值进行分组。 如果GROUP子句后有HAVING短语,则只输出满足HAVING条件的元组。 如果有ORDER子句,查询结果还要按照的值进行排序。,11,例1 查询全体学生的学号、姓名和年龄。 SELECT SNO, SN, AGE FROM S 例2 查询学生的全部信息。 SELECT * FROM S 用 * 表示S表的全部列名,而不必逐一列出。 例3 查询
6、选修了课程的学生号。 SELECT DISTINCT SNO FROM SC 查询结果中的重复行被去掉,12,另外,利用投影查询可控制列名的顺序,并可通过指定别名改变查询结果的列标题的名字。 例4 查询全体学生的姓名、学号和年龄。 SELECT SNAME NAME, SNO, AGE FROM S 其中,NAME为SNAME的别名,13,2.3.2 条件查询 当要在表中找出满足某些条件的行时,则需使用WHERE子句指定查询条件。 WHERE子句中,条件通常通过三部分来描述: 1 列名; 2 比较运算符; 3 列名、常数。,表3.8 常用的比较运算符,14,2.3.2.1 比较大小 例 5 查
7、询选修课程号为C1的学生的学号和成绩。 SELECT SNO,SCORE FROM SC WHERE CNO=C1 例 6 查询成绩高于85分的学生的学号、课程号和成绩。 SELECT SNO,CNO,SCORE FROM SC WHERE SCORE85,15,2.3.2.2 多重条件查询 当WHERE子句需要指定一个以上的查询条件时,则需要使用逻辑运算符AND、OR和NOT将其连结成复合的逻辑表达式。 其优先级由高到低为:NOT、AND、OR,用户可以使用括号改变优先级。 例 7 查询选修C1或C2且分数大于等于85分学生的的学号、课程号和成绩。 SELECT SNO,CNO,SCORE
8、FROM SC WHERE(CNO=C1 OR CNO=C2) AND SCORE=85,16,2.3.2.3 确定范围 例 8 查询工资在1000至1500之间的教师的教师号、姓名及职称。 SELECT TNO,TN,PROF FROM T WHERE SAL BETWEEN 1000 AND 1500 等价于 SELECT TNO,TN,PROF FROM T WHERE SAL=1000 AND SAL=1500,17,例 9 查询工资不在1000至1500之间的教师的教师号、姓名及职称。 SELECT TNO,TN,PROF FROM T WHERE SAL NOT BETWEEN 1
9、000 AND 1500 2.2.2.4 确定集合 利用“IN”操作可以查询属性值属于指定集合的元组。 例10 查询选修C1或C2的学生的学号、课程号和成绩。 SELECT SNO, CNO, SCORE FROM SC WHERE CNO IN(C1, C2) 此语句也可以使用逻辑运算符“OR”实现。,18,SELECT SNO, CNO, SCORE FROM SC WHERE CNO=C1 OR CNO= C2 利用“NOT IN”可以查询指定集合外的元组。 例11 查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩。 SELECT SNO, CNO, SCORE FROM SC
10、 WHERE CNO NOT IN(C1, C2) 等价于: SELECT SNO, CNO, SCORE FROM SC WHERE CNO!=C1 AND CNO!= C2,19,2.3.2.5 部分匹配查询 上例均属于完全匹配查询,当不知道完全精确的値时,用户还可以使用LIKE或NOT LIKE进行部分匹配查询(也称模糊查询)。 LIKE定义的一般格式为: LIKE 属性名必须为字符型,字符串常量的字符可以包含如下两个特殊符号: %:表示任意知长度的字符串; _:表示任意单个字符。 例12 查询所有姓张的教师的教师号和姓名。 SELECT TNO, TN FROM T WHERE TN
11、LIKE 张%,20,例13 查询姓名中第二个汉字是“力”的教师号和姓名。 SELECT TNO, TN FROM T WHERE TN LIKE _ _力% 注:一个汉字占两个字符。 2.3.2.6 空值查询 某个字段没有值称之为具有空值(NULL)。 通常没有为一个列输入值时,该列的值就是空值。 空值不同于零和空格,它不占任何存储空间。 例如,某些学生选课后没有参加考试,有选课记录,但没有考试成绩,考试成绩为空值,这与参加考试,成绩为零分的不同。,21,例14 查询没有考试成绩的学生的学号和相应的课程号。 SELECT SNO, CNO FROM SC WHERE SCORE IS NUL
12、L 注意:这里的空值条件为IS NULL,不能写成SCORE=NULL。,22,2.2.2 常用库函数及统计汇总查询 SQL提供了许多库函数,增强了基本检索能力。 常用的库函数,如表3.2所示,23,例15 求学号为S1学生的总分和平均分。 SELECT SUM(SCORE) AS TotalScore, AVG(SCORE) AS AveScore FROM SC WHERE (SNO = S1) 注意:函数SUM和AVG只能对数值型字段进行计算。,24,例16 求选修C1号课程的最高分、最低分及之间相差的分数 SELECT MAX(SCORE) AS MaxScore, MIN(SCORE
13、) AS MinScore, MAX(SCORE) - MIN(SCORE) AS Diff FROM SC WHERE (CNO = C1) 例17 求计算机系学生的总数 SELECT COUNT(SNO) FROM S WHERE DEPT=计算机,25,例18 求学校中共有多少个系 SELECT COUNT(DISTINCT DEPT) AS DeptNum FROM S 注意:加入关键字DISTINCT后表示消去重复行,可计算字段“DEPT“不同值的数目。 COUNT函数对空值不计算,但对零进行计算。 例19 统计有成绩同学的人数 SELECT COUNT (SCORE) FROM S
14、C 上例中成绩为零的同学计算在内,没有成绩(即为空值)的不计算。,26,例20 利用特殊函数COUNT(*)求计算机系学生的总数 SELECT COUNT(*) FROM S WHERE DEPT=计算机 COUNT(*)用来统计元组的个数 不消除重复行,不允许使用DISTINCT关键字。,27,2.3.3 分组查询 GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。 例22 查询各位教师的教师号及其任课的门数。 SELECT TNO,COUNT(*) AS C_NUM FROM TC GROUP BY TNO GROUP BY
15、子句按TNO的值分组,所有具有相同TNO的元组为一组,对每一组使用函数COUNT进行计算,统计出各位教师任课的门数。,28,若在分组后还要按照一定的条件进行筛选,则需使用HAVING子句。 例23 查询选修两门以上课程的学生学号和选课门数 SELECT SNO,COUNT(*) AS SC_NUM FROM SC GROUP BY SNO HAVING COUNT(*)=2 GROUP BY子句按SNO的值分组,所有具有相同SNO的元组为一组,对每一组使用函数COUNT进行计算,统计出每位学生选课的门数。 HAVING子句去掉不满足COUNT(*)=2的组。,29,当在一个SQL查询中同时使用
16、WHERE子句,GROUP BY 子句和HAVING子句时,其顺序是WHEREGROUP BY HAVING。 WHERE与HAVING子句的根本区别在于作用对象不同。 WHERE子句作用于基本表或视图,从中选择满足条件的元组; HAVING子句作用于组,选择满足条件的组,必须用于GROUP BY子句之后,但GROUP BY子句可没有HAVING子句。,30,2.3.5 查询的排序 当需要对查询结果排序时,应该使用ORDER BY子句 ORDER BY子句必须出现在其他子句之后 排序方式可以指定,DESC为降序,ASC为升序,缺省时为升序 例24 查询选修C1 的学生学号和成绩,并按成绩降序排
17、列。 SELECT SNO, SCORE FROM SC WHERE CNO=C1 ORDER BY SCORE DESC,31,例25 查询选修C2、C3、C4或C5课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。 SELECT SNO,CNO, SCORE FROM SC WHERE CNO IN (C2 ,C3, C4,C5) ORDER BY SNO,SCORE DESC 例26 求选课在三门以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。 SELECT SNO,SUM(SCORE) AS TotalScore FROM SC WHER
18、E SCORE=60 GROUP BY SNO HAVING COUNT(*)=3 ORDER BY SUM(SCORE) DESC,32,此语句为分组排序,执行过程如下: 1.(FROM)取出整个SC 2.(WHERE)筛选SCORE=60的元组 3.(GROUP BY)将选出的元组按SNO分组 4.(HAVING)筛选选课三门以上的分组 5.(SELECT)以剩下的组中提取学号和总成绩 6.(ORDER BY)将选取结果排序 ORDER BY SUM(SCORE) DESC 可以改写成 ORDER BY 2 DESC 2 代表查询结果的第二列。,33,2.3.6 数据表连接及连接查询 数据
19、表之间的联系是通过表的字段值来体现的,这种字段称为连接字段。 连接操作的目的就是通过加在连接字段的条件将多个表连接起来,以便从多个表中查询数据。 前面的查询都是针对一个表进行的,当查询同时涉及两个以上的表时,称为连接查询。 表的连接方法有两种: 方法1:表之间满足一定的条件的行进行连接,此时FROM子句中指明进行连接的表名,WHERE子句指明连接的列名及其连接条件。 方法2:利用关键字JOIN进行连接。,34,具体分为以下几种: INNER JOIN :显示符合条件的记录,此为默认值; LEFT (OUTER) JOIN:显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以N
20、ULL来显示,此称为左连接; RIGHT (OUTER) JOIN:显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行会以NULL来显示,此称为右连接; FULL (OUTER) JOIN:显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以NULL来显示; CROSS JOIN:会将一个表的每一笔数据和另一表的每笔数据匹配成新的数据行。 当将JOIN 关键词放于FROM子句中时,应有关键词ON与之相对应,以表明连接的条件。,35,2.3.6.1 等值连接与非等值连接 例27 查询刘伟老师所讲授的课程。 方法1: SELECT T.TNO ,TN
21、,CNO FROM T,TC WHERE (T.TNO = TC. TNO) AND (TN=刘伟) 这里,TN=刘伟为查询条件,而T.TNO = TC.TNO 为连接条件,TNO为连接字段。连接条件的一般格式为: . . 其中,比较运算符主要有:、!。 当比较运算符为“时,称为等值连接,其他情况为非等值连接。,36,引用列名TNO时要加上表名前缀,是因为两个表中的列名相同,必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。如果列名是唯一的,比如TN,就不必须加前缀。 上面的操作是将T表中的TNO 和TC表中的TNO相等的行连接,同时选取TN为“刘伟“的行,然后再在TN,CNO列上投影,
22、这是连接、选取和投影的操作组合。 方法2: SELECT T.TNO,TN,CNO FROM T INNER JOIN TC ON T.TNO=TC.TNO AND T.TN=刘伟,37,方法3: SELECT R2.TNO,R2.TN, R1.CNO FROM (SELECT TNO,CNO FROM TC ) AS R1 INNER JOIN (SELECT TNO ,TN FROM T WHERE TN=刘伟) AS R2 ON R1.TNO=R2.TNO,38,例28 查询所有选课学生的学号、姓名、选课名称及成绩。 SELECT S.SNO,SN,CN,SCORE FROM S,C,S
23、C WHERE S.SNO=SC.SNO AND SC.CNO=C.CNO 本例涉及三个表,WHERE子句中有两个连接条件。当有两个以上的表进行连接时,称为多表连接。,39,2.3.6.2 自身连接 当一个表与其自已进行连接操作时,称为表的自身连接。 例29 查询所有比刘伟工资高的教师姓名、性别、工资和刘伟的工资。 要查询的内容均在同一表T中,可以将表T分别取两个别名,一个是X,一个是Y。将X, Y 中满足比刘伟工资高的行连接起来。这实际上是同一表T的自身连接。 方法1: SELECT X.TN,X.SAL AS SAL_a,Y.SAL AS SAL_b FROM T AS X ,T AS Y
24、 WHERE X.SALY.SAL AND Y.TN=刘伟,40,方法2: SELECT X.TN, X.SAL,Y.SAL FROM T AS X INNER JOIN T AS Y ON X.SALY.SAL AND Y.TN=刘伟 方法3: SELECT R1.TN,R1.SAL, R2.SAL FROM (SELECT TN,SAL FROM T ) AS R1 INNER JOIN (SELECT SAL FROM T WHERE TN=刘伟) AS R2 ON R1.SALR2.SAL,41,例30 检索所有学生姓名,年龄和选课名称。 方法1: SELECT SN,AGE,CN F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语言 ppt 课件
链接地址:https://www.31doc.com/p-2596697.html