第6章 数据库查询综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章数据库查询综述
教学目的
●熟悉Transact-SQL运算符和函数
●掌握SELECT语句
技能点
●熟悉Transact-SQL运算符和函数
●熟悉SELECT语句的一般应用
●会用SELECT语句进行复杂查询
学时要求
8学时(理论:4 实践:4)
教学策略或过程
具体讲课内容如下。
第1小节基本SELECT语句知识要点
以数据库student中s、c、sc表为例
CREATE TABLE s
(sno char(4) PRIMARY KEY,
class char(20),
sname char(8),
sex char(2),
birthday datetime,
address varchar(50),
telephone char(20),
email char(40))
CREATE TABLE c
(cno char(4) PRIMARY KEY,
cname char(20),
credit tinyint)
CREATE TABLE sc
(sno char(4),
cno char(4),
score smallint,
PRIMARY KEY(sno,cno))
1.SELECT语句的基本语法
SELECT <表达式> [AS <别名>] [INTO <目标表名>]
FROM <源表名>
[WHERE <条件>]
[GROUP BY <列> [HA VING <条件>]] [ORDER BY <列> [DESC]]
2.操纵列
(1)计算表达式的值
(2)输出所有列
P148
SELECT * FROM s
(3)设置列标题
例检索所有学生的年龄。
SELECT sname AS name, 'is',YEAR(GETDA TE())-YEAR(birthday) AS age FROM s 3.操纵行
(1)普通查询
例检索所有1985年12月31日以后以及1982年12月31日以前出生的女生的姓名和出生日期。
SELECT sname,birthday FROM s
WHERE sex='女' AND (YEAR(birthday)>=1986 OR YEAR(birthday)<=1982)
(2)模糊查询
模糊匹配:LIKE
通配符:%(*)、_(?)、[](指定范围)。
例检索所有姓李以及第二个字为李的住址在西安的学生的姓名、性别和住址。
SELECT sname,sex,address FROM s
WHERE (sname LIKE '李%' OR sname LIKE '_李%') AND address LIKE '%西安%' eg. SELECT sno,sname FROM s WHERE sname LIKE '[S-V]%'
注:
·SQL语言中将一个汉字视为一个字符而非2个字符。
4.数据汇总
(1)聚合函数
COUNT( [distinct] <字段表达式>|*)、MAX()、MIN()、SUM()、A VG()。
(2)分类
GROUP BY <列> HA VING <条件>
注:
·GROUP BY子句可以使用表达式,但不能使用text、image、bit类型的数据。
·HA VING字句与WHERE字句功能相同,不同的是HA VING是GROUP BY后的条件,例如可以使用聚合函数。
例检索每个学生所选课程的数量、总分及最高分和最低分。
SELECT sno,COUNT(*) AS num,SUM(score),MAX(score), MIN(score) FROM sc
GROUP BY sno
eg. SELECT SUM(score),MAX(score), MIN(score) FROM sc
(3)分类后过滤记录
例检索平均成绩及格的学生所选课程的数量、总分及最高分和最低分。
SELECT sno,COUNT(*) AS num,SUM(score),MAX(score), MIN(score) FROM sc
GROUP BY sno HA VING A VG(score)>=60
eg. 查询每名学生成绩不为空的课程的数量、总分及最高分和最低分。
SELECT sno,COUNT(*) AS num,SUM(score),MAX(score), MIN(score) FROM sc
WHERE score IS NOT NULL GROUP BY sno
5.排序
order by <列> [desc] […]
例检索每名学生所选课程的数量、总分、平均分及最高分和最低分,并按平均分排名次。规定当平均分相等时,最高分高的在前。
SELECT sno,COUNT(*) AS num,SUM(score),A VG(scorE),MAX(score),MIN(score)
FROM sc GROUP BY sno ORDER BY A VG(score) DESC,MAX(score) DESC
注:
·ORDER BY子句可以使用表达式,但不能使用text、image类型的数据。
作业及练习
1.写出SELECT语句的基本格式。
2.试写出SELECT、INTO、FROM、WHERE、GROUP BY、HAVING、ORDER BY子句在SELECT语句中的作用。
3.在SELECT语句中,为字段名指定别名有哪几种形式?在什么情况下需要为字段名指定别名?
4.在SELECT语句中,为表名指定别名有哪两种形式?在什么情况下需要为表名指定别名?
5.试比较WHERE子句与HA VING子句的异同。
6.试说明当SELECT语句中使用GROUP BY子句时,对SELECT子句的要求。