DQL数据查询习题与知识总结Word格式文档下载.docx

上传人:b****6 文档编号:19397636 上传时间:2023-01-05 格式:DOCX 页数:30 大小:45.18KB
下载 相关 举报
DQL数据查询习题与知识总结Word格式文档下载.docx_第1页
第1页 / 共30页
DQL数据查询习题与知识总结Word格式文档下载.docx_第2页
第2页 / 共30页
DQL数据查询习题与知识总结Word格式文档下载.docx_第3页
第3页 / 共30页
DQL数据查询习题与知识总结Word格式文档下载.docx_第4页
第4页 / 共30页
DQL数据查询习题与知识总结Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

DQL数据查询习题与知识总结Word格式文档下载.docx

《DQL数据查询习题与知识总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DQL数据查询习题与知识总结Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

DQL数据查询习题与知识总结Word格式文档下载.docx

31.查询查询售价最高的图书的名称

32.查询售价比平均售价高的图书的名称

33.查询与“数据库原理”在同一出版社的图书信息

34.查询王旭所借图书的图书编号

35.查询“王旭”所借的图书的名称

36.查询价格最低的图书信息

37.查询书价最高的图书的信息

38.查询已经借阅了图书的读者的姓名

39.已经被借出的图书的信息

40.查询2005年1月20日所借出的图书的信息

41.查询每个读者所借的图书的信息,要求显示读者姓名,图书名称,借出日期

42.查询’王旭’所借图书的书名

43.显示所有读者的借阅情况(包括没借书的读者),显示读者编号,读者姓名,图书编号

44.显示所有读者的借阅情况(包括没借书的读者和没被借的图书),显示读者编号、读者姓名、图书编号、书名和借阅日期。

45.所有图书的价格打8折

46.所有“清华大学出版社”的图书加价15%

47.将王旭所借图书的日期更改为2009-5-1

48.创建一个新表‘清华大学出版图书表’并将清华大学出版社出版的图书添加到此表中。

49.删除王旭的借阅纪录

50.删除价格大于100元的图书

51.删除Book表中的全部数据

52.并查询:

查询清华大学出版社出版的和价格高于25的图书信息。

53.查询出版图书平均价格多余25元的出版社

54.查询出版社之间最低的平均价格

数据查询练习题:

一、针对列名列表:

5.查询全体学生的学号与姓名

6.查询全体学生的姓名、学号、所在系

7.查询全体学生的详细记录

8.查询全体学生的姓名及出生年份

9.查询全体学生的姓名、出生年份、所在系,且要求用小写字母表示所有系名

selectsname,’yearofbirth’,2005-sage,islower(sdept)fromstudent

selectsnameNAME,‘yearofbirth’,BIRTH,2005-sageBIRTHDAY,islower(sdept)DEPARTMENTfromstudent

6.(消除重复行)查询选修了课程的学生学号

二、针对Where子句

7.查询计算机系所有学生

8.查询所有年龄在20岁以下的学生姓名及其年龄

9.查询考试成绩不及格的学生学号

10.查询年龄在20-23岁之间的学生的姓名、年龄和系别

11.查询年龄不在20-23岁之间的学生姓名、年龄和系别

12.查询信息系、数学系和计算机系的学生的姓名和性别

13.查询既不是信息系、数学系,也不是计算机系的学生的姓名和性别

14.查询学号为95001的学生的详细情况(可用like做)

15.查询所有姓刘的学生的姓名、学号和性别

16.查询姓李且全名为三个汉字的学生的姓名

17.查询名字中第二个字为阳字的学生的姓名和学号

18.查询所有不姓刘的学生姓名

19.查询DB_Design课程的课程号和学分

selectCno,CcreditfromCoursewhereCnamelike‘DB\_Design’ESCAPE’\’

20.查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况

select*fromcoursewhereCnamelike‘DB\_%i__’ESCAPE’\’

21.查询缺少成绩的学生的学号和相应的课程号

22.查询所有有成绩的学生的学号和课程号

23.查询计算机系年龄20岁以下的学生姓名

三、排序子句

24.查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列。

25.查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

四、集函数

26.查询学生的总人数

27.查询选修了课程的学生人数

28.计算1号课程的学生平均成绩

29.查询选修1号课程的学生最高分数和最低分数。

 

五、分组子句

15.查询清华大学出版社出版的书的平均价格

16.查询每个出版社的平均价格

30.求各个课程号及相应的选课人数。

31.查询每名学生的选课门数和平均成绩。

32.查询选修了3门以上课程的学生学号。

33.查询选课门数等于或大于4门的学生的平均成绩和选课门数

六、多表连接查询

34.查询每个学生及其选修课程的情况

35.去掉重复列

36.查询选修2号课程且成绩在90分以上的所有学生

37.查询每个学生的学号、姓名、选修的课程及成绩

38.查询计算机系学生的选课情况,要求列出学生的名字、所修课的课程号和成绩

selectstudent.sno,cno,gradefromstudentjoinsconstudent.sno=sc.sno

wheresdept=’计算机系’

39.查询信息系选修VB课程的学生的成绩,要求列出学生姓名、课程号和成绩

selectsname,o,gradefromstudentsjoinscons.sno=sc.snojoincoursecono=owheresdept=’信息系’andcname=’VB’

40.查询所有选修了VB课程的学生的情况,要求列出学生姓名和所在的系

selectsname,sdeptfromstudentsjoinscons.sno=sc.snojoincoursecono=owherecname=’VB’

41.(自连接)查询与刘晨在同一系学习的学生的姓名和所在的系

selects2.sname,s2.sdeptfromstudents1joinstudents2ons1.sdept=s2.sdeptwheres1.sname=’刘晨’ands2.sname!

=’刘晨’

42.(外连接)查询学生的选课情况,包括选修课程的学生和没有选修课程的学生

selectstudent.sno,sname,cno,gradefromstudentleftjoinsconstudent.sno=sc.sno

43.(左外连接)显示20岁学生的基本信息和选课信息(课程名,分数)

七、子查询

43.(基于集合的测试)查询与刘晨在同一系的学生

selectsno,sname,sdeptfromstudentwheresdeptin

(selectsdeptfromstudentwheresname=’刘晨’)

44.查询成绩大于90分的学生的学号和姓名。

Selectsno,snameformstudentwheresnoin

(selectsnofromscwheregrade>

90)

45.查询选修了“数据库基础”课程的学生的学号和姓名

selectsno,snameformstudentwheresnoin

(selectsnofromscwherecnoin

(selectcnofromcoursewherecname=’数据库基础’))

或:

selectstudent.sno,snamefromstudentjoinsconstudent.sno=sc.snojoincourseono=owherecname=’数据库基础’

46.(使用子查询进行比较测试)查询选修了课程‘C02’且成绩高于此课程的平均成绩的学生的学号和成绩

selectsno,gradefromscwherecno=’c02’andgrade>

(selectavg(grade)fromscwherecno=’c02’)

47.(使用子查询进行存在性测试)查询选修了课程“C01”的学生姓名

selectsnamefromstudent

whereexists

(select*fromscwheresno=student.snoandcno=’c01’)

selectsnamefromstudentjoinsconsc.sno=student.sno

wherecno=’c01’

48.查询没有选修课程‘c01‘的学生姓名和所在系

selectsname,sdeptfromstudent

wherenotexists

综合练习

1.查询成绩在70-80分之间的学生的学号、课程号和成绩

2.查询计算机系年龄在18-20之间且性别为“男”的学生的姓名和年龄

3.查询课程号为“c01”的课程的最高分数

4.查询计算机系学生的最大年龄和最小年龄

5.统计每个系的学生人数

6.统计每门课程的选课人数和考试最高分

7.统计每个学生的选课门数和考试总成绩,并按选课门数的升序显示结果。

8.查询总成绩超过200分的学生,要求列出学号、总成绩

9.查询选修了课程“c02”的学生的姓名和所在系

10.查询成绩在80分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果

11.查询哪些课程没有人选修,要求列出课程号和课程名

12.查询选修了课程“c01”的学生的姓名和所在系

13.查询数学系成绩在80分以上的学生的学号、姓名

14.查询计算机系考试成绩最高的学生的姓名

15.查询成绩是95分的学生姓名

16.查询图书价格最低的书名

17.求选修“c02”课程分数比该门课平均分高的学生姓名

18.查询选修了“数据库基础”的学生姓名

19.查询平均价格高于“机械工业出版社”书的平均价格的出版社信息

selectpublishfrombookgroupbypublishhavingavg(price)>

(selectavg(price)frombookwherepublish=’机械工业出版社’)

20.查询所有不及格科目的学生姓名

selectsnamefromstudentwheresnoin(selectsnofromscwheregrade<

60

groupbysnohavingcount(cno)>

=1)

21.查询只有一科不及格的学生姓名

selectsnamefromstudentwheresnoin(selectsnofromscwheregrade<

60groupbysnohavingcount(cno)=1)

22.求比计算机系所有学生年龄都大的数学系学生的姓名

23.求平均分最高的学生姓名

24.显示学生的基本信息和选课信息(其中包括没有选课的学生)。

25.显示20岁学生的基本信息和选课信息(课程名和分数),若没有选课,也要将基本信息显示出来

…………………………………………………………………………………………………

数据查询语句:

select

[distinct

]列名列表from表名

where条件

groupby字段

having条件

orderby字段

1、选择表中的若干列——针对列名列表

①选择表中若干列:

列名列表为表中部分列名

②查询全部列:

列名列表为表中全部列或*代替

③查询计算的列:

常量值、计算所得列,

如:

selectsname,’Yearofbirth’,2005-sagefromstudent

④给列起别名:

列名|表达式[as]列标题(其中|表示或者)

2、选择表中的若干元组——针对distinct子句和where子句

(1)distinct:

消除查询结果集中的重复行(整行相同,并非某几个字段相同);

(2)where子句:

查询满足条件的元组,其中条件有如下几种情况:

1比较大小:

列名比较运算符(包括=、>

、>

=、<

、<

>

或!

=)常量值或表达式

※注意:

在SQL语句中,不仅数值类型的数据可以比较大小,字符串和日期时间类型的数据同样可以比较大小。

字符串数据是按照字典顺序进行排序比较的(汉字则按照汉字的中文拼音的字典顺序进行比较);

而日期时间类型是越晚的日期越大。

②确定范围:

列名between…and…或列名notbetween…and…

③确定集合:

列名in(值的集合)或列名notin(值的集合)

④字符匹配:

列名like匹配的字符串或列名notlike匹配的字符串

其中匹配的字符串中可含有如下通配符:

_:

匹配任意一个字符;

%:

匹配0个或任意多个字符;

ESCAPE‘\’:

表示换码字符。

例:

wherecnamelike‘DB\_%i__’ESCAPE‘\’

[]:

指定范围或集合中的任何单个字符;

例:

[abc]或[a-z]

[^]:

不属于指定范围或集合中的任何单个字符;

⑤空值查询:

列名isNULL或列名isnotNULL;

⑥多重条件查询:

and和or,and表示只有在全部满足所有的条件时结果才为true,or表示只要满足其中一个条件结果即为true;

3、对查询结果进行排序——orderby子句

orderby字段1ASC|DESC,字段2ASC|DESC,……(其中|表示或者)

表示先按照字段1进行排序,字段1相同的元组再按照字段2进行排序,依此类推……

(注:

对于空值,若按升序排,含空值的元组将最先显示。

若按降序排,空值的元组将最后显示。

4、使用计算函数汇总数据

计算函数有:

①count(*):

统计表中所有元组个数(包括值为NULL的行);

②count(列名):

统计本列列值不为NULL的元组个数;

③sum(列名):

计算列值总和;

④avg(列名):

计算列值平均值;

⑤max(列名):

求列值最大值;

⑥min(列名):

求列值最小值;

注:

(1)计算函数又称聚集函数(集函数,列函数),它们是对某一列的值进行统计,返回一个统计值。

(2)count(*)函数之外,空值Null不参与集函数。

(3)函数中的列名前可加distinct关键字,表示统计时先根据该列distinct(消除重复行),再统计其值;

如下例:

selectcount(distinctpublish)frombook;

--查询共有多少个出版社

5、对查询结果进行分组计算——groupby子句和having子句

groupby子句:

1groupby后出现的字段是分组的依据,该字段值相等的记录作为一组。

先执行groupby,再执行select

②分组与集函数通常配合使用,集函数是针对每个组内的数据进行统计,单独用集函数表示将整张表作为一大组。

③若使用了groupby分组,则在select子句中出现的列名,要么出现在groupby子句中,要么被集函数所引用。

④若未使用列函数,而只进行分组,则相当于消除重复行(distinct)

having子句:

对分组后的结果再进行过滤,通常与集函数一起使用,与where条件的区别如下:

where条件:

对原始表格中每一行进行判断,不可使用列函数;

having条件:

对分组查询后的结果进行筛选(常使用列函数),有having子句,则必有groupby子句;

6、子查询:

一个select…from…句子称为一个查询块;

在where子句和having子句的条件中可以出现查询块。

这种插入到where或having子句中的查询块称为子查询,而其外面的查询就是主查询。

首先确定哪个为子查询;

注意内外的字段一定要对应上,要求必须是相关字段;

第一种讲解:

相等的情况:

“=”一般可以用in代替,当子查询返回的是值的集合时,必须用in;

不等的情况:

“<

”一般用notin代替;

大小比较的情况:

“>

=”,如果子查询返回的是值的集合时,后加

all——表示所有

any|some——表示其中任意一个

第二种讲解:

子查询返回一个值时:

=、>

符号直接比较;

子查询返回多个值时:

=换为in;

<

换为notin;

=后加all或any。

EXISTS(子查询):

判断是否存在结果,当子查询存在结果时,EXISTS(子查询)返回值为true,否则返回值为false。

………………………………………………………………………………………………

7、多表连接查询:

在非ANSI标准的实现中,连接操作是在where子句中执行的(即在where子句指定多表连接条件),称为theta连接;

在ANSISQL-92和99中,连接是在JOIN子句中执行的,称为ANSI连接。

(1)若一个查询涉及到两个或两个以上的表,则称之为多表连接查询;

(2)多表连接的原则:

相连接的多个表必须有内部联系,即要有相关字段;

若有n张表参与连接,则必须有n-1个连接条件,即有相关字段,字段名可不同,但字段含义必须相同

(3)包括两种连接方式:

内连接和外连接,内连接包括等值连接与非等值连接;

外连接包括做外连接、右外连接、全外连接。

◆内连接——将两张表中满足条件的元组连接作为结果输出

select……from表1,表2where连接条件()

select……from表1[inner]join表2on连接条件

连接条件一般格式为:

表1.字段1比较运算符表2.字段2

其中:

比较运算符是“=”时,称为等值连接;

否则称为非等值连接;

可以为表起别名:

原表名as表别名,之后使用原表名之处都可以用其别名代替。

自连接:

连接的两张表为同一张表。

此时必须为两张表起别名。

●WHERE用来过滤数据行,也可以定义连接条件。

只有满足WHERE条件的数据才会返回。

●ON用于定义连接条件。

它们将数据行分为两类:

要连接的和不连接的,而不是从结果集中排除数据。

◆外连接:

只限制其中一张表中的数据必须满足连接条件,而另一张表不需满足条件。

(1)左外连接:

AleftouterjoinBon连接条件

含义:

表A的记录全部显示,表B中能够和表A的记录匹配上的,就显示对应的记录,不能匹配上的,就显示空值NULL;

(2)右外连接:

ArightouterjoinBon连接条件(了解)

含义:

表B的记录全部显示,表A中能够和表B的记录匹配上的,就显示对应的记录,不能匹配上的,就显示空值NULL;

(3)全外连接:

AfullouterjoinBon连接条件(了解)

表A、B的记录全部都显示,表A中能够和表B中的元组匹配上的,就显示对应的记录,不能匹配上的,就显示空值NULL,反之,表B中能够和表A中的元组匹配上的,就显示对应的记录,不能匹配上的,就显示空值NULL。

多表连接与子查询的关系。

(1)一般情况下可以通用,即一道题可以用两种方法的任一种求解;

(2)当查询的列名列表涉及到多张表的列名时,只能用多表连接;

(3)当查询中涉及到集合函数或统计信息的比较时,最好用子查询做;

8.复杂查询:

(1)UNION[ALL]

使用UNION语句可以合并两个或多个查询的结果。

UNION语句用第二个查询结果合并第一个查询结果。

它不显示两个查询中的重复的行。

UNION的语法格式:

SELECT<

目标列名序列>

FROM<

数据源>

[WHERE<

检索条件表达式>

]

[GROUPBY<

分组依据列>

[HAVING<

组提取条件>

]

UNION[ALL]

[ORDERBY<

排序依据列>

注意:

如果使用使用ORDERBY字句进行排序,则该子句只出现最后一个查询的后面,如果不希望去除重复的元组,可以使用关键字ALL

练习:

使用UNION查询‘C语言’和’清华大学出版社‘出版的图书信息

(2)派生关系:

SQL允许FROM子句中使用子查询表达式。

如果使用这样的表达式,那么我们必须给表达式产生的关系命名,而其属性也可以重命名。

我们可以用as子句完成重命名。

查询出版图书平均价格多余25元的出版社

查询出版社之间最低的平均价格

每本书最早借阅的读者的信息

Select*fromreaderwherereader_idin(

Selectreader_idfromborrowjoin(

selectbook_id

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1