SQL Server 第12次课

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作还是对一组操作。

目的:细化计算函数的作用对象。
分组语句的一般形式:
Select <列> from <数据源> [WHERE <条件> ] [GROUP BY <分组条件>] [HAVING <组过滤条件>] 第二步 第一步
1. GROUP BY

例1.统计每门课程的选课人数,列出课程号和人数

SELECT Sname, Sno
FROM Student
WHERE Sname LIKE ‘_海%’
例6-19(p150)Erep LIKE ‘[王李刘] %’
Erep LIKE ‘[王,李,刘] %’ 错
例 6-20..6-23
例 6-24

例6-25 从银行表中查询银行电话最后1位不在3到6范围
6.1.1.4使用 TOP限制结果集

P155


例6-31
例6-32
例6-33
6.1.1 单表查询
6.1.1.1选择表中的若干列 6.1.1.2选择表中的若干元组 6.1.1.3对查询结果排序 6.1.1.4使用Top限制结果集 6.1.1.5分组与汇总查询 6.1.1.6使用CASE子句对查询结果进行分析 6.1.1.7合并查询 6.1.1.8保存查询结果到新表

例如,学生选课,在开学初学生只
有选课记录,没有修课成绩,这时
成绩一项的值就是空值。

不能用=或<>,只能用IS NULL或IS NOT NULL
涉及空值的查询

例19.查询无成绩的学生的学号和相应的课程号
SELECT Sno, Cno FROM SC
WHERE Grade IS NULL

例20.查询所有有成绩的学生的学号和课程号 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL
内的银行代码、银行名称和银行电话

select Bno,Bname,Btel from BankT where Btel like '%[^3-6]‘ 思考:用‘Not In’/‘NOT Like’可以吗?
2.查询满足条件的元组
常用的查询条件 :
(6)涉及空值的查询

空值是未确定的值或其值未知 不等Leabharlann 于空白或零值注意:
空值不是一个确定的值,所以
不可以用等于或不等于来比较
或衡量;

空值只能说是空值(IS NULL) 或不是空值(IS NOT NULL)。

P.152 – P153 例6-26,6-27
6.1.1 单表查询
查询仅涉及一个表,是一种最简单的查询操作 6.1.1.1选择表中的若干列 6.1.1.2选择表中的若干元组 6.1.1.3对查询结果排序 6.1.1.4使用Top限制结果集 6.1.1.5分组与汇总查询 6.1.1.6使用CASE子句对查询结果进行分析 6.1.1.7合并查询 6.1.1.8保存查询结果到新表
字符匹配 (LIKE)
例15.查询98级计算机系所有班中学号排第1(学号为
98***01)的学生的详细信息
SELECT * FROM Student WHERE Sno LIKE ‘98___01’ AND Sdept=‘CS’
字符匹配 (LIKE)
例16.查询名字中第2个字为“海”字的学生的姓名和学
Sno 981202 982103 981201 Grade 90 85 80
三.对查询结果排序

例24.查询全体学生情况,查询结果按所在系的系名升
序排列,同一系的学生按年龄降序排列
SELECT * FROM Student
ORDER BY Sdept, Sage DESC

P153

例6-28
Principle and Application of Database System
1.聚合函数与汇总查询

使用聚合函数对一组值进行计算,并返回单个值 常用的聚合函数: COUNT( * ):统计表中元组个数 COUNT([distinct|all]<列名>):统计本列非空列值个数


SUM ([distinct|all]<列名>):计算列值总和(必须是数值型列)
AVG(([distinct|all]< <列名>):计算列值平均值(必须是数值型列) MAX(([distinct|all]< <列名>):求列值最大值 MIN(([distinct|all]< <列名>):求列值最小值


注:除了COUNT()外,聚合函数计算时忽略空值
Select count(*), Count(Ecapital), Sum(Ecapital),
Avg(Ecapital), Max(Ecapital), Min(Ecapital)

From LegalEntityT where Ecapital IS NULL 例 6-34 例6-35 例6-36 例6-37
例6-29


例6-30
6.1.1 单表查询
查询仅涉及一个表,是一种最简单的查询操作 6.1.1.1选择表中的若干列 6.1.1.2选择表中的若干元组 6.1.1.3对查询结果排序 6.1.1.4使用Top限制结果集 6.1.1.5分组与汇总查询 6.1.1.6使用CASE子句对查询结果进行分析 6.1.1.7合并查询 6.1.1.8保存查询结果到新表

三.对查询结果排序

例22:将学生按年龄升序排序
SELECT * FROM Student ORDER BY Sage
三.对查询结果排序

例23.查询选修了1号课程的学生的学号及其成绩,查询 结果按成绩降序排列
SELECT Sno, Grade FROM SC
WHERE Cno=’1’ ORDER BY Grade DESC



select sno, cno, grade from sc where grade between 70 and 80

5.查询计算机系年龄在18到20之间且性别为‘男’的学生的
姓名、年龄。

select sname, sage from student where sdept = '计算机系' and sage between 18 and 20 and ssex = '男'
Principle and Application of Database System
6.1.1.4 使用 TOP限制结果集
TOP 子句限制返回到结果集中的行数。
格式:
[ TOP n [ PERCENT ] [ WITH TIES ] ]
Top n:取前n个结果
Top n Percent:取前n%个结果 With Ties:取前n个结果,包括并列的行。必须同 Order by一起使用 写在Select后面,若有distinct,写在distinct前面

考虑问题:

查询银行代码Bno=‘B111A’, Bno=‘B1100’的贷款法人个
数。

查询条件如何写? Where Bno=‘B111A’ Where Bno=‘B1100’ Where Bno=‘B1100’ or Bno=‘B111A’ ???
2.对查询结果分组

作用:可以控制计算的级别:对全表
Principle and Application of Database System
三.对查询结果排序

可对查询结果进行排序

为什么排序?

关系理论不假设查询结果集中的行带有序列

排序子句为:
ORDER BY <列名> [ASC | DESC ] [,<列名> … ]

说明:

按<列名>进行升序(ASC)或降序(DESC)排序。 列顺序对检索结果有影响

2.查询计算机系的学生的姓名、年龄。 select sname, sage from student where sdept = '计 算机系'


3.查询选修了c01号课程的学生的学号和成绩。 select sno, grade from sc where cno = 'c01’ 4. 查询成绩在70到80分之间的学生的学号、课程号和 成绩。
SQL提供的计算函数
例25.查询学生总人数。 SELECT COUNT(*) FROM Student
SQL提供的计算函数

例26. 查询选修了课程的学生的人数
SELECT COUNT (DISTINCT Sno) FROM SC
SQL提供的计算函数

例27 .计算1号课程学生的修课总成绩
SELECT SUM(Grade) FROM SC Where Cno = ‘1’

6.查询’9512101’号学生的修课情况。 select * from sc where sno = '9512101’


7.查询c01号课程成绩最高的分数。 select max(grade) as max_grade from sc where cno
= 'c01‘

8.查询学生都修了哪些课程,要求列出课程号。 select distinct cno from sc
SQL提供的计算函数

例28.计算1号课程的学生的平均成绩
SELECT AVG(Grade) FROM SC WHERE
Cno=’1’
SQL提供的计算函数

例29.查询选修了1号课程的学生的最高分和最低分
SELECT MAX(Grade), MIN(Grade) FROM SC WHERE Cno=’1’
_(下划线):匹配一个字符(全角/半角)。
[ ]:匹配括号中包含的任何单个字符
[^ ]:不匹配括号中包含的任何单个字符
字符匹配 (LIKE)
例17.查询所有不姓“刘”的学生 SELECT Sname
SELECT Student FROM Sname
FROM Student NOT LIKE ‘刘%’ WHERE Sname WHERE Sname NOT LIKE ‘刘%’
SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno

查询过程: 对查询结果按Cno的值分组,所有具有相同 Cno值的元组为一组,然后再对每一组使用COUNT计算,
求得每组的学生人数。
Sno
Cno
Grade
Sno 981201 981202 982103
2.查询满足条件的元组
常用的查询条件 :
(5)字符匹配 (LIKE)

一般形式为:
列名 [NOT ] LIKE 匹配串

作用:查找指定列名与匹配串常量
匹配的元组。

匹配串类型:匹配串可以是字符串 常量(=),也可以含有通配符。
字符匹配 (LIKE)

通配符种类: %(百分号):匹配0个或多个字符。
[WHERE <检索条件表达式>] [GROUP BY <分组依据列>] [HAVING <分组提取条件>] [ORDER BY <排序依据列> [ASC|DESC]]
6.1.1 单表查询
查询仅涉及一个表,是一种最简单的查询操作 6.1.1.1选择表中的若干列 6.1.1.2选择表中的若干元组 6.1.1.3对查询结果排序 6.1.1.4使用Top限制结果集 6.1.1.5分组与汇总查询 6.1.1.6使用CASE子句对查询结果进行分析 6.1.1.7合并查询 6.1.1.8保存查询结果到新表
审计署计算机审计中级培训
第6章 数据查询与数据操作
制作人:杨潇 山东经济学院信息管理学院
6.1.1 SQL查询语句的基本结构
SELECT [ALL|DISTINCT]<目标列表达式> [,..,n]
[INTO <新表>]
FROM <数据源>
SELECT <目标列名序列>(需要哪些列) FROM <表名序列> (从哪些表) WHERE <查询条件> (根据什么条件)
Principle and Application of Database System
指定别名来改变查询结果的列标题
SELECT Sname NAME, 2001-Sage BIRTH , LOWER(Sdept) DEPART FROM Student
消除取值相同的行
要去掉结果表中的重复行,可用DISTINCT实现
SELECT DISTINCT Sno FROM SC
Sno
981201
981202 982103
2.查询满足条件的元组
查询满足条件的元组可通过WHERE子句实现! 常用的查询条件 :
复习题

1.分别查询学生表和学生修课表中的全部数据。
select * from student select * from sc
相关文档
最新文档