《数据库应用基础第四章数据查询.ppt》由会员分享,可在线阅读,更多相关《数据库应用基础第四章数据查询.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库应用基础第四章数据查询 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望复习题复习题1 表的创建方法2 修改表的SQL语句2 2本章主要内容本章主要内容4.14.1SELECTSELECT语句语句4.24.2带条件的查询带条件的查询4.34.3多表查询多表查询4.44.4UNIONUNION查询查询4.54.5子查询子查询3 3 在了解了表的在了解了表的创建创建和和修改修改之之后,为获取必要信息,还必须对表后,为获取必要信息,还必须对表进行进行查询查询等操作。
2、等操作。查询主要是根据用户提供的限查询主要是根据用户提供的限定条件进行,查询的结果还是一定条件进行,查询的结果还是一张表。张表。4 44.1 SELECT 4.1 SELECT 语句语句 SELECTSELECT ALLALL|DISTINCTDISTINCT select_listINTOINTO new_table_nameFROMFROM table_name,table_name16要查询的字段名,要查询的字段名,可以是从多个表中可以是从多个表中取出来的字段取出来的字段 查询结果查询结果放到新的放到新的临时表中临时表中欲查询数据欲查询数据的表的名称的表的名称 5 5WHEREWHERE
3、 conditionGROUP BYGROUP BY clauseHAVINGHAVING clause依字段依字段类别作类别作总计函总计函数处理数处理 功能同功能同WHEREWHERE,不不同在于可同在于可再次过滤再次过滤WHEREWHERE语句语句查到的结查到的结果果 6 6ORDER BY COMPUTE clause允许用允许用一条一条SELECSELECT T命令命令同时查同时查询数据询数据,并作,并作数据总数据总计动作计动作 7 7例例6-1:查询数据库查询数据库library_db中表中表borrower_infoborrower_info中的所有信息中的所有信息 use lib
4、rary_dbselect*from borrower_info8 8例例6-26-2:查询表查询表book_infobook_info中书的编中书的编号、名称以及该书分类编码在号、名称以及该书分类编码在classclass表中所对应的分类名,并将表中所对应的分类名,并将classclass表表中分类名字段名中分类名字段名namename在查询结果的在查询结果的显示中改为显示中改为classnameclassname,以便于阅读,以便于阅读,本查询要求列出图书编号本查询要求列出图书编号(book_idbook_id)、图书名称)、图书名称(name)(name)以及以及分类名称(表中字段名为分
5、类名称(表中字段名为name,name,在输在输出时改为出时改为classnameclassname)等信息。)等信息。9 9use library_dbselect book_id,a.name,classname=b.namefrom book_info a,class bwhere a.class_id=b.class_id1010例例6-3把图书的价格把图书的价格price进行输出,进行输出,且输出值在原有值的基础上提高且输出值在原有值的基础上提高10%。select book_id,name,price,new_price=price*1.10from library_db.dbo.
6、book_info1111在查询结果中还可以引入某些在查询结果中还可以引入某些函数进行计算,如:函数进行计算,如:SELECT caption=function_name(col_name)1212总计函数有六个,它们分别是:总计函数有六个,它们分别是:SUM():SUM():求总和求总和AVG():AVG():求平均值求平均值MIN():MIN():求最小值求最小值MAX():MAX():求最大值求最大值COUNT():COUNT():传回非传回非NULLNULL值的字段数目值的字段数目COUNT(*):COUNT(*):传回符合查询条件的数目传回符合查询条件的数目 1313例例6-46-4
7、:通过通过count(*)count(*)函数返回每本图函数返回每本图书的借阅次数。书的借阅次数。select book_id,count(*)as select book_id,count(*)as lend_countlend_countfrom lend_listfrom lend_listgroup by(book_id)group by(book_id)order by(lend_count)descorder by(lend_count)desc1414例例6-5:查询查询book_info表中价格字段表中价格字段price中的总价值、最高书价、最低书价、中的总价值、最高书价、最低
8、书价、最高价和最低价的差价。最高价和最低价的差价。select sum=sum(price),max=max(price),min=min(price),sub=max(price)-min(price)from book_info15154.2 带条件的检索带条件的检索 在检索过程中,经常需要在检索过程中,经常需要对数据根据一定的条件进行过对数据根据一定的条件进行过滤,成为带条件的检索滤,成为带条件的检索WHEREHAVINGGROUP BY主要主要子句子句16164.2.1 WHERE 子句 它常它常与与NOTNOT/ANDAND/OROR一起使一起使用用例例6-6:查询满足如下条件的借书
9、查询满足如下条件的借书记录,其中还书日期(字段名为记录,其中还书日期(字段名为back_date)小于)小于2010年年1月月1日,日,而且借阅日期(字段名为而且借阅日期(字段名为lend_date)不小于)不小于2009年年6月月23日,日,或者尚未还书,即还书日期为空。或者尚未还书,即还书日期为空。1717use library_dbselect*from lend_listwhere(back_date=2009-6-23)orback_date is null1818use library_dbselect*from lend_listwhere back_date=2009-6-23
10、orback_date is null)19194.2.2 Where子句中条件的指定子句中条件的指定 SQL_Server SQL_Server 支持的运算符如下:支持的运算符如下:1)1)逻辑运算符:逻辑运算符:AND/OR/NOTAND/OR/NOT2)2)比较符:,比较符:,!,,=,=,=in,not in,any,all in,not in,any,all判断为集合成判断为集合成员否员否 between andbetween and判断满足指定区间判断满足指定区间否否 like like 匹配模式匹配模式 is not null is not null 测试空值测试空值 2020例
11、例6-8 查询查询book_info表的图书名称中表的图书名称中包含包含“网站开发网站开发”字样的书籍,本例字样的书籍,本例牵涉模式匹配。牵涉模式匹配。use library_dbselect namefrom book_infowhere name like%网站开发网站开发%2121关于字符匹配关于字符匹配:匹配任意长度的字符串:匹配任意长度的字符串 _ :只匹配一个字符:只匹配一个字符 _ean:匹配对指定范围:匹配对指定范围(例如例如a-f)或集合或集合(例如例如abcdef)中的中的任何单个字符任何单个字符可以匹配不属于指定范围的可以匹配不属于指定范围的任何单个字符任何单个字符 22
12、22例例6-9 查询表查询表borrower_info中出生日期中出生日期在在1979.6.1到到1980.6.1之间的借阅人的之间的借阅人的编号、姓名以及出生年月。编号、姓名以及出生年月。select id,name,birthdayfrom borrower_infowhere birthday between 1979-6-1 and 1980-6-12323例例6-10:查询数据库查询数据库library_db中中表表lend_list中尚未归还的图书记录,中尚未归还的图书记录,即即back-date字段值为字段值为null的借阅的借阅记录,同时在记录,同时在book_info表中查询
13、表中查询相应的图书名称相应的图书名称,请读者注意对请读者注意对字段为空或非空时的判断时应该字段为空或非空时的判断时应该在在WHEREWHERE子句中使用子句中使用 IS NULLIS NULL 或或 IS NOT NULLIS NOT NULL判断判断 2424use library_dbselect a.book_id,b.name,borrower_id,lend_datefrom lend_list a,book_info bwhere a.book_id=b.book_id and back_date is null2525例例6-11查询数据库查询数据库library_db中表中表c
14、lass中分类编号为中分类编号为1,3和和5的分类名称。的分类名称。使用使用in、any子句用于判定子句用于判定元素是否在集元素是否在集合中合中use library_dbselect namefrom classwhere class_id in(1,3,5)2626例例6-12在数据库在数据库library_db中查询书名包中查询书名包含含“词汇词汇”字样的书籍的编号和剩余库字样的书籍的编号和剩余库存量。根据对表存量。根据对表book_info的查询结果来的查询结果来确定对表确定对表book_state的查询条件。的查询条件。use library_dbselect book_id,lef
15、tnumfrom book_statewhere book_id=(select book_id from book_info where name like%词汇词汇%)2727例例6-13在数据库在数据库library_db中查询表中查询表borrower_info中字段值不在表中字段值不在表lend_list中中borrower_id字段值范围的所有借阅人字段值范围的所有借阅人信息。信息。use library_dbselect*from borrower_infowhere id not in(select borrower_id from lend_list)28284.2.3 Ha
16、ving 子句子句 该子句也能指定查询条件,类似该子句也能指定查询条件,类似where子句子句2929请与请与WHEREWHERE子子句对照句对照例例6-14在数据库在数据库library_db中从表中从表lend_list中查询借阅次数小于等于中查询借阅次数小于等于2次的书籍的编号和借阅次数。次的书籍的编号和借阅次数。select book_id,total=count(*)from lend_listgroup by(book_id)having coun(*)=23030例例6-15查询借阅次数为查询借阅次数为2-3次的书籍的编次的书籍的编号和借阅次数。号和借阅次数。select boo
17、k_id,total=count(*)from lend_listgroup by(book_id)having count(*)between 2 and 331314.2.4 COMPUTECOMPUTE BYBY及及COMPUTECOMPUTE子句子句 COMPUTECOMPUTE BYBY子句可以通过子句可以通过BYBY指定字段进行分组计指定字段进行分组计算,算,COMPUTECOMPUTE子句则计算子句则计算所有的字段值之和所有的字段值之和 例例6-16 查询编号为查询编号为97*的借阅的借阅人并分别计算他们的借书次数,人并分别计算他们的借书次数,最后计算出符合查询条件的总借最后计算
18、出符合查询条件的总借书次数。书次数。3232select borrower_id,book_idfrom lend_listwhere borrower_id like 97%order by borrower_idcompute count(book_id)by borrower_idcompute count(book_id)33334.3 多表查询多表查询 前面介绍的都是从一张表前面介绍的都是从一张表上查询数据,更多的情况是从上查询数据,更多的情况是从多张表中查询数据。多张表中查询数据。例如一个数据库包含例如一个数据库包含学生学生基本信息表基本信息表和和学生成绩信息表学生成绩信息表,若要
19、得知道学生的若要得知道学生的基本信息基本信息和和成绩成绩,那就必须进行,那就必须进行多表查询多表查询 3434例例6-17通过查询通过查询book_info和和lend_list两张表,以获得图书名称包两张表,以获得图书名称包含含“VC”的图书的编号、名称以及的图书的编号、名称以及其在其在2009年的借阅记录。年的借阅记录。SELECTbook_info.book_id,book_info.name,lend_list.borrower_id,lend_list.lend_date,lend_list.back_datefrom book_info,lend_list 3535同名字段加同名字
20、段加表名表名where book_info.name like%VC%and book_info.book_id=lend_list.book_idand datepart(year,lend.lend_date)=2009 3636 该查询由于两张表中该查询由于两张表中出现出现同名同名字段字段book_id,为了区分字段,加上了表为了区分字段,加上了表名,整个查询命令显得十名,整个查询命令显得十分冗长。为了简洁起见,分冗长。为了简洁起见,用户可以采用为表用户可以采用为表指定别指定别名名的方法的方法 37373838不仅可以给不同的表赋以不同的别名,不仅可以给不同的表赋以不同的别名,还可以给还
21、可以给同一张表赋以不同的别名同一张表赋以不同的别名,操作起来就象是在操作操作起来就象是在操作两张表两张表一样一样 39394 4.4 UNION.4 UNION操作操作 通过通过UNIONUNION操作可操作可以把从两个或两个以上以把从两个或两个以上的查询结果合并到一个的查询结果合并到一个结果集中结果集中 4040例例6-196-19从表从表borrowerborrower_info_info和表和表Add_Add_borrowerborrower_info_info中中查询查询idid和和namename信息,并信息,并把查询结果合并在一起把查询结果合并在一起 4141create tabl
22、e add_borrower_info(id int,name nvarchar(6),gender nchar(1)goinsert into add_borrower_infovalues(990356,黄大明黄大明,1)goinsert into add_borrower_infovalues(994427,王小玉王小玉,2)go42424343例例6-206-20创建创建temp_temp_borrowerborrower_info_info表,表,把把borrowerborrower_info_info及及Add_Add_borrower_info_info表中的表中的idid和和n
23、amename字字段的内容复制到段的内容复制到temp_temp_borrower_info_info表中,同时创建临时字段表中,同时创建临时字段tpColumntpColumn,值为值为TempTempselect id,name,tpcolumn=Temp into temp_borrower_info from borrower_infounionselect id,name,tpcolumn=Temp from add_borrower_info444445454.5子查询子查询 通过通过子查询子查询获得表获得表AddAdd_ _borrowerborrower_ _infoinfo的
24、信息,并根据子查询的结果的信息,并根据子查询的结果更新表更新表temp_temp_borrowerborrower_ _infoinfo中的字段中的字段tpColumntpColumn数据数据 可在可在INSERTINSERT、SELECTSELECT、UPDATEUPDATE、DELETEDELETE等处等处嵌套嵌套SELECTSELECT查询子句查询子句 4646update temp_borrower_infoset tpcolumn=newwhere idin(select id from add_borrower_info)最后两行最后两行是执行是执行UpdateUpdate语语句后新增句后新增加的两条加的两条记录记录 4747例例6-22通过通过EXISTSEXISTS子句指定条件子句指定条件查询表查询表temp_temp_borrowerborrower_info_info中中namename的的信息信息 select distinct name from temp_borrower_infowhere exists(select*from add_borrower_info where gender like 2and id like 98%)4848