数据库数据查询应用实践资料大全

上传人:luobi****88888 文档编号:92925480 上传时间:2019-07-14 格式:PPT 页数:65 大小:922KB
返回 下载 相关 举报
数据库数据查询应用实践资料大全_第1页
第1页 / 共65页
数据库数据查询应用实践资料大全_第2页
第2页 / 共65页
数据库数据查询应用实践资料大全_第3页
第3页 / 共65页
数据库数据查询应用实践资料大全_第4页
第4页 / 共65页
数据库数据查询应用实践资料大全_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《数据库数据查询应用实践资料大全》由会员分享,可在线阅读,更多相关《数据库数据查询应用实践资料大全(65页珍藏版)》请在金锄头文库上搜索。

1、1,第五章 数据库数据查询应用实践(1),2,内 容,Select语句 上机实验,3,在SQL Server中,对数据库的查询使用SELECT语句。SELECT语句功能非常强大,使用灵活,可以对图书管理数据库进行各类查询。,图书管理数据库查询,4,在进行一些简单的查询操作时,经常需要从单个表中提取数据。 【情景1】从图书管理数据库MBOOK中查询出所有读者的信息。 在“SQL Server Management Studio”中单击“新建查询”按钮新建一个查询窗口,在窗口中输入如下语句: USE MBOOK GO SELECT * FROM TReader,从单个表中查询数据,5,执行完以上语

2、句后,“SQL Server Management Studio”的结果窗口中将显示TReader表中的所有读者信息,如图5.1所示。,图5.1 查询所有读者的信息,从单个表中查询数据,6,说明:在以上SQL语句中,通过SELECT关键字选择列,“*”表示查询一个表或视图中的所有列。FROM子句用于指定要查询的对象,这里是从表TReader中查询。 【情景2】查询姓名为“王林”的读者的借书证号、专业和借书量。 新建一个查询窗口,输入并执行以下语句: SELECT 借书证号, 专业, 借书量 FROM TReader WHERE 姓名=王林 执行结果如下所示:,说明:在以上语句中,SELECT关

3、键字后列出了要查询的列,使用WHERE子句指定要查询的条件。,从单个表中查询数据,7,【情景3】计算“SQL Server实用教程(第3版)”借出多少本。 SELECT 复本量-库存量 FROM TBook WHERE 书名= SQL Server实用教程(第3版) 执行结果如下所示:,从单个表中查询数据,8,【情景4】模糊查询书名中有“SQL Sever”字样的图书的书名、作译者和出版社。查询结果中将这三列的标题更改为BookName、Author和Press。 SELECT 书名 AS BookName, 作译者 AS Author, 出版社 AS Press FROM TBook WHE

4、RE 书名 LIKE %SQL Server% 执行结果如下所示:,从单个表中查询数据,9,【情景5】查询电子工业出版社出版的作者为郑阿奇的图书信息。 SELECT * FROM TBook WHERE 出版社=电子工业出版社 AND 作译者=郑阿奇 执行结果如下所示:,从单个表中查询数据,10,【情景6】查询TReader表中第6到10行的读者记录。 SELECT TOP 5 * FROM TReader WHERE 借书证号 NOT IN ( SELECT TOP 5 借书证号 FROM TReader ) 执行结果如下所示:,从单个表中查询数据,11,【情景1】查找读者“081101”对

5、“SQL Server实用教程(第3版)”的借书记录。 SELECT TLend.借书证号, TLend.ISBN, 图书ID, 借书时间, 应还时间 FROM TLend, TBook WHERE TLend.ISBN= TBook.ISBN AND TLend.借书证号=081101 AND TBook.书名=SQL Server实用教程(第3版),说明:要查找081101的借书记录,首先需要根据书名从TBook表中查找图书的ISBN,再根据ISBN和借书证号在TLend表中查找该借书记录。所以以上语句在FROM子句中指定了两个表TLend和TBook,由于在两个表中都有ISBN字段,所以

6、在指定时,需要在字段名之前加上表名以示区别。,从多个表中查询数据,12,通过子查询也可以实现以上功能: SELECT * FROM TLend WHERE 借书证号=081101 AND ISBN IN ( SELECT ISBN FROM TBook WHERE 书名=SQL Server实用教程(第3版) ),从多个表中查询数据,13,【情景2】查找出还书时借书已经超过5天的读者姓名。 SELECT DISTINCT 姓名 FROM TReader JOIN HLend ON TReader.借书证号=HLend.借书证号 WHERE (HLend.还书时间-HLend.借书时间)5 执行

7、结果如下所示:,说明:读者的姓名只在TReader表中存储,所以只能从TReader表中查找姓名。但是还书记录只有在还书记录表HLend中查询,所以以上语句中使用了JOIN关键字连接了TReader表和HLend表,ON子句用于指定连接的条件,即两个表的借书证号要相等。在WHERE子句中指定了要查询还书时间和借书时间差大于5的记录。,从多个表中查询数据,14,SELECT DISTINCT 姓名 FROM TReader , HLend where TReader.借书证号=HLend.借书证号 and (HLend.还书时间-HLend.借书时间)5,15,在对图书管理数据库的数据进行检索时

8、,经常需要对结果进行汇总或计算,例如,求图书的总库存量、统计读者的总数等。 【情景1】查询图书管理数据库中读者的总数。 USE MBOOK GO SELECT COUNT(*) AS 读者总数 FROM TReader 执行结果如下所示:,数据汇总,16,【情景2】统计图书管理数据库中男女生的人数。 SELECT 性别, COUNT(性别) AS 人数 FROM TReader GROUP BY 性别,说明:以上语句中使用GROUP BY子句对性别进行分组,将性别读者分为0和1两组,再使用COUNT函数统计每组的人数。,数据汇总,17,【情景3】从借阅表TLend中查找借书大于等于2本且借书时

9、间早于2009年9月23日的读者的借书证号。 SELECT 借书证号 FROM TLend WHERE 借书时间=2,说明:以上语句中使用GROUP BY子句对TLend表中“借书时间2009-09-23”的记录根据借书证号进行分组,再使用HAVING子句筛选出有相同借书证号的记录数大于2的记录。,数据汇总,18,有时需要将查询出的记录按照指定的顺序进行排序。 【情景1】将计算机专业的读者信息按照出生时间升序排列。 SELECT * FROM TReader WHERE 专业=计算机 ORDER BY 出生时间 ASC,说明:在以上语句中,使用ORDER BY子句将所得记录按照出生时间排列,关

10、键字ASC表示升序。,排序,19,【情景2】将图书管理数据库中的图书信息按照出版年月降序排列。 SELECT ISBN, 书名, 作译者, 出版社, 出版年月, 价格 FROM TBook ORDER BY 出版年月 DESC,排序,20,通过T-SQL的SELECT语句可以从表或视图中迅速方便地检索数据,可以实现对表的选择、投影及连接操作,其功能十分强大。语法格式如下: SELECT ALL | DISTINCT TOP expression PERCENT WITH TIES /*指定要选择的列及其限定*/ INTO /*INTO子句,指定结果存入新表*/ FROM /*FROM子句,指定

11、表或视图*/ WHERE /*WHERE子句,指定查询条件*/ GROUP BY /*GROUP BY子句,指定分组表达式*/ HAVING /*HAVING子句,指定分组统计条件*/ ORDER BY ASC | DESC /*ORDER子句,指定排序表达式和顺序*/,说明: 所有被使用的子句必须按语法说明中显示的顺序严格地排序。例如,一个HAVING子句必须位于GROUP BY子句之后,并位于ORDER BY子句之前。 SELECT语句返回一个表的结果集,通常该结果集被称为表值表达式。,Select 语句,21,通过SELECT语句中SELECT关键字后面的“”项组成结果表的列。语法格式:

12、 := * /*选择当前表或视图的所有列*/ | .* /*选择指定的表或视图的所有列*/ | , . /*选择指定的列*/ | AS /*AS子句,定义列别名*/ | = /*选择指定列并更改列标题*/ ,.n ,选择列,22,1选择所有列 使用“*”表示选择一个表或视图中的所有列。 【强化练习】查询学生管理数据库PXSCJ中XSB表的所有的学生数据。 USE PXSCJ GO SELECT * FROM XSB 2选择一个表中指定的列 使用SELECT语句选择一个表中的某些列,各列名之间要以逗号分隔。 【强化练习】查询PXSCJ数据库的XSB表中所有学生的学号、姓名和总学分。 SELECT

13、 XM, ZY, ZXF FROM XSB 3定义列别名 当希望查询结果中的某些列或所有列显示时使用自己选择的列标题时,可以在列名之后使用AS子句定义一个列别名来更改查询结果的列标题名。,选择列,23,【强化练习】查询XSB表中计算机系同学的XH(学号)、XM(姓名)和ZXF(总学分),结果中各列的标题分别指定为学号、姓名和总学分。 SELECT XH AS 学号, XM AS 姓名, ZXF AS 总学分 FROM XSB WHERE ZY= 计算机 更改查询结果中的列标题也可以使用“=”的形式。例如: SELECT 学号=XH, 姓名=XM, 总学分=ZXF FROM XSB WHERE

14、ZY= 计算机 该语句的执行结果与上例的结果完全相同。 当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如: SELECT Student number = XH, XM AS Student name, mark =ZXF FROM XSB WHERE ZY= 计算机 说明:不允许在WHERE子句中使用列别名。这是因为,执行WHERE代码时,可能尚未确定列值。,选择列,24,4替换查询结果中的数据 在对表进行查询时,有时对所查询的某些列希望得到的是一种概念而不是具体的数据。 要替换查询结果中的数据,则要使用查询中的CASE表达式,格式为 CASE WHEN 条件1 THEN 表达式

15、1 WHEN 条件2 THEN 表达式2 ELSE 表达式 END,选择列,25,【强化练习】查询XSB表中计算机系各同学的XH(学号)、XM(姓名)和ZXF(总学分),对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于50,替换为“不及格”;若总学分在50与52之间,替换为“合格”;若总学分大于52,替换为“优秀”。列标题更改为“等级”。 SELECT XH AS 学号, XM AS 姓名, 等级= CASE WHEN ZXF IS NULL THEN 尚未选课 WHEN ZXF =50 and ZXF=52 THEN 合格 ELSE 优秀 END FROM XS

16、B WHERE ZY= 计算机 GO,选择列,26,执行结果如下所示:,选择列,27,5计算列值 使用SELECT对列进行查询时,在结果中可以输出对列值计算后的值,即SELECT子句可使用表达式作为结果。 【强化练习】按120分计算成绩显示学号为081101的学生的成绩情况。 SELECT XH AS 学号, KCH AS 课程号, 成绩120=CJ*1.20 FROM CJB WHERE XH= 081101 执行结果如下所示:,选择列,28,6消除结果集中的重复行 在只选择表中某些列时,可能会出现重复行。例如,对PXSCJ数据库的XSB表只选择ZY(专业)和ZXF(总学分),则出现多行重复的情况。可以使用DISTINCT关键字消除结果集中的重复行,其格式是 SELECT

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号