第6章 数据库查询综述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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子句的要求。

相关文档
最新文档