您的当前位置:首页正文

SQLSERVER查询练习习题

2021-04-11 来源:年旅网


.

设教学数据库Education有三个关系:

学生关系s〔student_id,student_name,birthday,sex,major〕;

学习关系sc〔student_id,course_id,score〕;

课程关系course〔course_id,course_name,term,period,credit〕

查询问题:

单表查询

1:查所有年龄在20岁以下的学生XX及年龄。

select student_name,year(getdate()) - year(birthday) as 年龄

from s

where year(getdate()) - year(birthday) < 30

2:查考试成绩有不及格的学生的学号

select distinct student_id

from sc

.

where score < 60

3:查所年龄在20至23岁之间的学生XX、系别及年龄。

select student_name,major,year(getdate()) - year(birthday)as 年龄

from s

where year(getdate()) - year(birthday) between 20 and 24

4:查舞蹈编导、英语、通信技术专业的学生XX、性别。

select student_name, sex

from s

where major in ('舞蹈编导','英语','通信技术')

5:查不是舞蹈编导、英语、通信技术的学生XX、性别

select student_name, sex

from s

where major not in ('舞蹈编导','英语','通信技术')

.

6:查所有姓“〞的学生的XX、学号和性别。

select student_name,student_id,sex

from s

where student_name like '%'

8:查所有不姓“〞且单名的学生的XX。

select student_name

from s

where student_name not like '_'

9:查C++课程的课程号。

select course_id

from course

where course_name='C++'

10:查缺考的学生的学号和课程号。

.

select student_id,course_id

from sc

where score is null

11:查开课学期为空值的课程编号和名称。

select course_id,course_name

from course

where term is null

12:查信息管理专业20岁以下的学生的学号和XX。

select student_id,student_name

from s

where major='信息管理' and year(getdate()) - year(birthday)<20

13:查舞蹈编导专业性别为女的学生XX、性别。

select student_name,sex

.

from s

where major='舞蹈编导' and sex='女'

14:查询选修了110010课程的学生的学号和成绩,其结果按分数的降序排列。

select student_id,score

from sc

where course_id='110010'

order by score desc

15:查询全体学生的情况,查询结果按所在专业升序排列,对同一系中的学生按年龄降序排列。

select *

from s

order by major asc,year(getdate()) - year(birthday) desc

16:查询学生总人数。

select count(*) as 人数

.

from s

17:查询选修了课程的学生人数。

select count(*) as 选修课程人数

from sc

18:计算选修了110010课程的学生平均成绩。select avg(score) as平均成绩

from sc

where course_id=

(select course_id

from course

where course_name='C++'

)

19:查询学习110010课程的学生最高分数。

C++〕

〔改为

.

select max(score) as 最高分

from sc

where course_id='110010'

20:查询各个课程号与相应的选课人数。select course_name,count(*) as 人数

from sc,course

where sc.course_id=course.course_id

group by course_name

21:查询至少选修两门课程的学号。

select student_id

from sc

group by student_id

having count(*) > 2

〔改为课程名称〕

.

22:查询选修课程超过3门的学生XX及课程门数

select student_name,count(*) as 课程门数

from s,sc

where s.student_id=sc.student_id

group by student_name

having count(*) > 3

多表查询

23:查询每个学生及其选修课程的情况。

select *

from s,sc,course

where s.student_id=sc.student_id and sc.course_id=course.course_id

24:查询选修了110011课程且成绩在90分以上的学生信息。

select *

.

from s,sc

where s.student_id=sc.student_id and course_id='110010'and score>90

25:查询每个学生的XX,选修的课程名及其成绩。

select student_name,course_name,score

from s,sc,course

where s.student_id=sc.student_id and

sc.course_id=course.course_id

子查询

27:查询选修了110011课程的学生XX。

select student_name

from s

where student_id in

(select student_id

.

from sc

where course_id='110010'

)

28:查询与“梁婷婷〞在同一个专业学习的学生学号、XX和专业。select student_id,student_name,major

from s

where major=

(select major

from s

where student_name='梁婷婷'

)

29:查询选修课程名为“C++〞的学生学号和XX。

select student_id,student_name

.

from s

where student_id in

(select student_id

from sc

where course_id=

(select course_id

from course

where course_name='C++'

)

)

30:查询至少选修课程号为110010和110011的XX。

select student_name

from s

.

where student_id in

( select s1.student_id

from sc s1,sc s2

where s1.course_id='110010' and s2.course_id='110011'

and s1.student_id=s2.student_id

)

31:查询选修“C++〞的最高分的学生XX,性别,系别

select student_name,sex,major

from s,sc

where s.student_id = sc.student_id

and course_id in

( select sc.course_id

from sc,course

.

where sc.course_id =course.course_id and course_name = 'C++'

)

and score =

( select max(score)

from sc,course

where sc.course_id = course.course_id

and course_name = 'C++'

)

32:查询所有未选修C++课程的学生XX。

select student_name

from s

where not exists

(select *

.

from sc

where course_id=

(select course_id

from course

where course_name='C++') and sc.student_id=s.student_id)

1. 〔 A 〕是位于用户与操作系统之间的一层数据管理软件,它属于系统软件,它为用户或应用程序提供访问数据库的方法。数据库在建立、使用和维护时由其统一管理、统一控制。

A.DBMS B.DB 〔database〕

C.DBS D.DBA

2、查询表中的前3条记录使用的关键字是〔 D 〕

A、up 3 B、down 3 C、pre 3 D、top 3

3. SQL Server安装程序创立4个系统数据库,以下哪个不是〔 C 〕系统数据库。

A. Master B. Model C. pub D. msdb

.

4. 以下哪个不是sql 数据库文件的后缀〔扩展名〕。〔 C 〕

A..mdf B. .ldf C..tif D..ndf

5. SQL的视图是从〔 C 〕中导出的。

A. 根本表 B. 视图 C. 根本表或视图 D. 数据库

6. 在SQL语言中,建立存储过程的命令是( A )

A、CREATE PROCEDURE B、CREATE RULE C、CREATE DURE FILE

D、CREATE

7. SQL语言中,删除表中数据的命令是( A )。

A. DELETE B. DROP C. CLEAR D. REMOVE

8. 在MS SQL Server中,用来显示数据库信息的系统存储过程是( D )。

A. sp_dbhelp B. sp_db C. sp_help D. sp_helpdb

9. Microsoft 公司的SQL Server 2005 数据库管理系统一般只能运行在〔 A 〕。

A. Windows 平台 B. UNIX平台 C. LINX平台 D. NetWare 平台

10. SQL Server 2005 的物理存储主要包括3类文件〔A 〕。

.

A. 主数据文件、次数据文件、事务日志文件

B. 主数据文件、次数据文件、文本文件

C. 表文件、索引文件、存储文件

D. 表文件、索引文件、图表文件

11. SQL Server 2000 系统中的所有系统级信息存储于哪个数据库〔 A A. master B. model C. tempdb D.msdb

12、以下说法正确的选项是〔 B 〕。

A 、视图是观察数据的一种方法,只能基于根本表建立。

B 、视图是虚表,观察到的数据是实际根本表中的数据。

C 、索引查找法一定比表扫描法查询速度快。

D 、索引的创立只和数据的存储有关系。

13、SQL Server 2005是一个〔 C 〕的数据库系统。

〔A〕网状型 〔B〕层次型 〔C〕关系型 〔D〕以上都不是

.

14、在SQL Server 2005中,当数据表被修改时,系统自动执行的数据库对象是〔 B 〕。

〔A〕存储过程 〔B〕触发器 〔C〕视图 〔D〕其他数据库对象

15、要查询book表中所有书名中包含“计算机〞的书籍情况,可用〔 B 〕语句。

〔A〕 SELECT * FROM book WHERE book_name LIKE ‘计算机*’

〔B〕 SELECT * FROM book WHERE book_name LIKE ‘计算机%’

〔C〕 SELECT * FROM book WHERE book_name = ‘计算机*’

〔D〕 SELECT * FROM book WHERE book_name = ‘计算机%’

16、关于主键描述正确的选项是:〔 C 〕

〔A〕包含一列 〔B〕包含两列 〔C〕包含一列或者多列 〔D〕 以上都不正确

17、在SQL SERVER中局部变量前面的字符为:〔 D 〕

〔A〕* 〔B〕# 〔C〕 〔D〕

18、在WHILE循环语句中,如果循环体语句条数多于一条,必须使用:(A)

.

〔A〕 BEGIN……END

〔B〕 CASE……END

〔C〕 IF…………THEN

〔D〕 GOTO

19、SELECT查询中,要把结果中的行按照某一列的值进展排序,所用到的子句是:(A)

〔A〕ORDER BY 〔B〕WHERE 〔C〕GROUP BY 〔D〕HAVING

20、对视图的描述错误的选项是:〔 C 〕

〔A〕 是一X虚拟的表

〔B〕 在存储视图时存储的是视图的定义

〔C〕 在存储视图时存储的是视图中的数据

〔D〕 可以像查询表一样来查询视图

五、设计题(共45分)

现有关系数据库如下:

.

数据库名:学生成绩数据库

学生信息表(学号 char(6),,性别,民族,XX号)

课程信息表(课号 char(6),名称)

成绩信息表(ID,学号,课号,分数)

Select 学号, from 学生信息表 where 学号 in (Select distinct 学号 from 成绩信息表 where 分数<60)

用SQL语言实现以下功能的sql语句代码。

1. 创立数据库[学生成绩数据库]代码(2分)。

createdatabase学生成绩数据库

on primary

(filename='d:\\stu.mdf',

name=studata,

size=3mb,

maxsize=unlimited,

.

filegrowth=3%

)

logon

(filename='d:\\stu.ldf',

name=stulog,

size=1mb,

maxsize=3mb

)

2. 创立数据表[课程信息表]代码;〔2分〕

课程信息表(课号 char(6),名称)

要求使用:主键(课号)、非空(名称)

createtable课程信息表

(课号char(6)primarykey,

.

名称nvarchar(30)notnull)

3.创立数据表[学生信息表]代码;〔4分〕

学生信息表(学号 char(6),,性别,民族,XX号)

要求使用:主键(学号)、默认(民族为汉)、非空(民族,)、唯一或是女)

createtable学生信息表

(学号char(6)primarykey,

XXnvarchar(30)notnull,

性别char(2)check(性别='男'or性别='女'),

民族nvarchar(10)notnulldefault'汉',

XX号char(18)unique

)

4. 创立数据表[成绩信息表];〔5分〕

成绩信息表(ID,学号,课号,分数)

(XX号)、检查(性别是男

.

要求使用:外键(学号,课号)、检查(分数必须是0-100之间)

createtable成绩信息表

( id int,

学号char(6)foreignkeyreferences学生信息表(学号),

课号char(6)foreignkeyreferences课程信息表(课号),

分数int check(分数>=0 and分数<=100)

)

5. 将以下课程信息添加到课程信息表的代码〔8分〕

课号 名称

100101 西班牙语

100102 大学英语

insertinto课程信息表

values('100101','西班牙语')

.

insertinto课程信息表

values('100102','大学英语')

修改 课号为100102的课程名称:专业英语

update课程信息表

set名称='专业英语'

where课号='100102'

删除 课号为100101的课程信息

deletefrom课程信息表

where课号='100101'

6. 创立视图[成绩信息表视图]的代码;〔5分〕

成绩信息表视图(学号,,课号,课程名称,分数)

Create view 成绩信息表视图

as

.

select学号,,课号,课程名称,分数

from学生信息表,课程信息表,成绩信息表

where学生信息表.学号=成绩信息表.学号and课程信息表.课号=成绩信息表.课号

7. 从学生信息表中查询姓X的女同学的情况:、性别、民族。〔2分

select,性别,民族

from学生信息表

whereXXlike'%'and性别='女'

8. 查询有一门或一门以上课程成绩小于60分的所有学生的信息,包括学号、。select学号,

from学生信息表

where学号in

(selectdistinct学号

from成绩信息表

4分〕

.

where分数<60)

9. 创立带参数的存储过程[某门课程上下均分]、执行该过程的代码〔7分〕

存储过程功能:查询某门课程的最高分、最低分、平均分;

执行该过程,查询所有修’专业英语’这门学生的最高分、最低分、平均分;

createprocedure某门课程上下均分

课程名nvarchar(30)

as

selectmax(分数)as最高分,min(分数)as最低分,avg(分数)as平均分from课程信息表,成绩信息表

where课程信息表.课号=成绩信息表.课号and名称=课程名

执行过程:

exec某门课程上下均分课程名='专业英语'

因篇幅问题不能全部显示,请点此查看更多更全内容