数据库语言SQL——数据查询1.ppt

上传人:罗晋 文档编号:8918122 上传时间:2021-01-24 格式:PPT 页数:39 大小:139KB
返回 下载 相关 举报
数据库语言SQL——数据查询1.ppt_第1页
第1页 / 共39页
数据库语言SQL——数据查询1.ppt_第2页
第2页 / 共39页
数据库语言SQL——数据查询1.ppt_第3页
第3页 / 共39页
数据库语言SQL——数据查询1.ppt_第4页
第4页 / 共39页
数据库语言SQL——数据查询1.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《数据库语言SQL——数据查询1.ppt》由会员分享,可在线阅读,更多相关《数据库语言SQL——数据查询1.ppt(39页珍藏版)》请在三一文库上搜索。

1、第4章 数据查询,4.1 基本查询 4.2 嵌套查询 4.3,在“学生学籍数据库”中创建了以下三个关系模式: 学生信息表(学号,姓名, 性别,年龄,系别) 课程信息表(课程号,课程名, 学分) 选修信息表(学号,课程号,成绩),SQL数据查询语句是SELECT语句,语法: SELECT FROM WHERE GROUP BY HAVING ORDER BY ,SELECT语句说明 SELECT语句中必须有: SELECT子句、FROM子句 其余子句可选: WHERE子句、GROUP BY子句、 HAVING子句、ORDER BY子句,SELECT语句说明 (1)SELECT ,称为SELECT

2、子句。用于指定整个查询结果表中包含的列。假定已经执行完FROM、WHERE、GROUPBY、HAVING子句,SELECT子句指定的目标列组成表就为整个查询的结果表。 (2) FROM ,称为FROM子句。是整个查询语句的数据来源,通常称为数据源表。,单表查询 单表查询指的是在一个源表中查找所需的数据。,下面首先说明单表查询SELECT语句中的各个子句,3.3.2 单表查询,1. SELECT子句 (1)查询表中若干列 在SELECT子句的中指定整个查询结果 表中出现的若干个列名,各列名之间用逗号分隔。 【例3.3.1】,查询全体学生的学号与姓名,SELECT 学号,姓名 FROM Stude

3、nts,(2)查询表中所有的列 可以用 * 来代替表的所有列。 【例3.3.2】,查询全部课程的基本信息,Select * from 表名,Select * from 课程信息表,(2)选择表中所有列 可以用*来代替表的所有列。 【例】查询全体学生的学号、姓名、性别、年龄、所在系。 SELECT * FROM 学生信息表,(3)查询经过计算的值,例: 查询全体学生的姓名及其出生年份。 SELECT 姓名,2011-年龄 FROM 学生信息表 输出结果:,( 4)设置列的别名 所谓别名,就是给另一个名字,主要是为了方便阅读。设置列别名的方法有: 原列名 AS 列别名,【例】查询全体学生的学号、姓

4、名,并为原来的中文列名设置英文别名:,Select 学号 as sno, 姓名 as sname, 年龄 as sage from 学生信息表,例: 查询全体学生的姓名及其出生年份。 输出结果:,SELECT 姓名 , 2010-年龄 as 出生年份 FROM 学生信息表,( 4)使用DISTINCT消除结果表中完全重复的行 【例】显示所有选课学生的学号,并去掉重复行。 解: SELECT DISTINCT 学号 FROM 选修信息表 与DISTINCT相反的是ALL,ALL表示保留结果表中的重复行。 默认情况下是ALL,表示保留重复行。,练习1:,1、 查询全体课程的课程号、课程名,并为其设

5、置别名CNO,CNAME。 3、 查询选修了课程的学生的学号。(去掉结果中重复的行),3. WHERE子句,WHERE 中常用的运算符:比较运算符和逻辑运算符。 比较运算符用于比较两个数值之间的大小是否相等。 常用的比较运算符有:=、=、 !、!共9种。 逻辑运算符主要有: 范围比较运算符:BETWEEN AND , NOT BETWEEN AND 集合比较运算符:IN ,NOT IN 字符匹配运算符:LIKE,NOT LIKE 空值比较运算符:IS NULL,IS NOT NULL 条件连接运算符:AND,OR,NOT,( 1)基于比较运算符的查询 【例】查询学生选课成绩大于80分的学生学号

6、、课程号、成绩。 解:SELECT * FROM 选修信息表 WHERE 成绩80,练习2:,1、查询“系别”不是“英语”的所有学生的基本信息。 2、查询所有年龄在20岁以上的学生姓名、系别及其年龄。,( 2)基于BETWEENAND的查询,基本格式:列名 BETWEEN 下限值 AND 上限值 等价于:列名=下限值 AND列名= 80 AND 成绩 =90,( 3)基于IN的查询 IN用于测试一个列值是否与常量表中的任何一个值相等。 IN条件表示格式为:列名 IN (常量1, 常量2, 常量n) 当列值与IN中的任一常量值相等时,则条件为TRUE,否则 为FALSE。 【例】查询数学系、计算

7、机系、艺术系学生的学号、姓名。 解: SELECT 姓名,学号 FROM 学生信息表 WHERE 系别 IN (数学, 计算机, 艺术) 等价于: SELECT 学号,姓名 FROM 学生信息表 WHERE 系别 =数学 OR 系别 = 计算机 OR 系别 =艺术,( 4)基于LIKE的查询 LIKE用于测试一个字符串是否与给定的模式匹配。 所谓模式是一种特殊的字符串,其中可以包含普通字符 ,也可以包含特殊意义的字符,通常叫通配符。 LIKE运算符的一般形式为:列名 LIKE 模式串中可包含如下四种通配符: (1)_:匹配任意一个字符。如 _u_表示第二个字符为u,第一、第三个字符为任意字符的

8、字符串。 (2)%:匹配多个字符。如S%表示以S开头的字符串。 (3) :匹配 中的任意一个字符,如SDJ 。 (4) :不匹配 中的任意一个字符,如SDJ 。,可以用LIKE来实现模糊查询 【例】查找姓名的第二个字符是晓并且只有三个字符的学生的学号、姓名。 解: SELECT 学号,姓名 FROM 学生信息表 WHERE 姓名 LIKE _晓_ 【例】查找姓名以李开头的所有学生的学号、姓名。 解: SELECT 学号,姓名 FROM 学生信息表 WHERE 姓名 LIKE 李% 【例】查找姓名以李、张或王开头的所有学生的学号、姓名。 解: SELECT 学号,姓名 FROM 学生信息表 WH

9、ERE 姓名 LIKE 李张王%,( 5)基于NULL空值的查询 空值是尚未确定或不确定的值。判断某列值是否为NULL值只 能使用专门判断空值的子句,语句格式如下: 判断列值为空的语句格式为:列名 IS NULL 判断列值不为空的语句格式为:列名 IS NOT NULL 【例】查询无考试成绩的学生的学号和相应的课程号。 解: SELECT 学号, 课程号 FROM 选修信息表 WHERE 成绩 IS NULL 不等价于: SELECT学号, 课程号 FROM 选修信息表 WHERE 成绩= 0,( 6 )基于多个条件的查询 可以使用AND、OR逻辑谓词来连接多个条件,构成一个 复杂的查询条件。

10、 使用格式为: AND AND 或 OR OR 【例】查询计算机系年龄在18岁以上的学生学号、姓名 解: SELECT 学号,姓名 FROM 学生信息表 WHERE 系别=计算机 AND 年龄18 【例】求选修了C1课程或C2课程的学生学号、成绩。 解: SELECT 学号,成绩 FROM 选修信息表 WHERE 课程号=C1 OR 课程号=C2,练习3:,1、查询既不是艺术系、数学系,也不是旅游系的学生的 姓名和 性别 。 2、查询所有不姓张学生的姓名、学号、和性别。 3、 查询年龄在1719岁(包括17岁和19岁)之间的学生的姓名、系别和年龄。 4、 查询选修1号或2号课程的学生的学号、课

11、程号、成绩。,对查询结果排序,使用ORDER BY子句 可以按一个或多个属性列排序 升序:ASC; 降序:DESC; 默认值为升序,注: DESC 是descend 降序意思 ; ASC 是ascend 升序的意思,对查询结果排序(续)按一个属性列排序,查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT 学号,成绩 FROM 选修信息表 WHERE 课程号= 3 ORDER BY 成绩 DESC,对查询结果排序(续)按多个属性列排序,查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。,SELECT * FROM 学生信息表 ORDER

12、BY 系别,年龄 DESC,练习4,查询选修信息表的基本信息,结果按学号升序排列,同一学号按课程号降序排列. 查询学生信息表的学号、姓名、年龄,结果按年龄升序排列,同一年龄学生按学号升序排列。,( 7)使用统计函数的查询 统计函数也称为集合函数或聚集函数,其作用是对一组值进行计算并返回一个值。,常用函数,【例】求选修了1号课程的学生的平均成绩。 SELECT AVG(成绩) AS 平均成绩 FROM 选修信息表 WHERE 课程号=1 【例】选修了1号课程的学生的最高分 SELECT MAX(成绩) AS 最高分 FROM 选修信息表 WHERE 课程号=1,【例】求学生的总人数 SELECT

13、 COUNT(*) AS 学生的总人数 FROM 学生信息表 等价于: SELECT COUNT(学号) AS 学生的总人数 FROM 学生信息表 【例】查询选修了课程的学生人数。,SELECT COUNT (DISTINCT 学号) FROM 选修信息表 注:用DISTINCT以避免重复计算学生人数,4. GROUP BY 子句,有时我们需要把FROM、WHERE子句产生的表按某种原则分 成若干组,然后再对每个组进行统计,一组形成一行,最后把所有这些行组成一个表 GROUP BY子句在WHERE子句后边。 一般形式为: GROUP BY , n 【例】求选修每门课程的学生人数。 解:SELE

14、CT 课程号,COUNT(学号) AS 选修人数 FROM 选修信息表 GROUP BY 课程号,注意: 1、select 字句中如果有统计函数,则不允许出现其他的列名,除非是group by 字句的列名 总之:包含GROUP BY子句的查询语句中,SELECT子句的列名,要么是统计函数,要么是包含在GROUP BY子句中的列名 下列语句是错误的:,Select 学号,avg(成绩)from 选修信息表,SELECT 学号, 课程号, COUNT(学号) AS 选修人数 FROM 选修信息表 GROUP BY 课程号,5. HAVING子句,HAVING子句指定GROUP BY生成的组表的选择

15、条件。 它的一般形式为:HAVING HAVING子句必须与GROUP BY子句一起使用。 WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。 GROUP BY 子句用来分组 WHERE 子句的输出。 HAVING 子句用来指定选择组的条件,满足条件的组被选。,【例】查询选修课程大于等于2门课的学生的学号、平均成绩、选修的门数。 解: SELECT 学号, AVG(成绩) AS 平均成绩, COUNT(*) AS 选修门数 FROM 选修信息表 GROUP BY 学号 HAVING COUNT(*) = 2,【例】查询学生的学号、平均成绩、选修的门数。 解: SELECT 学号,

16、 AVG(成绩) AS 平均成绩, COUNT(*) AS 选修门数 FROM 选修信息表 GROUP BY 学号,注意: where子句作用于基本表,从中选出满足条件的行,having字句作用于组,从中选出满足条件的组,例题,查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数,SELECT 学号, COUNT(课程号) FROM 选修信息表 WHERE 成绩=90 GROUP BY 学号 HAVING COUNT(课程号)=3,练习5:,列出选修人数小于5的课程号和实际选修人数 平均成绩大于80的课程号和实际平均成绩,综合练习,查询学生信息表的基本信息,结果按年龄降序排列,同一年龄按学号升序排列. 统计每位学生的选课情况,列出学号及其选课的门数 查询选修了最高分大于87的学生的学号及其最高分,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1