数据库真题复习.docx

上传人:b****4 文档编号:4364786 上传时间:2023-05-07 格式:DOCX 页数:11 大小:17.53KB
下载 相关 举报
数据库真题复习.docx_第1页
第1页 / 共11页
数据库真题复习.docx_第2页
第2页 / 共11页
数据库真题复习.docx_第3页
第3页 / 共11页
数据库真题复习.docx_第4页
第4页 / 共11页
数据库真题复习.docx_第5页
第5页 / 共11页
数据库真题复习.docx_第6页
第6页 / 共11页
数据库真题复习.docx_第7页
第7页 / 共11页
数据库真题复习.docx_第8页
第8页 / 共11页
数据库真题复习.docx_第9页
第9页 / 共11页
数据库真题复习.docx_第10页
第10页 / 共11页
数据库真题复习.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库真题复习.docx

《数据库真题复习.docx》由会员分享,可在线阅读,更多相关《数据库真题复习.docx(11页珍藏版)》请在冰点文库上搜索。

数据库真题复习.docx

数据库真题复习

⑵查询全部列

例2:

查询全体学生的详细记录

SELECT*

FROMStudent;

⑶查询经过计算的值

例3:

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

SELECTSname,2012-Sageas出生年份

FROMStudent;

2.选择表中的若干元组

⑴消除取值重复的行

例4:

查询所有选修过课的学生的学号

SELECTDISTINCTSno

FROMSC;

⑵查询满足条件的元组

查询条件

谓词

比较

=,>,<,>=,<=,!

=,><,!

>,!

<,NOT+含上述比较运算符的条件表达式

确定范围

BETWEENAND,NOTBETWEENAND

确定集合

IN,NOTIN

字符匹配

LIKE,NOTLIKE

空值

ISNULL,ISNOTNULL

多重条件

AND,OR

②比较大小

例5查询考试成绩有不及格的学生的学号

SELECTDISTINCTSno

FROMSC

WHEREGrade<60;

②确定范围

例6查询年龄在20至23岁之间的学生的姓名、系别和年龄。

SELECTSname,Sdept,Sage

FROMStudent

WHERESageBETWEEN20AND23;

③确定集合

例7查询信息系(IS)、数学系(MA)、计算机科学系(CS)的学生的姓名和性别

SELECTSname,Sdept,Sage

FROMStudent

WHERESdeptIN(‘IS’,’MA’,’CS’);

④字符匹配

SQL单字符:

_多字符:

%转义字符:

\

ACCESS单字符:

多字符:

*转义字符:

[]

例8查姓“欧阳”且全名为3个汉字的学生的姓名

SELECTSname

FROMStudent

WHERESnameLIKE‘欧阳__’;

注意:

一个汉字占两个字符的位置

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

SELECT*

FROMCourse

WHERECnameLIKE‘DB\_%i__’ESCAPE’\’;

⑤涉及空值的查询

例10查询缺考学生的学号和相应的课程号

SELECTSno,Cno

FROMSC

WHEREGradeISNULL;

⑥多重条件查询

例11查CS系年龄在20岁以下的学生姓名

SELECTSname

FROMStudent

WHERESdept=’CS’ANDSage<20;

3.对查询结果排序

例12查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列

SELECT*

FROMStudent

ORDERBYSdept,SageDESC

例13查询选修了课程的学生人数

SELECTCOUNT(DISTINCTSno)

FROMSC;

5.对查询结果分组

例14查询各个课程号与相应的选课人数

SELECTCno,COUNT(Sno)

FROMSC

GROUPBYCno;

该SELECT语句对SC表按Cno的取值进行分组,所以具有相同Cno值的元组为一组,然后对每一组作用集函数COUNT以求得该组的学生人数。

如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。

WHERE子句是不能用集函数作为条件表达式的。

WHERE子句与HAVING短语的根本区别在于作用对象不同。

WHERE子句作用于基本表或视图,从中选择满足条件的元组。

HAVING短语作用于组,从中选择满足条件的组。

例15查询信息系选修了3门以上课程的学生的学号。

简单起见,这里假设SC表中有一列Dept,它记录了学生所在系。

SELECTSno

FROMSC

WHEREDept=’IS’

GROUPBYSno

HAVINGCOUNT(*)>3;

1.2.2连接查询

1.等值与非等值连接查询

例16查询每个学生及其选修课程的情况

SELECTStudent.*,SC.*

FROMStudent,SC

WHEREStudent.Sno=SC.Sno;

2.自身连接

例17查询一门课的先修课的先修课

SELECTfirst.kh,second.xxk

FROMKCasfirst,KCassecond

WHEREfirst.xxk=second.kh;

3.外连接

SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade

FROMStudent,SC

WHEREStudent.Sno=SC.Sno(*);

(ACCESS)

SELECTStudent.*,SC.*

FROMStudentLEFTJOINSCONStudend.Sno=SC.Sno;

1.2.3嵌套查询

1.带有IN谓词的子查询

例18查询选修了课程名为’信息系统’的学生学号和姓名

SELECTSno,Sname

FROMStudent

WHERESnoIN

(SELECTSno

FROMSC

WHERECnoIN

(SELECTCno

FROMCourse

WHERECname=’信息系统’));

2.带有比较运算符的子查询

例19查询与“刘晨”在同一个系学习的学生

SELECTSno,Sname,Sdept

FROMStudent

WHERESdept=

(SELECTSdept

FROMStudent

WHERESname=’刘晨’);

3.带有ANY或ALL谓词的子查询

>ANY等价于>min()>ALL等价于>max()

=ANY等价于IN=ALL无意义

!

=ANY无意义!

=ALL等价于NOTIN

例20查询其他系中比IS系所有学生年龄都小的学生名单

SELECTSname,Sage

FROMStudent

WHERESage

(SELECTSage

FROMStudent

WHERESdept=’IS’)

ANDSdept><’IS’

ORDERBYSageDESC;

本查询同样也可以用集函数实现

SELECTSname,Sage

FROMStudent

WHERESage<

(SELECTMIN(Sage)

FROMStudent

WHERESdept=’IS’)

ANDSdept<>’IS’

ORDERBYSageDESC;

4.带有EXISTS谓词的子查询

EXISTS代表存在量词。

带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑真值“true”或逻辑假值“false”。

例21查询所有选修了1号课程的学生姓名

SELECTSname

FROMStudent

WHEREEXISTS

(SELECT*

FROMSC

WHERESno=Student.SnoANDCno=’1’);

一些带EXISTS或NOTEXISTS谓词的子查询不能被其他形式的子查询等价替换,但所有带IN谓词、比较运算符、ANY、ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。

例如,带有IN谓词的例19可以用如下带EXISTS谓词的子查询等价替换:

SELECTSno,Sname,Sdept

FROMStudentS1

WHEREEXISTS

(SELECT*

FROMStudentS2

WHERES2.Sdept=S1.SdeptAND

S2.Sname=’刘晨’);

由于带EXISTS量词的相关子查询只关心内层查询是否有返回值,并不需要查具体值,因此其效率并不一定低于不相关子查询,甚至有时是最有效的方法。

例22查询选修了全部课程的学生姓名。

SELECTSname

FROMStudent

WHERENOTEXISTS

(SELECT*

FROMCourse

WHERENOTEXISTS

(SELECT*

FROMSC

WHERESno=Student.Sno

ANDCno=Course.Cno));

例23查询至少选修了学生95002选修的全部课程的学生号码

SELECTDISTINCTSno

FROMSCSCX

WHERENOTEXISTS

(SELECT*

FROMSCSCY

WHERESCY.Sno=’95002’AND

NOTEXISTS

(SELECT*

FROMSCSCZ

WHERESCZ.Sno=SCX.SnoANDSCZ.Cno=SCY.Cno));

1.2.4集合查询

集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS

例24查询计算机科学系的学生及年龄不大于19岁的学生

SELECT*

FROMStudent

WHERESdept=’CS’

UNION

SELECT*

FROMStudent

WHERESage<=19;

1.3数据更新

1.3.1插入数据

1.插入单个元组

例1插入一条选课记录(’95020’,’1’)。

INSERT

INTOSC(Sno,Cno)

VALUES(‘95020’,’1’);

2.插入子查询结果

例2对每一个系,求学生的平均年龄,并把结果存入数据库

CREATETABLEDeptage

(SdeptCHAR(15)

Avgageint)

INSERT

INTODeptage(Sdept,Avgage)

SELECTSdept,AVG(Sage)

FROMStudent

GROUPBYSdept;

1.3.2修改数据

1.修改某一个元组的值

例3将学生95001的年龄改为22岁

UPDATEStudent

SETSage=22

WHERESno=’95001’;

2.修改多个元组的值

例4将所有学生的年龄都增加1岁

UPDATEStudent

SETSage=Sage+1;

3.带子查询的修改语句

例5将计算机科学系全体学生的成绩置零

UPDATESC

SETGrade=0

WHERE‘CS’=

(SELECTSdept

FROMStudent

WHEREStudent.Sno=SC.Sno);

1.3.3删除数据

1.删除某一个元组的值

例6删除学号为95019的学生记录

DELETE

FROMStudent

WHERESno=’95019’;

2.删除多个元组的值

例7删除所有的学生选课记录

DELETE

FROMSC;

3.带子查询的删除语句

DELETE

FROMSC

WHERE‘CS’=

(SELECTSdept

FROMStudent

WHEREStudent.Sno=SC.Sno);

FROMStudent

WHERESdept=’IS’;

WITHCHECKOPTION;

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

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2