第4章 数据的查询与更新.ppt
《第4章 数据的查询与更新.ppt》由会员分享,可在线阅读,更多相关《第4章 数据的查询与更新.ppt(53页珍藏版)》请在麦多课文档分享上搜索。
1、第4章 数据的查询与更新,4.1 SQL查询语句格式 4.2 简单查询 4.3 统计查询 4.4 连接查询 4.5 嵌套查询 4.6 SQL操作功能语句 4.7 使用企业管理器查询与更新表,4.1 SQL查询语句基本格式,SELECT 列名1,列名2, INTO 新表名 FROM 表名1,表名2, WHERE 条件表达式 GROUP BY 列名1,列名2, HAVING 条件表达式 ORDER BY 列名1 ASC|DESC ,注意:顺序不能变!,4.2 简单查询,4.2.1 select子句 select子句用于指定要查询的特定表中的列 例1:查询师生管理库中教师表的所有信息 use 教学管
2、理 -打开数据库 select * from 教师 -*代表所有字段 例2:查询所有教师的姓名和工资信息 select 姓名,工资 from 教师 -各字段以“,”分隔,顺序可任意指定 例3:查询所有教师的姓名和年工资 select 姓名,年工资=工资*12 from 教师 select 姓名,工资*12 as 年工资 from 教师 /*对于不在表中的列而是由表中已有列派生出来的列名,可以用“=”或“as”指定*/,4.2 简单查询,例4:查询教师表中职称的种类 select distinct 职称 from 教师 /*distinct 用于去掉重复项*/ 例5:查询学生表中前3位学生 se
3、lect top 3 * from 学生 查询学生表中前20%的学生 select top 20 percent * from 学生 /*top n /top n percent用于限制返回行数*/,4.2 简单查询,问题:临时表的内容怎么看到?,select * into tb from 教师 where 1=2,问题:表tb 会产生吗?,4.2.2 可选项into子句into 新表名into子句用于指定所要生成的新表的名称。可以是永久表,也可以在表名前加#,则生成临时表。 例: select * into tb from 教师 -是永久表 select * into #tb from 教师
4、 -是临时表,结构复制,4.2 简单查询,4.2.3 必选项from子句from 表名1,表名2, from子句用于指定要查询的表或者视图 例: select * from 教师 select a.姓名,a.工资 from 教师 as aas:可以为每个表起一个别名。一旦为某个表起了别名后,就只能使用其别名。as关键字也可以省略。,4.2 简单查询,4.2.4 可选项where子句where 条件表达式where子句用来限定查询的范围和条件,只有满足条件的记录(条件结果为.T.的记录)才被查询到。P66表4.1 条件运算符,4.2.4 where 条件表达式,1. 比较运算符 例:查询工资少于
5、1230的教师信息 (不少于) select * from 教师 where 工资= 1985/7/12. 范围运算符 例:查询工资在2000至3000之间的教师信息 select * from 教师 where 工资 between 2000 and 3000,4.2.4 where 条件表达式,3. 列表运算符 例:在课程表中查询课程号为001、003、004的三门课程信息 select * from 课程 where 课程号 in (001, 003, 004) 4. 模式匹配运算符 P67 通配符:%:代表0或多个任意字符;_:代表单个字符; :代表在范围内的单个字符;代表不在范围内的
6、单个字符。 例:在课程表中查找课程名中带“公安”的课程信息 select * from 课程where 课程名 like (%公安%),4.2.4 where 条件表达式,注意:like只对字符型数据!,例:查找课程名的第二个字是“安”的课程信息 select * from 课程 where 课程名 like (_安%) 例:查找课程号为003至005的课程信息 select * from 课程where 课程号 like (003-5) 例:查找课程号不在003至005范围内的课程信息 select * from 课程where 课程号 like (00345),4.2.4 where 条件
7、表达式,5. 空值判断运算符 例:查找选修课成绩表中,成绩为空的信息(不空) select * from 选修课成绩 where 成绩 is null select * from 选修课成绩 where 成绩 is not null 6. 逻辑运算符 NOT AND OR 例:查询工资多于(等于)2000的男教师信息 select * from 教师 where 工资=2000 and 性别=男 例:查询工资少于2000或多于3500的教师信息 select * from 教师 where 工资3500 NOT可以用到前面讲到的多个运算符中。,4.2 简单查询,4.2.5 可选项order b
8、y子句order by 列名1 asc|desc , 用来按升序或降序显示查询结果 例:查询教师信息,并按工资降序显示 select * from 教师 order by 工资 desc 例:查询教师信息,先按职称升序排列,职称相同的再按工资降序排列 select * from 教师 order by 职称,工资 desc,4.2 简单查询,4.2.6 合并结果集select 语句 union select 语句 例: select * from 教师 where 职称= 教授 union select * from 教师 where 职称= 副教授 注意:列数必须相同,数据类型必须相同;默认
9、将从最后结果中删除重复的记录。,4.3 统计查询,对查询结果进行统计,例如求和、平均值、最大值、最小值和个数,可以使用以下三种方法: 1)集合函数(SUM,AVG,MAX,MIN,COUNT) 2)GROUP BY 子句 3)COMPUTE 子句,4.3.1 使用集合函数,集合函数用来对查询结果集中的记录进行汇总计算,例如求和、平均值、最大值、最小值、个数等。集合函数有:AVG SUM MAX MIN COUNT 1)AVG :求平均值 例1:查询教师表中的平均工资 select 平均工资=avg(工资) from 教师 例2:查询选修课成绩中的平均成绩 select avg(成绩) as 平
10、均成绩 from 选修课成绩,问题:NULL值如何处理? 注意:在计算中NULL值被忽略!AVG只能对一列数值型字段进行计算,4.3.1 使用集合函数,2)SUM:求和 例:查询教师表中的工资总和 select sum(工资) 工资总和 from 教师 3)MAX:求最大值 例:查询教师表中的最高工资 select max(工资) 最高工资 from 教师 4)MIN:求最小值 例:查询教师表中的最低工资 select min(工资) 最低工资 from 教师,4.3.1 使用集合函数,5) COUNT:统计查询结果集中记录的个数 例1:查询教师表中的教师人数 select count(*)
11、as 教师人数 from 教师 select count(工号) as 教师人数 from 教师 例2:查询教师表中的职称类别 select count(职称) as 职称种类数 from 教师 select count(distinct 职称) as 职称种类数 from 教师 例3:查询教师表中平均工资,最高工资,教师人数 select 平均工资=avg(工资),max(工资) as 最高工资,count(工号) 教师人数 from 教师,4.3.2 使用GROUP BY子句,group by列名用于对查询结果按指定列进行分组,然后对每一组进行汇总计算。,例1:求每个学生选修课的平均分,s
12、elect 学号,avg(成绩) from 选修课成绩 group by 学号,having 条件表达式是对生成的组进行筛选,要有分组。,例2:求多于一门的每个学生选修课的平均分,select 学号,avg(成绩) from 选修课成绩group by 学号 having count(*)1,注:select 后的列名只能是集合函数或是group by 后的列名,where与having,where 是先对表中记录进行筛选,而having 是对生成的组进行筛选。where子句中不能有集合函数。,select 职称 from 教师 where 性别=男 group by 职称 having av
13、g(工资)1600,select 课程号,avg(成绩) from 选修课成绩where 课程号 001 group by 课程号,有时两者可以互换。 例:求除“001”以外的每门选修课的平均成绩,例:找出男职工的平均工资大于1600的职称,或 select 课程号,avg(成绩) from 选修课成绩group by 课程号 having 课程号 001,1、查出选了2门或2门以上课程的学生的学号 select 学号 from 选修课成绩 group by 学号 having count(*) =2 2、查询成绩均在65分以上的课程信息 select 课程号 from 选修课成绩 group
14、 by 课程号 having min(成绩)65,练习,4.3.3 使用COMPUTE子句,compute子句对查询结果中的所有记录进行汇总计算,并显示所有参加汇总记录的详细信息。 语法:compute 集合函数 by 列名 例1 显示教师信息和平均工资信息: select * from 教师 compute avg(工资) 例2:查询教师的工号、工资和平均工资 select 工号,工资 from 教师 compute avg(工资),4.3.3 使用COMPUTE子句,computer 后用by 列名可进行分组统计,但必须先排序再分组,即 compute by必须与order by连用 例:
15、按性别对教师进行分组,并查询平均工资及其他详细信息 select * from 教师 order by 性别compute avg(工资) by 性别,4.4 连接查询,有时需要从多个表中取数据形成结果,这些表之间就要进行连接。连接分为: 交叉连接 cross 内连接 inner join 外连接(又分为左连接left outer join、右连接right outer join 和全连接full outer join) 自连接 join,4.4.1 交叉连接,将两个表不加任何条件地组合在一起,即将第一个表中的所有记录分别与第二个表中的每条记录组成新记录。 例: select * from 学
16、生,教师 或 select * from 学生 cross join 教师 mn条记录, b1+b2个字段 在实际应用中一般没意义,4.4.2 内连接,自然连接是去掉重复属性的等值连接,将两个表中满足连接条件的记录组合在一起 例:查询学生的学号、姓名、所选课程号和成绩 格式一: select 学生.学号,姓名,课程号,成绩from 学生 inner join 选修课成绩 on 学生.学号=选修课成绩.学号条件:on 主键=外键 格式二: select 学生.学号,姓名,课程号,成绩from 学生,选修课成绩 where 学生.学号=选修课成绩.学号,注:当select后的字段在两个表中都存在时
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 查询 更新 PPT
