4.1查询的实质及简单查询 课件(共35张PPT)《网站数据库应用技术-SQL Server2005》同步教学(机械工业出版社)

资源下载
  1. 二一教育资源

4.1查询的实质及简单查询 课件(共35张PPT)《网站数据库应用技术-SQL Server2005》同步教学(机械工业出版社)

资源简介

(共35张PPT)
4.1查询的实质及简单查询
学习要点
简单查询
联接查询
子查询
联合查询
引入
简单查询
选择列
选择行
查询结果排序
查询结果分组
学习要点
选择列
所有列
指定列
计算列
使用别名
简单查询
引入
查询概述:
查询的实质:
SQL的查询语句从数据库中检索记录形成记录集合,并存入新的记录集对象中
查询语句并不会改变数据库中的数据
SQL查询的基本语句格式
SELECT [ALL|DISTINCT]〈目标列表达式〉[,〈目标列表达式〉]
FROM 〈表名或视图名〉[,〈表名或视图名〉]
[WHERE 〈条件表达式〉]
[GROUP BY 〈列名1〉
[HAVING 〈条件表达式〉]]
[ORDER BY 〈列名2〉 [ASC | DESC];
学习要点
选择列
选择所有列(全表查询)
【例4-1】查询全体学生的详细信息
返回结果如下:
SELECT *
FROM Information;
选择列
选择列
选择指定列:
【例4-2】查询全体学生的学号、姓名和性别
返回结果如下:
SELECT S_no,S_name,S_sex
FROM Information
此顺序可更改
SELECT S_name,S_no,S_class
FROM Information
选择列
选择列
计算列:
【例4-4】查询全体学生的姓名及其年龄
返回结果如下:
SELECT S_no,S_name,year(getdate())-Year(s_birth)
FROM Information
学生的出生年份
学生的年龄
计算机当前的年份
选择列
选择列
使用别名
【例4-5】查询全体学生的学号、姓名和年龄,同时以汉字标题来表示学号、姓名和年龄。
返回结果如下:
SELECT S_no 学号,S_name 姓名
FROM Information
S_no as 学号
“学号”=S_no
此写法可变化
OR
选择列
选择行
满足条件的行
消除重复取值行
前N行
简单查询
选择行
选择满足条件的行(where子句)
简单条件查询
复合条件查询
指定范围查询
指定集合查询
字符匹配
涉及空值的查询
选择行
选择行
简单条件查询
【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息
返回结果如下:
满足条件的行
SELECT *
FROM Information
WHERE S_address = ‘湖南株洲’
选择行
复合条件查询(and)
【例4-7】查询学号为’20021003010’考试成绩80分以上的学生学号、课程号、学期和成绩并显示汉字标题
返回结果如下:
SELECT S_no 学号,C_no 课程号,semester 学期,grade 成绩
FROM score
WHERE s_no='20021003010' AND grade>=80
AND和OR可用来联结多个查询条件
>or
选择行
复合条件查询(or)
【例4-8】 查询“信息021”班男学生的S_no(学号)和S_name(姓名)
返回结果如下:
SELECT S_no,S_name
FROM Information
WHERE S_class='信息021' OR S_sex='男' AND S_address='湖南株洲'
AND优先于OR
满足条件的行>and
选择行
指定范围查询(between……and)
【例4-9】查询年龄在18至22岁之间的学生的
S_name(姓名)、S_class(班级)、和Nl(年龄)
返回结果如下:
Not between……and
SELECT S_name,S_class,Year(GetDate())-Year(s_birth) Nl
FROM Information
WHERE Year(GetDate())-Year(s_birth) BETWEEN 18 AND 22
选择行
指定范围查询(not between……and)
【例4-9】查询年龄不在18至22岁之间的学生的
S_name(姓名)、S_class(班级)、和Nl(年龄)
返回结果如下:
满足条件的行> between……and
SELECT S_name,S_class,Year(GetDate())-Year(s_birth) Nl
FROM Information
WHERE Year(GetDate())-Year(s_birth) NOT BETWEEN 18 AND 22
选择行
指定集合查询(IN)
【例4-11】查询家庭地址为“湖南株洲”和“湖南长沙”班学生的详细信息
返回结果如下:
NOT IN
SELECT *
FROM Information
WHERE S_address IN (‘湖南株洲’,‘湖南长沙’)
选择行
指定集合查询(NOT IN)
【例4-11】查询家庭地址不是“湖南株洲”和“湖南长沙”班学生的详细信息
返回结果如下:
满足条件的行>IN
SELECT *
FROM Information
WHERE S_address NOT IN (‘湖南株洲’,‘湖南长沙’)
选择行
字符匹配
谓词LIKE可以用来进行字符串的匹配。
其一般语句格式如下 :
语句含义:
查找指定的属性列值与〈匹配串〉相匹配的记录。
〈匹配串〉可以是一个完整的字符串,也可以含有通配符“%”和“_”
%:代表任意长度(长度可以为0)的字符串
_:代表任意单个字符
示例
满足条件的行
[NOT] LIKE ‘〈匹配串〉‘ [ESCAPE ‘〈换码字符〉‘]
选择行
字符匹配(示例)
【例4-13】查询所有姓刘的学生的详细信息
返回结果如下:
字符匹配>例4-13、例4-14、例4-15、例4-16
SELECT *
FROM Information
WHERE S_name LIKE '刘%'
选择行
字符匹配(示例)
【例4-14】查询姓“谭”且全名为两个汉字的学生的S_no(学号)和S_name(姓名)
返回结果如下:
SELECT S_no,S_name
FROM Information
WHERE S_name LIKE '谭_'
字符匹配>例4-13、例4-14、例4-15、例4-16
选择行
字符匹配(示例)
【例4-15】查询名字中第二字为“桂”字的学生的S_no(学号)和S_name(姓名)
返回结果如下:
SELECT S_no,S_name
FROM Information
WHERE S_name LIKE '_桂%'
字符匹配>例4-13、例4-14、例4-15、例4-16
选择行
字符匹配(示例)
【例4-16】查询Visual_Basic课程的课程号和学分
SELECT C_no,C_credit
FROM Course
WHERE C_name LIKE ‘Visual\_Basic’ ESCAPE ‘\’
字符匹配>例4-13、例4-14、例4-15、例4-16
Escape\’表将’\’后的‘_’符号转为普通符号
选择行
涉及空值的查询
【例4-17】查一下缺少成绩的学生的学号和相应的课程号
返回结果:
样例数据库中不存在这种条件记录,因此没有满足条件的记录被查询到
满足条件的行
SELECT S_no,C_no
FROM Score
WHERE grade IS NULL
选择行
简单条件查询
【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息
返回结果如下:
满足条件的行
SELECT *
FROM Information
WHERE S_address = ‘湖南株洲’
选择行
简单条件查询
【例4-6】查询家庭地址为“湖南株洲”的学生的所有信息
返回结果如下:
满足条件的行
SELECT *
FROM Information
WHERE S_address = ‘湖南株洲’
选择行
消除重复取值行
【例4-18】查询所有选修过课程的学生的学号
返回结果如下:
SELECT S_no
FROM Score
存在许多重复行
SELECT DISTINCT S_no
FROM Score
改为
选择行
选择行
前N行
【例4-19】查询课程号为“1003c#_w”的成绩为前三名的学生的学号和成绩。
返回结果如下:
SELECT top 3 S_no,grade
FROM Score
WHERE c_no='1003c#_w'
选择行
查询结果排序
两种排序情况
指定结果显示顺序
使用 ORDER BY 子句 指定
升序(ASC)
降序(DESC)
示例(2个)
未指定结果显示顺序
以记录在表中的先后顺序 (物理顺序)为排序依据
缺省值
简单查询
示例【例4-20】
【例4-20】查询选修了“1003c#_w”课程的学生的学号及其成绩,查询结果按分数的降序排列 。
返回结果如下:
【例4-20】 【例4-21】
查询结果排序
SELECT S_no,Grade
FROM Score
WHERE C_no=‘1003c#_w’
ORDER BY Grade DESC
以Grade值 降序显示
示例【例4-21】
【例4-21】查询全体学生的S_no(学号)、S_name(姓名)、S_birth(出生年月)和S_class(班级),查询结果按班级名称降序排列,对同一班级中的学生按年龄降序排列。
查询结果排序> 【例4-20】 、【例4-21】
查询结果排序
SELECT S_no, S_name, Year(GetDate())-Year(s_birth) Nl, S_class
FROM Information
ORDER BY S_class DESC, S_birth
先以S_class降序排列,如果s_class值相同,则参考s_birth的值
查询结果分组
分组实质:
GROUP BY子句可以将查询结果表的各行按一列或多列取值相等的原则进行分组
且每一组都有一个函数值
示例(2个)
简单查询
示例【例4-22】
【例4-22】查询每门课程与相应的选修人数。
返回结果如下:
【例4-22】 【例4-23】
查询结果分组
SELECT C_no 课程号, COUNT(S_no) 选修人数
FROM Score
GROUP BY C_no
示例【例4-23】
【例4-23】查询’ 20021003’班各门课程最高成绩,并显示最高成绩大于80的课程号和最高成绩。
返回结果如下:
查询结果分组>【例4-22】 【例4-23】
查询结果分组
SELECT C_no 课程号,MAX(Grade) 最高成绩
FROM Score
WHERE LEFT(S_no,8)='20021003'
GROUP BY C_no
HAVING(MAX(Grade)>0)
用having短语指定筛选条件
感谢聆听

展开更多......

收起↑

资源预览