数据库系统原理教学课件044

上传人:痛*** 文档编号:149552706 上传时间:2022-09-07 格式:PPT 页数:128 大小:906.50KB
收藏 版权申诉 举报 下载
数据库系统原理教学课件044_第1页
第1页 / 共128页
数据库系统原理教学课件044_第2页
第2页 / 共128页
数据库系统原理教学课件044_第3页
第3页 / 共128页
资源描述:

《数据库系统原理教学课件044》由会员分享,可在线阅读,更多相关《数据库系统原理教学课件044(128页珍藏版)》请在装配图网上搜索。

1、1l4.1 SQL语言概述语言概述l4.2 数据定义功能与约束数据定义功能与约束l4.3 数据操纵功能数据操纵功能l4.4 数据查询功能与视图数据查询功能与视图2lSELECT FROM WHERE GROUP BY HAVING ORDER BY 3l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图4l数据源只涉及一张表的查询数据源只涉及一张表的查询l选择列选择列5lSELECT FROM 6

2、CREATE TABLE 演员演员(姓名姓名 char(20),工号工号 char(10),性别性别 char(2),PRIMARY KEY(工号工号)CREATE TABLE 电影电影(片名片名 char(60),导演导演 char(20),年代年代 datetime,PRIMARY KEY(片名,年代片名,年代)CREATE TABLE 出演出演(工号工号 char(10),片名片名 char(60),年代年代 datetime,片酬片酬 money,PRIMARY KEY(工号工号,片名片名,年代年代)7姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231

3、男男葛优葛优A751男男片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不散冯小刚冯小刚1998花样年华花样年华王家卫王家卫2000工号工号片名片名年代年代片酬片酬A120红河谷红河谷199850kA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演8l查询演员的姓名与性别查询演员的姓名与性别lSELECT 姓名,性别姓名,性别 FROM 演员演员l查询结果查询结果姓名姓名性别性别王菲王菲女女宁静宁静女女梁朝伟梁朝伟男男葛优葛优男男9l查询全体演员的记录查询全体演员的记录lSELECT*

4、FROM 演员演员l查询结果查询结果姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231男男葛优葛优A751男男10lgetdate()取当前的系统日期取当前的系统日期lyear(date)取日期时间型参数取日期时间型参数date的年份的年份lmonth(date)lday(date)l11l查询电影的片名以及拍摄距今时间查询电影的片名以及拍摄距今时间lSELECT 片名片名,拍摄距今拍摄距今,l year(getdate()-year(年代年代),年年 FROM 电影电影l查询结果查询结果片名片名重庆森林重庆森林拍摄距今拍摄距今11年年红河谷红河谷拍摄距今拍摄

5、距今7年年不见不散不见不散拍摄距今拍摄距今7年年12l计算列、函数列和常量列的显示结果都计算列、函数列和常量列的显示结果都没有列标题,通过指定列的别名可以改没有列标题,通过指定列的别名可以改变查询结果的列标题变查询结果的列标题l改变列标题的语法:改变列标题的语法:列名列名|表达式表达式 AS 列标题列标题 或:列标题或:列标题 列名列名|表达式表达式13l查询电影的片名以及拍摄距今时间查询电影的片名以及拍摄距今时间lSELECT 片名片名,year(getdate()-year(年代年代)l AS 拍摄距今年限拍摄距今年限 FROM 电影电影l查询结果查询结果片名片名拍摄距今年限拍摄距今年限重

6、庆森林重庆森林11红河谷红河谷7不见不散不见不散7花样年华花样年华514姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231男男葛优葛优A751男男片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不散冯小刚冯小刚1998花样年华花样年华王家卫王家卫2000工号工号片名片名年代年代片酬片酬A120红河谷红河谷199850kA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演15l查询数据库中的电影拍摄年代查询数据库中的电影拍摄年代lSELECT year(年

7、代年代)AS 拍摄年代拍摄年代 FROM 电影电影l查询结果查询结果拍摄年代拍摄年代19941998200016l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图17lSELECT FROM WHERE 18 WHERE子句常用查询条件子句常用查询条件 谓谓 词词 比较(比较运算符)比较(比较运算符)=,=,=,=,=,=,(或(或!=!=),),NOT+NOT+上述比较运算符上述比较运算符 确

8、定范围确定范围 BETWEEN AND,NOT BETWEEN AND BETWEEN AND,NOT BETWEEN AND 确定集合确定集合 IN,NOT IN IN,NOT IN 字符匹配字符匹配 LIKE,NOT LIKE LIKE,NOT LIKE 空值空值 IS NULL,IS NOT NULL IS NULL,IS NOT NULL 多重条件(逻辑谓词)多重条件(逻辑谓词)AND,OR AND,OR 19l查询女演员的姓名查询女演员的姓名lSELECT 姓名姓名 FROM 演员演员 WHERE 性别性别女女姓名姓名王菲王菲宁静宁静20l查询拍摄距今超过查询拍摄距今超过10年电影的

9、片名年电影的片名lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()-year(年代年代)10l查询结果查询结果片名片名重庆森林重庆森林21l用于查找指定列中符合匹配模式的元组用于查找指定列中符合匹配模式的元组l列名列名 NOT LIKE l匹配串中可包含如下四种匹配串中可包含如下四种通配符通配符 _ 匹配任意一个字符;匹配任意一个字符;%匹配匹配0个或多个字符;个或多个字符;匹配匹配 中的任意一个字符;中的任意一个字符;不匹配不匹配 中的任意一个字符中的任意一个字符22l查询查询“张张”“”“王王”“”“李李”姓演员的情况姓演员的情况lSELECT 姓名姓名

10、 FROM 演员演员 WHERE 姓名姓名 LIKE 张王李张王李%l查询结果查询结果姓名姓名王菲王菲23l查询姓名第查询姓名第2个字不是个字不是“菲菲”或者或者“优优”的的演员的情况演员的情况lSELECT 姓名姓名 FROM 演员演员 WHERE 姓名姓名 LIKE _菲优菲优%l查询结果查询结果姓名姓名宁静宁静梁朝伟梁朝伟24l查询姓名由查询姓名由2个字组成的演员的情况个字组成的演员的情况lSELECT 姓名姓名 FROM 演员演员 WHERE 姓名姓名 LIKE _ _l查询结果查询结果姓名姓名王菲王菲宁静宁静葛优葛优25l空值(空值(NULL)表示)表示不确定的值不确定的值l判断取值

11、为空的语句格式:判断取值为空的语句格式:列名列名 IS NULLl判断取值不为空的语句格式:判断取值不为空的语句格式:列名列名 IS NOT NULL26l查询有片酬记录的出演情况查询有片酬记录的出演情况lSELECT *FROM 出演出演 WHERE 片酬片酬 IS NOT NULLl查询结果查询结果27l在在WHERE子句中可以使用逻辑运算符子句中可以使用逻辑运算符AND和和OR来组成多重条件查询来组成多重条件查询l用用AND连接的条件表示必须全部满足所连接的条件表示必须全部满足所有的条件的元组才被选中有的条件的元组才被选中l用用OR连接的条件表示只要满足其中一个连接的条件表示只要满足其中

12、一个条件的元组即被选中条件的元组即被选中28l查询王姓女演员的情况查询王姓女演员的情况lSELECT *FROM 演员演员 WHERE 姓名姓名 LIKE 王王%AND 性别性别女女 l查询结果查询结果29l查询王姓演员和全体男演员的情况查询王姓演员和全体男演员的情况lSELECT *FROM 演员演员 WHERE 姓名姓名 LIKE 王王%OR 性别性别男男 l查询结果查询结果30l BETWEENAND和和 NOT BETWEENANDl格式格式 列名列名|表达式表达式 NOT BETWEEN 下限值下限值 AND 上限值上限值31l查询拍摄距今查询拍摄距今5至至10年的电影年的电影lSE

13、LECT 片名片名 FROM 电影电影 WHERE year(getdate()year(年代年代)BETWEEN 5 AND 10不见不散不见不散红河谷红河谷花样年华花样年华片名片名l查询结果查询结果32l查询拍摄距今查询拍摄距今5至至10年的电影年的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()year(年代年代)=5 AND year(getdate()year(年代年代)=10 33l查询拍摄距今不到查询拍摄距今不到5年或者年或者10年以上的电影年以上的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()

14、year(年代年代)NOT BETWEEN 5 AND 10l查询结果查询结果片名片名重庆森林重庆森林34l查询拍摄距今不到查询拍摄距今不到5年或者年或者10年以上的电影年以上的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()year(年代年代)10 35l IN和和NOT INl格式格式 列名列名 NOT IN(集合)(集合)36l查询拍摄距今为查询拍摄距今为5,10或者或者15年的电影年的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()-year(年代年代)IN(5,10,15)l查询结果查询结果片名片名花

15、样年华花样年华37l查询拍摄距今为查询拍摄距今为5,10或者或者15年的电影年的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()year(年代年代)=5 OR year(getdate()year(年代年代)=10 OR year(getdate()year(年代年代)=15 38l查询拍摄距今年限不是查询拍摄距今年限不是5,10或者或者15的电影的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()-year(年代年代)NOT IN(5,10,15)l查询结果查询结果片名片名重庆森林重庆森林红河谷红河谷不见不散不

16、见不散39l查询拍摄距今年限不是查询拍摄距今年限不是5,10或者或者15的电影的电影lSELECT 片名片名 FROM 电影电影 WHERE year(getdate()year(年代年代)!=5 AND year(getdate()year(年代年代)!=10 AND year(getdate()year(年代年代)!=15 40l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图41l计算函数

17、计算函数=l集合函数集合函数=l聚合函数聚合函数=l聚集函数聚集函数l对一组值进行计算并返回一个单值对一组值进行计算并返回一个单值42lCOUNT(*):统计表中元组个数统计表中元组个数lCOUNT():统计本列列值个数统计本列列值个数lMAX():求列值最大值):求列值最大值lMIN():求列值最小值):求列值最小值lSUM():计算列值总和计算列值总和lAVG():计算列值平均值计算列值平均值43l在在SELECT,HAVING子句中使用子句中使用l计算函数不能直接出现在计算函数不能直接出现在WHERE子句中子句中l如果使用了计算函数或者分组,那么如果使用了计算函数或者分组,那么 SELE

18、CT子句中的列必须是计算函数或者是分组依据列子句中的列必须是计算函数或者是分组依据列lSUM 与与AVG只能用于数值类型的列,参数可以只能用于数值类型的列,参数可以是计算列是计算列l要求只有一个参数要求只有一个参数l除除COUNT(*)外,其他函数在计算过程中均忽)外,其他函数在计算过程中均忽略略NULL值值44 45l查询演员出演的总人次数查询演员出演的总人次数l查询演员出演记录的总条数查询演员出演记录的总条数lSELECT COUNT(*)FROM 出演出演lSELECT COUNT(演员姓名演员姓名)FROM 出演出演lSELECT COUNT(片名片名)FROM 出演出演lSELECT

19、 COUNT(年代年代)FROM 出演出演 lSELECT COUNT(片酬片酬)FROM 出演出演l查询结果查询结果46l查询有片酬记录的总条数查询有片酬记录的总条数lSELECT COUNT(片酬片酬)AS 片酬记录条数片酬记录条数lFROM 出演出演l查询结果查询结果47l查询出演表中不同演员的人数查询出演表中不同演员的人数lSELECT COUNT(DISTINCT 演员姓名演员姓名)AS 演员总数演员总数lFROM 出演出演l查询结果查询结果48l查询出演表中支付的片酬总数查询出演表中支付的片酬总数lSELECT SUM(片酬片酬)AS 总片酬总片酬lFROM 出演出演l查询结果查询

20、结果49l查询梁朝伟的片酬总数查询梁朝伟的片酬总数lSELECT 演员姓名,演员姓名,SUM(片酬片酬)AS 总片酬总片酬lFROM 出演出演lWHERE 演员姓名演员姓名 梁朝伟梁朝伟l查询结果查询结果 列列 出演出演.演员姓名演员姓名 在选择列表中无效,因为在选择列表中无效,因为该列未包含在聚合函数中,并且没有该列未包含在聚合函数中,并且没有 GROUP BY 子句。子句。50l查询梁朝伟的片酬总数查询梁朝伟的片酬总数lSELECT SUM(片酬片酬)AS 梁朝伟的总片酬梁朝伟的总片酬lFROM 出演出演lWHERE 演员姓名演员姓名 梁朝伟梁朝伟l查询结果查询结果51l查询每人次出演支付

21、的片酬平均数查询每人次出演支付的片酬平均数lSELECT AVG(片酬片酬)AS 平均片酬平均片酬lFROM 出演出演l查询结果查询结果52lSELECT AVG(片酬片酬),l SUM(片酬片酬)/COUNT(片酬片酬),l SUM(片酬片酬)/COUNT(*)lFROM 出演出演l查询结果查询结果53l查询梁朝伟的平均片酬查询梁朝伟的平均片酬lSELECT 演员姓名,演员姓名,AVG(片酬片酬)AS 平均片酬平均片酬lFROM 出演出演lWHERE 演员姓名演员姓名 梁朝伟梁朝伟l查询结果查询结果 列列 出演出演.演员姓名演员姓名 在选择列表中无效,因为在选择列表中无效,因为该列未包含在聚

22、合函数中,并且没有该列未包含在聚合函数中,并且没有 GROUP BY 子句。子句。54l查询梁朝伟的平均片酬查询梁朝伟的平均片酬lSELECT AVG(片酬片酬)AS 梁朝伟的平均片酬梁朝伟的平均片酬lFROM 出演出演lWHERE 演员姓名演员姓名 梁朝伟梁朝伟l查询结果查询结果55l查询出演表中支付的最高片酬查询出演表中支付的最高片酬lSELECT MAX(片酬片酬)AS 最高片酬最高片酬lFROM 出演出演l查询结果查询结果56l查询最低片酬以及获得最低片酬的演员姓名查询最低片酬以及获得最低片酬的演员姓名lSELECT 演员姓名,演员姓名,MIN(片酬片酬)AS 最低片酬最低片酬lFRO

23、M 出演出演l查询结果查询结果 列列 出演出演.演员姓名演员姓名 在选择列表中无效,因为在选择列表中无效,因为该列未包含在聚合函数中,并且没有该列未包含在聚合函数中,并且没有 GROUP BY 子句。子句。57l查询最低片酬以及有关演员的姓名查询最低片酬以及有关演员的姓名lSELECT 演员姓名演员姓名lFROM 出演出演lWHERE 片酬片酬 MIN(片酬片酬)l查询结果查询结果 聚合不应出现在聚合不应出现在 WHERE 子句中,除非该聚子句中,除非该聚合位于合位于 HAVING 子句或选择列表所包含的子子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。查询中,并且要对其进行

24、聚合的列是外部引用。58l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图59lSELECT FROM WHERE GROUP BY HAVING 60l分组把一个表划分为子集,可以细化计分组把一个表划分为子集,可以细化计算函数的作用对象算函数的作用对象lHAVING子句指定满足条件的组子句指定满足条件的组l在一个查询语句中,可以使用任意多个在一个查询语句中,可以使用任意多个列进行分组列进行分组

25、l分组依据列不能是分组依据列不能是text,ntext,image和和bit类型类型61l查询每位演员拍片数目以及个人平均片酬,查询每位演员拍片数目以及个人平均片酬,个人最低个人最低/最高片酬最高片酬lSELECT 演员姓名演员姓名,COUNT(片名片名)拍片数拍片数目,目,AVG(片酬片酬)个人平均片酬,个人平均片酬,MIN(片酬片酬)个人最低片酬,个人最低片酬,MAX(片酬片酬)个人最高片酬个人最高片酬lFROM 出演出演lGROUP BY 演员姓名演员姓名626364 65lHAVING子句用于对分组后的结果再进子句用于对分组后的结果再进行过滤行过滤lHAVING子句的作用对象是组而不是

26、行子句的作用对象是组而不是行l在在HAVING子句中可以使用计算函数子句中可以使用计算函数lHAVING与与GROUP BY子句一起使用子句一起使用66l查询出演不少于查询出演不少于2部电影的演员姓名部电影的演员姓名676869lSELECT 演员姓名,演员姓名,COUNT(片名片名)拍片数目拍片数目lFROM 出演出演lGROUP BY 演员姓名演员姓名lHAVING COUNT(*)=270l先用先用GROUP BY按按演员姓名演员姓名分组分组l再用再用COUNT(*)统计每组包含的记录条统计每组包含的记录条数数l最后挑选记录条数最后挑选记录条数=2的组,返回对应的的组,返回对应的演员姓名

27、演员姓名和该组记录的条数和该组记录的条数l查询结果查询结果71l查询梁朝伟的个人片酬总数与个人平均片酬查询梁朝伟的个人片酬总数与个人平均片酬lSELECT 演员姓名,演员姓名,SUM(片酬片酬)个人总片酬,个人总片酬,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lGROUP BY 演员姓名演员姓名lHAVING 演员姓名演员姓名 梁朝伟梁朝伟72查询结果查询结果73lSELECT 演员姓名演员姓名,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lWHERE year(年代年代)100000l查询查询2000年以前个人最低片酬大于年以前个人最低片酬大于100k的

28、演员的的演员的个人平均片酬个人平均片酬7475 76lSELECT 演员姓名演员姓名,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lGROUP BY 演员姓名演员姓名lHAVING MIN(片酬片酬)100000 and year(年代年代)2000l查询结果查询结果列列 出演出演.年代年代 在在 HAVING 子句中无效,因为该列子句中无效,因为该列既不包含在聚合函数中,也不包含在既不包含在聚合函数中,也不包含在 GROUP BY 子子句中。句中。l查询查询2000年以前个人最低片酬大于年以前个人最低片酬大于100k的演员的个人的演员的个人平均片酬平均片酬77l查询查询20

29、00年以前演员的个人平均片酬年以前演员的个人平均片酬lSELECT 演员姓名演员姓名,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lGROUP BY 演员姓名演员姓名lWHERE year(年代年代)100000 and year(年代年代)2000lGROUP BY 演员姓名演员姓名l查询结果查询结果聚合不应出现在聚合不应出现在 WHERE 子句中,除非该聚合位于子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。要对其进行聚合的列是外部引用。l查询查询2000年以前个人最低片酬大于年以

30、前个人最低片酬大于100k的演员的个人的演员的个人平均片酬平均片酬79l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图80lSELECT FROM WHERE GROUP BY HAVING ORDER BY 81l排序子句的格式为:排序子句的格式为:ORDER BY ASC|DESC ,n l为排序的依据列,可以是列名或列为排序的依据列,可以是列名或列的别名的别名lASC表示对列进行升序排序

31、,表示对列进行升序排序,DESC表示对表示对列进行降序排序列进行降序排序l默认的排序方式为升序排序默认的排序方式为升序排序82l指定多个排序列时,首先按最前面的列进指定多个排序列时,首先按最前面的列进行排序行排序l如果排序后存在多个列值相同的记录,则如果排序后存在多个列值相同的记录,则对这些记录依据后续排序列进行排序对这些记录依据后续排序列进行排序83l查询全体演员的情况,按姓名排序查询全体演员的情况,按姓名排序lSELECT *l FROM 演员演员 ORDER BY 姓名姓名l查询结果查询结果84l查询全体演员的情况,先女后男再按姓名排查询全体演员的情况,先女后男再按姓名排序序lSELEC

32、T *l FROM 演员演员 ORDER BY 性别性别 DESC,姓名姓名l查询结果查询结果85lSELECT 演员姓名演员姓名,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lWHERE year(年代年代)100000 lORDER BY 演员姓名演员姓名 DESCl查询结果查询结果l查询查询2000年以前个人最低片酬大于年以前个人最低片酬大于100k的演员的个人的演员的个人平均片酬平均片酬86lSELECT 演员姓名演员姓名,AVG(片酬片酬)个人平均片酬个人平均片酬lFROM 出演出演lWHERE year(年代年代)100000l查询结果查询结果在关键字在关键字 G

33、ROUP 附近有语法错误。附近有语法错误。l查询查询2000年以前个人最低片酬大于年以前个人最低片酬大于100k的演员的个人的演员的个人平均片酬平均片酬87l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图88l查询结果来源于多张表查询结果来源于多张表l匹配不同表的公共列,实现多表连接匹配不同表的公共列,实现多表连接l连接的类型连接的类型内连接内连接外连接外连接89lFROM 表表1,表,表2

34、WHERE .l连接列必须是可比较的连接列必须是可比较的语义相同语义相同90姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231男男葛优葛优A751男男片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不散冯小刚冯小刚1998花样年华花样年华王家卫王家卫2000黑骏马黑骏马管虎管虎2000工号工号片名片名年代年代片酬片酬A120红河谷红河谷1998NULLA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演91l查询演员出演电影的情况查询演员出演电影的情况l

35、SELECT 演员演员.姓名,出演姓名,出演.片名,出演片名,出演.年代年代lFROM 演员,出演演员,出演lWHERE 演员演员.工号工号 出演出演.工号工号92姓名姓名性别性别工号工号王菲王菲女女A010宁静宁静女女A120梁朝伟梁朝伟男男A231葛优葛优男男A751工号工号片名片名年代年代片酬片酬A120红河谷红河谷1998NULLA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员出演出演查询结果查询结果93l查询演员与导演的合作情况查询演员与导演的合作情况lSELECT 姓名姓名,导演导演,电影电影.片名片名,l year(电影电影.年代年代)年代

36、年代 lFROM 演员,电影,出演演员,电影,出演lWHERE 演员演员.工号工号=出演出演.工号工号 AND l 出演出演.片名片名=电影电影.片名片名 AND l 出演出演.年代年代=电影电影.年代年代 94片名片名年代年代导演导演重庆森林重庆森林1994王家卫王家卫红河谷红河谷1998冯小宁冯小宁不见不散不见不散1998冯小刚冯小刚花样年华花样年华2000王家卫王家卫黑骏马黑骏马2000管虎管虎工号工号片名片名年代年代片酬片酬A120红河谷红河谷1998NULLA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演姓名姓名性别性别工号工号

37、王菲王菲女女A010宁静宁静女女A120梁朝伟梁朝伟男男A231葛优葛优男男A75195 96l查询与王家卫影片同年拍摄的其他导演的影查询与王家卫影片同年拍摄的其他导演的影片片lSELECT 电影电影1.片名,片名,电影电影1.导演,导演,year(电影(电影1.年代)年代)年代年代lFROM 电影电影 电影电影1,电影,电影 电影电影2lWHERE 电影电影2.导演导演=王家卫王家卫 ANDl 电影电影2.年代年代=电影电影1.年代年代 ANDl 电影电影1.导演导演!=王家卫王家卫97片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不

38、散冯小刚冯小刚1998花样年华花样年华王家卫王家卫2000黑骏马黑骏马管虎管虎2000电影电影 1年代年代导演导演片名片名1994王家卫王家卫重庆森林重庆森林1998冯小宁冯小宁红河谷红河谷1998冯小刚冯小刚不见不散不见不散2000王家卫王家卫花样年华花样年华2000管虎管虎黑骏马黑骏马电影电影 2查询结果查询结果98l连接时,输出一方的全部元组和对方的匹配元组连接时,输出一方的全部元组和对方的匹配元组lFROM l 表表1 LEFT|RIGHT OUTER JOIN 表表2 l ON 99lFROM l 表表1 LEFT OUTER JOIN 表表2 l ON l输出:表输出:表1全部,表

39、全部,表2满足连接条件元组满足连接条件元组100lFROM l 表表1 RIGHT OUTER JOIN 表表2 l ON l输出输出:表表1满足连接条件元组,表满足连接条件元组,表2全部全部101l查询所有演员出演影片的情况,包括没有出查询所有演员出演影片的情况,包括没有出演记录的演员演记录的演员lSELECT 姓名姓名,片名片名lFROM 演员演员 LEFT OUTER JOIN 出演出演 l ON 演员演员.工号工号=出演出演.工号工号102姓名姓名性别性别工号工号王菲王菲女女A010宁静宁静女女A120梁朝伟梁朝伟男男A231葛优葛优男男A751工号工号片名片名年代年代片酬片酬A120

40、红河谷红河谷1998NULLA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员出演出演查询结果查询结果103l查询所有演员出演影片的情况,包括没有出查询所有演员出演影片的情况,包括没有出演记录的演员演记录的演员lSELECT 姓名姓名,片名片名lFROM 出演出演 RIGHT OUTER JOIN 演员演员 l ON 演员演员.工号工号=出演出演.工号工号104工号工号姓名姓名性别性别A010王菲王菲女女A120宁静宁静女女A231梁朝伟梁朝伟男男A751葛优葛优男男片名片名年代年代片酬片酬工号工号红河谷红河谷1998NULLA120花样年华花样年华200

41、0100kA231不见不散不见不散1998120kA751演员演员出演出演查询结果查询结果105l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图106lSQL的的查询块查询块:一个:一个SELECTFROMWHERE的组合体的组合体l子查询子查询内层查询内层查询:嵌套在:嵌套在SELECT、UPDATE或或DELETE等语句中的查询块等语句中的查询块l主查询主查询外层查询外层查询:包含子查询的

42、语句:包含子查询的语句107l子查询要写在圆括号中子查询要写在圆括号中l引入子查询的保留字为引入子查询的保留字为INl子查询通常用在外层查询的子查询通常用在外层查询的WHERE子子句或句或HAVING子句中子句中108姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231男男葛优葛优A751男男片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不散冯小刚冯小刚1998花样年华花样年华王家卫王家卫2000黑骏马黑骏马管虎管虎2000工号工号片名片名年代年代片酬片酬A120红河谷红河谷1998NULLA231花样年

43、华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演109l查询片酬最低的演员姓名查询片酬最低的演员姓名lSELECT 演员演员.姓名姓名lFROM 演员演员,出演出演lWHERE 演员演员.工号工号=出演出演.工号工号 ANDl 片酬片酬 IN(SELECT MIN(片酬片酬)l FROM 出演出演)110姓名姓名工号工号性别性别王菲王菲A010女女宁静宁静A120女女梁朝伟梁朝伟A231男男葛优葛优A751男男片名片名导演导演年代年代重庆森林重庆森林王家卫王家卫1994红河谷红河谷冯小宁冯小宁1998不见不散不见不散冯小刚冯小刚1998花样年华花样年华

44、王家卫王家卫2000黑骏马黑骏马管虎管虎2000工号工号片名片名年代年代片酬片酬A120红河谷红河谷1998NULLA231花样年华花样年华2000100kA751不见不散不见不散1998120k演员演员电影电影出演出演111查询结果查询结果112 WHERE Sage ANY()AND Sdept IS ORDER BY Sage DESC 例(例(带带ANY或或ALL谓词的子查询)找出比谓词的子查询)找出比IS系至系至少一名学生年龄小的其他系学生名单。少一名学生年龄小的其他系学生名单。SELECT Sname,Sage,Sdept FROM StudentSELECT distinct S

45、age FROM Student WHERE Sdept=IS113WHERE (Sage ALL()AND(Sdept IS)ORDER BY Sage DESC 例例 查询比查询比IS系系所有所有学生年龄学生年龄都小都小的其他各系学生的其他各系学生姓名姓名,年龄,系名。年龄,系名。SELECT Sage FROM Student WHERE Sdept=IS SELECT Sname,Sage,Sdept FROM Student114 例例1 查找选修了课程查找选修了课程1或课程或课程2的学生学号和姓名。的学生学号和姓名。SELECT SC.Sno,Sname FROM SC,Stude

46、nt WHERE (Cno=2)AND(SC.Sno=Student.Sno)SELECT SC.Sno,Sname FROM SC,Student WHERE (Cno=1)AND(SC.Sno=Student.Sno)UNION集合查询就是对集合查询就是对几个查询块的结果集几个查询块的结果集进行并、进行并、交、差运算。交、差运算。115 例例1 查找选修了课程查找选修了课程1或课程或课程2的学生学号和姓名。的学生学号和姓名。SELECT SC.Sno,Sname FROM SC,Student WHERE(Cno=1)OR(Cno=2)AND (SC.Sno=Student.Sno)集合查

47、询就是对集合查询就是对几个查询块的结果集几个查询块的结果集进行并、进行并、交、差运算。交、差运算。116 AND Sno IN(SELECT Sno FROM SC WHERE Cno =2)例例2 查找既选修课程查找既选修课程1,又选修课程,又选修课程2的学生集合的学生集合 这实际上是查找选修了课程这实际上是查找选修了课程1学生,与选修了学生,与选修了课程课程2 的学生的的学生的交集交集。SELECT SnoFROM SCWHERE Cno=1117 INTERSECT (SELECT Sno FROM SC WHERE Cno=2)例例2 查找既选修课程查找既选修课程1,又选修课程,又选修

48、课程2的学生集合的学生集合 这实际上是查找选修了课程这实际上是查找选修了课程1学生,与选修了学生,与选修了课程课程2 的学生的的学生的交集交集。(SELECT SnoFROM SCWHERE Cno=1)118 AND Sno NOT IN()例例3 查找选修了课程查找选修了课程1,但不选修课程,但不选修课程2的学生。的学生。这实际上是查找选修课程这实际上是查找选修课程1的学生,与选修课的学生,与选修课程程2的学生的的学生的差集差集:SELECT Sno FROM SC WHERE Cno=1SELECT SnoFROM SC WHERE Cno=2119 EXCEPT (SELECT Sno

49、 FROM SC WHERE Cno=2)例例3 查找选修了课程查找选修了课程1,但不选修课程,但不选修课程2的学生。的学生。这实际上是查找选修课程这实际上是查找选修课程1的学生,与选修课的学生,与选修课程程2的学生的的学生的差集差集:(SELECT Sno FROM SC WHERE Cno=1)120l5.4.1 单表查询单表查询l5.4.2 查询条件的设置查询条件的设置l5.4.3 聚合函数聚合函数l5.4.4 分组分组l5.4.5 查询结果的排序查询结果的排序l5.4.6 多表连接查询多表连接查询l5.4.7 子查询子查询l5.4.8 视图视图121 基本表基本表1基本表基本表2视图视

50、图122l基本表:基本表:CREAT TABLE语句创建的表语句创建的表l基本表中的数据存储在磁盘上基本表中的数据存储在磁盘上l视图视图:从基本表中选取出来的数据组成:从基本表中选取出来的数据组成的的逻辑窗口逻辑窗口l视图包含的数据存放在基本表中,数据视图包含的数据存放在基本表中,数据库中只存放视图的定义库中只存放视图的定义l视图可以建立在基本表上,也可以建立视图可以建立在基本表上,也可以建立在其他的视图上在其他的视图上123lCREATE VIEW (视图列名表视图列名表)lAS 子查询语句子查询语句l子查询通常不包含子查询通常不包含ORDER BY和和DISTINCT子句子句l视图列名或者

51、全部指定,或者全部省略。省略时,视图列名或者全部指定,或者全部省略。省略时,视图的列名与子查询列名相同。视图的列名与子查询列名相同。l以下三种情况必须明确指定组成视图的所有列名:以下三种情况必须明确指定组成视图的所有列名:某个目标列是计算函数或列表达式;某个目标列是计算函数或列表达式;多表连接时选出了几个同名列作为视图的字段;多表连接时选出了几个同名列作为视图的字段;需要在视图中为某个列选用新的更合适的列名需要在视图中为某个列选用新的更合适的列名124l把在把在1998年拍摄过电影的演员情况定义为视图年拍摄过电影的演员情况定义为视图lCREATE VIEW 出演出演1998 ASl SELEC

52、T 姓名姓名,性别性别,片名片名l FROM 演员演员,出演出演l WHERE 演员演员.工号工号=出演出演.工号工号 ANDl 出演出演.工号工号 IN(SELECT 工号工号 l FROM 出演出演 l WHERE year(年代年代)=1998)125 126l查询在查询在1998年拍摄过电影的女演员的情年拍摄过电影的女演员的情况况lSELECT *lFROM 出演出演1998lWHERE 性别性别=女女l查询结果查询结果127lDROP VIEW l例如,删除视图例如,删除视图出演出演1998lDROP VIEW 出演出演1998128l简化数据查询语句简化数据查询语句l使用户能从多角度看到同一数据使用户能从多角度看到同一数据l提高了数据的安全性提高了数据的安全性l提供了一定程度的逻辑独立性提供了一定程度的逻辑独立性

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!