第3章 关系数据库标准语言SQL_4

上传人:野鹰 文档编号:2654956 上传时间:2017-07-26 格式:PPT 页数:31 大小:713KB
返回 下载 相关 举报
第3章 关系数据库标准语言SQL_4_第1页
第1页 / 共31页
第3章 关系数据库标准语言SQL_4_第2页
第2页 / 共31页
第3章 关系数据库标准语言SQL_4_第3页
第3页 / 共31页
第3章 关系数据库标准语言SQL_4_第4页
第4页 / 共31页
第3章 关系数据库标准语言SQL_4_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第3章 关系数据库标准语言SQL_4》由会员分享,可在线阅读,更多相关《第3章 关系数据库标准语言SQL_4(31页珍藏版)》请在金锄头文库上搜索。

1、SQL语言基础,DML语言,Select多表查询,SELECT employee.fname, employee.lname, jobs.job_desc, jobs.job_id, jobs.min_lvl, obs.max_lvlFROM employee,jobs,格式Select 表名称.字段名, from 表名称列表,,Select嵌套查询,SELECT employee.fname, employee.lname, jobs.job_desc, jobs.job_id, jobs.min_lvl, obs.max_lvlFROM employee,jobsWhere jobs.jo

2、b_id=(select top 1 from jobs where min_lvl=10),4,数据表连接及连接查询,连接查询:一个查询需要对多个表进行操作表的连接方法 : 表之间满足一定条件的行进行连接时,FROM子句指明进行连接的表名,WHERE子句指明连接的列名及其连接条件 利用关键字JOIN进行连接:当将JOIN 关键词放于FROM子句中时,应有关键词ON与之对应,以表明连接的条件,5,JION的分类,6,等值连接与非等值连接 例3-48 查询“刘伟”老师所讲授的课程,要求列出教师号、教师姓名和课程号。方法1:SELECT T.TNo,TN,CNoFROM T,TCWHERE (T.

3、TNo = TC. TNo) AND (TN=刘伟) 方法2:SELECT T.TNo, TN, CNoFROM T INNER JOIN TCON T.TNo = TC.TNoWHERE (TN = 刘伟),连接条件 ,当比较运算符为“”时,称为等值连接。其他情况为非等值连接。,引用列名TNo时要加上表名前缀,这是因为两个表中的列名相同,必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。,7,例3-49 查询所有选课学生的学号、姓名、选课名称及成绩。SELECT S.SNo,SN,CN,ScoreFROM S,C,SCWHERE S.SNo=SC.SNo AND SC.CNo=C.CN

4、o 例3-50 查询每门课程的课程名、任课教师姓名及其职务、选课人数。SELECT CN,TN,Prof,COUNT(SC.SNo)FROM C,T,TC,SCWHERE T.TNo=TC.TNo AND C.CNo=TC.CNo AND SC.CNo=C.CNoGROUP BY SC.CNo,8,自身连接 例3-51 查询所有比“刘伟”工资高的教师姓名、工资和刘伟的工资。,方法1:SELECT X.TN,X.Sal AS Sal_a,Y.Sal AS Sal_bFROM T AS X ,T AS Y WHERE X.SalY.SalAND Y.TN=刘伟,方法2:SELECT X.TN, X

5、.Sal,Y.Sal FROM T AS X INNER JOIN T AS Y ON X.SalY.SalAND Y.TN=刘伟,方法3:SELECT R1.TN,R1.Sal, R2.SalFROM (SELECT TN,Sal FROM S ) AS R1INNER JOIN (SELECT Sal FROM TWHERE TN=刘伟) AS R2ON R1.SalR2.Sal,9,例3-52 检索所有学生姓名,年龄和选课名称。,方法1:SELECT SN,Age,CNFROM S,C,SCWHERE S.SNo=SC.SNo AND SC.CNo=C.CNo,方法2:SELECT R3

6、.SNo,R3.SN,R3.Age,R4.CNFROM(SELECT SNo,SN,Age FROM S) AS R3INNER JOIN(SELECT R2.SNo,R1.CNFROM(SELECT CNo,CN FROM C) AS R1INNER JOIN (SELECT SNo,CNo FROM SC) AS R2ON R1.CNo=R2.CNo) AS R4ON R3.SNo=R4.SNo,10,外连接 而在外部连接中,参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列。 符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。

7、例3-53 查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)。SELECT S.SNo,SN,CN,ScoreFROM SLEFT OUTER JOIN SCON S.SNo=SC.SNoLEFT OUTER JOIN CON C.CNo=SC.CNo,左外部连接右外部连接,11,子查询,在WHERE子句中包含一个形如SELECT-FROM-WHERE的查询块,此查询块称为子查询或嵌套查询。返回一个值的子查询 例3-54 查询与“刘伟”老师职称相同的教师号、姓名SELECT TNo,TNFROM TWHERE Prof= (SELECT Prof FROM T WH

8、ERE TN= 刘伟),使用比较运算符(=, , =, ANY (SELECT Sal FROM T WHERE Dept = 计算机)AND (Dept 计算机) SELECT TN, SalFROM TWHERE Sal (SELECT MIN(Sal) FROM T WHERE Dept = 计算机) AND Dept 计算机,14,使用ALL 例3-58 查询其他系中比计算机系所有教师工资都高的教师的姓名和工资。SELECT TN, SalFROM TWHERE (Sal ALL (SELECT Sal FROM T WHERE Dept = 计算机)AND (Dept 计算机) 例3

9、-59 查询不讲授课程号为C5的教师姓名。SELECT DISTINCT TNFROM TWHERE (C5 ALL (SELECT CNo FROM TC WHERE TNo = T.TNo),Sal (SELECT MAX(Sal),NOT IN,常用函数,SumMax/minCountLenGetdate,使用函数,Select sum(royalty) as Royfrom titlesWhere type = businessSelect max(royalty) as ABC from titles where type like p%,Count,Select count(*)f

10、rom titlesWhere type = business,18,例3-37 求学号为S1学生的总分和平均分。SELECT SUM(Score) AS TotalScore, AVG(Score) AS AveScoreFROM SCWHERE (SNo = S1) 例3-38 求选修C1号课程的最高分、最低分及之间相差的分数。SELECT MAX(Score) AS MaxScore, MIN(Score) AS MinScore, MAX(Score) MIN(Score) AS DiffFROM SCWHERE (CNo = C1)例3-40 求学校中共有多少个系。SELECT CO

11、UNT(DISTINCT Dept) AS DeptNumFROM S,DISTINCT消去重复行,北京林业大学 软件教研室,19,例3-41 统计有成绩同学的人数。SELECT COUNT (Score) FROM SC成绩为零的同学他计算在内,没有成绩(即为空值)的不计算。例3-42 利用特殊函数COUNT(*)求计算机系学生的总数。SELECT COUNT(*) FROM SWHERE Dept=计算机,COUNT(*)用来统计元组的个数,不消除重复行,不允许使用DISTINCT关键字。,having,与where相似,作为分组的条件设置当在使用了group by之后不允许使用where

12、,只能使用having,having,Select au_id,au_lname,stateFrom authorsGroup by au_id,au_lname,stateHaving state=CA,查询结果处理,插入新表Select au_id,au_lname,stateInto seachedtableFrom authorsWhere satte=CA,Insert语句,Insert插入数据,格式insert into 表名 (字段名) values (对应的数值)Insert into table1 (field1,field2,field3,field4) values (1

13、23,abc,a88,中国),Insert插入数据,选择插入数据Insert into table1 (table1.field1, table1.field2, table1.field3, table1.field4) (Selset table2.field1, table2.field2, table2.field3, table2.field4 from Table2 where Table2.filed1=123 ),26,例3-65 在S表中添加一条学生记录(学号:S7、姓名:郑冬、性别:女、年龄:21、系别:计算机)。INSERT INTO S (SNo, SN, Age, Sex, Dept)VALUES (S7, 郑冬, 21, 女, 计算机),必须用逗号将各个数据分开,字符型数据要用单引号括起来。如果INTO子句中没有指定列名,则新添加的记录必须在每个属性列上均有值,且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。,Update更新数据,格式 update table1 set field1=abc where field2=123,28,例3-68 把刘伟老师转到信息系UPDATE T SET Dept= 信息WHERE SN= 刘伟,例3-69 将所有学生的年龄增加1岁UPDATE S SET Age=Age+1,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号