数据库软件实践11-3_2

上传人:小** 文档编号:47695116 上传时间:2018-07-04 格式:PDF 页数:8 大小:660.56KB
返回 下载 相关 举报
数据库软件实践11-3_2_第1页
第1页 / 共8页
数据库软件实践11-3_2_第2页
第2页 / 共8页
数据库软件实践11-3_2_第3页
第3页 / 共8页
数据库软件实践11-3_2_第4页
第4页 / 共8页
数据库软件实践11-3_2_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据库软件实践11-3_2》由会员分享,可在线阅读,更多相关《数据库软件实践11-3_2(8页珍藏版)》请在金锄头文库上搜索。

1、第三讲: Oracle数据库查询第三讲: Oracle数据库查询内容提要内容提要单表查询命令操作单表查询命令操作多表查询命令操作多表查询命令操作子查询子查询数据库数据查询数据库数据查询?SQL语言本身称为结构化查询语言,查询是SQL最 核心的部分,用来实现对数据库的各种查询功能SQL语言本身称为结构化查询语言,查询是SQL最 核心的部分,用来实现对数据库的各种查询功能?查询功能主要由 SELECT 语句实现查询功能主要由 SELECT 语句实现数据库数据查询数据库数据查询?语法结构SELECT FROM WHERE GROUP BY HAVING ORDER BY 语法结构SELECT FRO

2、M WHERE GROUP BY HAVING ORDER BY SELECT语句SELECT语句?SELECT语句的含义SELECT语句的含义? 对FROM子句中的各表作笛卡儿积,根据WHERE子 句中的条件表达式,从笛卡儿积中找出满足条 件的元组,再按照 SELECT 子语句中所列,从 查出的元组中选出所需列值形成结果表对FROM子句中的各表作笛卡儿积,根据WHERE子 句中的条件表达式,从笛卡儿积中找出满足条 件的元组,再按照 SELECT 子语句中所列,从 查出的元组中选出所需列值形成结果表SELECT语句SELECT语句?注意注意? 若有ORDER BY子句,把结果表按指定的列名按

3、升序或降序排序。若有ORDER BY子句,把结果表按指定的列名按 升序或降序排序。? 若有GROUP BY子句,对结果表进行分组。 HAVING 子句为 GROUP BY 子句设置过滤条件。 结果表是一个动态数据集。若有GROUP BY子句,对结果表进行分组。 HAVING 子句为 GROUP BY 子句设置过滤条件。 结果表是一个动态数据集。笛卡尔积笛卡尔积?当从两个或两个以上的表中选择数据,并且在 WHERE子句中没有指定连接条件就是笛卡儿积当从两个或两个以上的表中选择数据,并且在 WHERE子句中没有指定连接条件就是笛卡儿积A AB BC Ca1a1b1b1c1c1a1a1b2b2c2c

4、2a2a2b2b2c1c1ABCa1a1b2b2c2c2a1a1b3b3c2c2a2a2b2b2c1c1RSRS笛卡尔积笛卡尔积?当从两个或两个以上的表中选择数据,并且在 WHERE子句中没有指定连接条件就是笛卡儿积当从两个或两个以上的表中选择数据,并且在 WHERE子句中没有指定连接条件就是笛卡儿积A AB BC CA AB BC Ca1a1b1b1c1c1a1a1b2b2c2c2a1a1b1b1c1c1a1a1b3b3c2c2a1a1b1b1c1c1a2a2b2b2c1c1a1a1b2b2c2c2a1a1b2b2c2c2RSRS单表查询单表查询?查询所有列 SELECT子句中用星号(*)表

5、示“所有属性”,并 按关系模式中属性的顺序排列输出结果查询所有列 SELECT子句中用星号(*)表示“所有属性”,并 按关系模式中属性的顺序排列输出结果?例:查询Students表中所有学生的全部信息 SELECT *FROM Students;例:查询Students表中所有学生的全部信息 SELECT *FROM Students;单表查询单表查询?查询指定列 在SELECT 后面指定列名,还可以用AS定义别名, 各列之间用“,”隔开例:查询Students表中学生姓名, 学号, 性别SELECT 姓名, 学号, 性别FROM Students;查询指定列 在SELECT 后面指定列名,还

6、可以用AS定义别名, 各列之间用“,”隔开例:查询Students表中学生姓名, 学号, 性别SELECT 姓名, 学号, 性别FROM Students;单表查询单表查询?取消重复行取消重复行 ?当不需要在查询结果中出现重复行时,在SELECT 后使用DISTINCT关键词即可当不需要在查询结果中出现重复行时,在SELECT 后使用DISTINCT关键词即可?例:查询Students表中所有的系名,消除重复例:查询Students表中所有的系名,消除重复SELECTDISTINCT 系名 FROMStudents;SELECTDISTINCT 系名 FROMStudents;单表查询单表查询

7、?使用表达式使用表达式?可以在查询列中使用字符串 使用|连接字符串可以在查询列中使用字符串 使用|连接字符串?改变显示格式 使用函数TO_CHAR( )改变显示格式 使用函数TO_CHAR( )?计算显示的数据 使用+,-,*,/等计算显示的数据 使用+,-,*,/等单表查询单表查询?例: SELECT 学号, 课程号, 成绩*0.9 FROM Grade;该查询返回Grade关系,只是成绩乘以 0.9例: SELECT 学号, 课程号, 成绩*0.9 FROM Grade;该查询返回Grade关系,只是成绩乘以 0.9条件查询条件查询?条件查询条件查询?通过 WHERE子句来实现查询满足指定

8、条件的元组通过 WHERE子句来实现查询满足指定条件的元组?凡使 WHERE子句中的逻辑表达式返回 True 值的 元组都将被选择出来凡使 WHERE子句中的逻辑表达式返回 True 值的 元组都将被选择出来?若在WHERE子句中出现某一关系所属的属性,则该 关系需包含在FROM子句中若在WHERE子句中出现某一关系所属的属性,则该 关系需包含在FROM子句中条件查询条件查询?WHERE子句可使用的运算符WHERE子句可使用的运算符? 比较:、=、=、=、=、=、=、=85;例:查询选修课程C1或C2且分数大于等于85分学生的的学号、课程号和成绩SELECT 学号, 课程号, 成绩 FROM

9、Grade WHERE 课程号 IN (C1 ,C2)AND 成绩=85;排序显示查询结果排序显示查询结果?子句 ORDER BY 对查询结果进行排序子句 ORDER BY 对查询结果进行排序 ?使用DESC指定降序列,使用ASC指定升序;升序是 缺省方式使用DESC指定降序列,使用ASC指定升序;升序是 缺省方式?例:按字母顺序将电信系(设对应系名为电信 )的学生名字列示。 SELECT 姓名FROM Students WHERE 系名=电信ORDER BY 姓名;例:按字母顺序将电信系(设对应系名为电信 )的学生名字列示。 SELECT 姓名FROM Students WHERE 系名=电

10、信ORDER BY 姓名;分组查询分组查询?将表中的数据按一定条件分类组合,再根据需要对数据进行统计、计数等运算将表中的数据按一定条件分类组合,再根据需要对数据进行统计、计数等运算?分组函数分组函数COUNT(*)COUNT(*)计算表中的行数(含重复值、空值)计算表中的行数(含重复值、空值)COUNT(e)COUNT(e)计算所选数据列 e 值非空的行数计算所选数据列 e 值非空的行数SUM(e)SUM(e)计算数值列 e 的和计算数值列 e 的和MIN(e)MIN(e)求(字符、日期、数值列 e)的最小值求(字符、日期、数值列 e)的最小值MAX(e)MAX(e)求(字符、日期、数值列 e

11、)的最大值求(字符、日期、数值列 e)的最大值AVG(e)AVG(e)计算数值列 e 的平均值计算数值列 e 的平均值分组函数分组函数?例:求Students表中的学生人数 SELECT count(*) FROM Students;例:求Students表中的学生人数 SELECT count(*) FROM Students;?例:求关系Students中学生所隶属的系的个数 SELECT count(DISTINCT 系名) FROM Students;例:求关系Students中学生所隶属的系的个数 SELECT count(DISTINCT 系名) FROM Students;分组函

12、数分组函数?例:查找 Student 表中年龄最大的学生的年龄 SELECT min(出生日期) FROMStudents;例:查找 Student 表中年龄最大的学生的年龄 SELECT min(出生日期) FROMStudents;?例:查找Teacher表中所有女教工的平均工资和工 资总额 SELECTavg(工资), sum(工资) FROM Teacher WHERE 性别=F;例:查找Teacher表中所有女教工的平均工资和工 资总额 SELECTavg(工资), sum(工资) FROM Teacher WHERE 性别=F;分组查询分组查询?例:计算每个职称级别的平均工资例:计

13、算每个职称级别的平均工资分组查询分组查询?GROUP BY子句可将查询结果按属性列(属性列组 合)在行的方向上进行分组GROUP BY子句可将查询结果按属性列(属性列组 合)在行的方向上进行分组 ?每组在属性列(属性列组合)上具有相同的值每组在属性列(属性列组合)上具有相同的值 ?一个分组以一个元组的形式出现一个分组以一个元组的形式出现?GROUP BY子句一般总是出现在同时也包含有分组 函数的 SELECT 语句中GROUP BY子句一般总是出现在同时也包含有分组 函数的 SELECT 语句中 ?分组函数计算出每一组的值分组函数计算出每一组的值分组函数分组函数?例:计算每个职称级别的平均工资

14、SELECT 职称, avg(工资) FROM Teacher GROUP BY 职称;例:计算每个职称级别的平均工资SELECT 职称, avg(工资) FROM Teacher GROUP BY 职称;分组查询分组查询?例:查询男女生的人数 SELECT 性别, COUNT(*) AS 人数 FROM STUDENTS GROUP BY 性别;例:查询男女生的人数 SELECT 性别, COUNT(*) AS 人数 FROM STUDENTS GROUP BY 性别;?按性别的值分组按性别的值分组 ?对每一组使用函数COUNT进行计算,统计出各性别 的人数,统计出的结果以“人数”为列名输出

15、对每一组使用函数COUNT进行计算,统计出各性别 的人数,统计出的结果以“人数”为列名输出分组函数分组函数?例:计算每个职称级别的平均工资SELECT 职称, avg(工资) FROM Teacher GROUP BY 职称;例:计算每个职称级别的平均工资SELECT 职称, avg(工资) FROM Teacher GROUP BY 职称;分组查询(按多列分组)分组查询(按多列分组)?例:查询各系男女生的人数 SELECT 系名,性别, COUNT(*) AS 人数 FROM STUDENTS GROUP BY 系名,性别;例:查询各系男女生的人数 SELECT 系名,性别, COUNT(*

16、) AS 人数 FROM STUDENTS GROUP BY 系名,性别;?如果选择列表同时包含列、表达式和分组函数, 那么这些列、表达式都必须出现在GROUP BY子句 中,否则会显示错误信息如果选择列表同时包含列、表达式和分组函数, 那么这些列、表达式都必须出现在GROUP BY子句 中,否则会显示错误信息分组查询分组查询?例:计算男女教工的平均工资和工资总额SELECT 性别, avg(工资),sum(工资) FROM Teacher GROUP BY 性别;例:计算男女教工的平均工资和工资总额SELECT 性别, avg(工资),sum(工资) FROM Teacher GROUP BY 性别;带条件的分组查询带条件的分组查询?可以用HAVING子句来限制(或过滤)分组后的结 果显示,并且HAVING子句必须跟在GROUP BY子句 之后可以用HAVING子句来限制(或过滤)分组后的结 果显示,并且HAVIN

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 经营企划

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