练习题 (1)
-
练习题
用
SQL
命令完成下列操作
1.
给学生表增加一个属性
nation
(民族)
,数据类型为
Varchar(20).
alter table student
add nation Varchar(20)
2.
删除学生表中新增的属性
nation
(民族)
.
alter table student
drop
column nation
3.
向成绩表中插入一些新记录
Insert into calss
values('0
0112','
会计
','2009',200,'20090
1')
and values('00113','
经济学<
/p>
','2009',180,'2009401')
and v
alues('00113','
金融工程
','2009',
180,'2009601')
insert into grade
values('200901','1’','90')
insert into grade
values('200920','2','90')insert
into course
values(
‘
200901
’’
2
’
,5)
4.
删除学号为“
xxx
”的记录
delete from student
where sno='200901'
5.
为学生表创建一个名为
IXClass
的索引,以班级号的升序排序。
create index IXclass
on
student (clno)
order by clno ASC
6.
删除
I
XClass
的索引
drop
index student. x_class
7.
找出所有被学生选修了的课程号
SELECT distinct
课程号
FROM grade
WHERE EXISTS
(SELECT*
FROM course
WHERE grade.
课程号
=course.
课程号
)
8.
找出班级名为“
xxx
”班级的女同学的个人基本信息。
SELECT * FROM student
where ='
女
'AND
clno='00311'
9.
找出姓李的学生的个人基本信息
select *
from student,grade
where = AND sname like
'
李
%'
10.
找出李勇所在班级的学生人数
select number
from class
where =(select clno
from
student
where
sname='
李勇
')
11.
找出课程名为操作系统的平均成绩、最高分、最低分
select
课程名
,avg(
p>
成绩
),max(
成绩
),min(
成绩
)
from
(course inner join grade
on course.
课程号
=grade.
课程号
< br>)
where course.
课程名
='
操作系统
'
group
by
课程名
12.
group by
课程名找出选修了课程名“
xxx
“
的学生人数
select count(*)
from grade
where grade.
课程号
=(select
课程号
from course <
/p>
where
课程名
='
< br>数据库
')
13.
找出选修了课程名“
xxx
“
< br>
的学生的学号和姓名
select student.
学号
,
姓名
from (student
inner join grade
on student.
学号
=grade.
学号
)
inner join course
on course
.
课程号
=grade.
课程号
where
课程名
='
数据库
'
14.
找出与李勇在同一班的学生的基本信息
select*
from student
where
班级号
=(select
班级号
from student
where
姓名
='
李勇
')
15.
找
出今天(或
1
月
20
< br>日)过生日的学生学号、姓名和班级名
select
学号
,
姓名
,
班级名
from student
left join class
on student.
班级号
=class.
班级号
where
month(
出生日期
)
=month(getdate()) and
day(
出生日期
)=day(getdate())
16.
找出“
2007
信管“班中没有选修课程“数据库“的学生的学号、姓名
select student.
学号
< br>,
姓名
from
student
where
student.
班级号
=
(select
班级号
from
class where
班级名
='2007
信管
') AND
学号
not in
( select
学号
from grade where
grade.
课程号
=(select
课程号
from course
where
课程名
='
数据库
' )
17.
找出选修了全部课程的学生学号、姓名和班级
SELECT
学号
,
姓名
,
班级号
FROM student AS s
WHERE NOT EXISTS
(SELECT *
FROM course AS c
WHERE NOT
EXISTS
(SELECT *
FROM grade
WHERE
学号
=s.
学号
AND
课程号
=c.
课程号
))
18.
列出“
xxx
“
同学所修全部课程的名称
和成绩,并给出其所修课程的总分和
平均分
select
课程名
,
成绩
FROM grade ,course,student
WHERE grade.
课程号
=c
ourse.
课程号
AND student.
学号
=grade.
学号
AND
student.
姓名
='<
/p>
张婷婷
'
select
avg(
成绩
)
平均成绩
,sum(
成绩
)
总成绩
FROM grade
,course,student
WHERE grade.
课程号
=course.
课程号
AND
student.
学号
=grade.
学号
AND
student.
姓名
='
张婷婷
'
19.
分别求出每位同学所学课程的总分和平均分
select
姓名
,sum(
成绩
)
总成绩
,av
g(
成绩
)
平均成绩
FROM grade
,course,student
WHERE grade.
课程号
=course.
课程号
AND student.
学号
=grade.
学号
group by
姓名
20.
求选修了课程号为“
xxx
“
的选课人数
select count(*)
from grade
where
grade.
课程号
=(select
课程号
from course
where
课程号
='00001')
21.
查询班级号为“
xxx
”班级的班长基本信息
select*
from student,class
where
student.
班级号
='
200101311'and student.
学号
=class.
班长学号
22.
查询全体学生的学习信息,要求按学号排序
Select student.
学号
,
课程号
,
成绩
From student,grade
Where s
tudent.
学号
=grade.
学
号
order by
student.
学号
desc
23.
求每个课程号及相应的选课人数
Select
课程号
,count(
学号
)
From grade
Group by
课程号
24.
查询选修了
< br>3
门以上课程的学生学号和姓名
SELECT
学号
,
姓名
FROM student
WHERE student.
学号
in
(SELECT
学号
FROM grade
GROUP BY
学号
HAVING COUNT(
学号
)>3)
25.
对每个班求学生的平均年龄
Select
班级号
,avg(ye
ar(getdate())-year(
出生日期
))
From student
Group by
班级号
26.
将
2
007
信管班全体学生的数据库成绩置为
0
update grade set
成绩
=0
where
课程号
in(
select
课程号
from course where
课程名
='
数据库
' )
and
学号
in (select
学号
from student
where
班级号
=(select
班级号
from class
where
专业名
='
信息管理
'and
入学年
='2007'))
27.
删除
2007
信管班全体学生数据库的选课记录
Delete from grade
where
课程号
in(
select
课程号
from course where
课程名
='
数据库
' )
and
学号
in (select
学号
from student
where
班级号
=(select
班级号
from class
where
专业名
='
信息管理
'and
入学年
='2007'))
28.
学生“
xxx
”已退学,从数据库中删除有关他的记录
Delete from student where
姓名
=
’
xxx
’
29.
查询选修课程中没有不及格分数的学生学号、姓名和班级
Select distinct student.
学号
p>
,
姓名
,
班级名<
/p>
From student,grade,class
Where grade.
成绩
>60
and student.
学号
=grade.
学号
and student.
班级号
=class.
班级号
30.
求每个班学生每门课的平均成绩
Select
班级号
,
课程号
,avg(gmark)
平均成绩
From
student inner join grade
On student.
p>
学号
=grade.
学号
< br>
Group by
课程号
,
班级号
31.
查询“
xxx
“班级的班长信息
select*
from student,class
where student.
班级名
='2007
信管
'and student.
学号
=class.
班长学号
32.
查询选修课程中没有不及格分数的学生
Select distinct
姓名
From
student,grade
Where
grade.
成绩
>60 and student.
学号
=grade.
学号
33.
查询有
< br>3
门课程不及格的学生的学号、姓名及所在的班级名
Select
学号
,
姓名
,
班级名
From student,class
Where
学号
in
(select
学号
from grade
Where
成绩
<60
Group by
学号
Having
count(
学号
)>=3)
and
student.
班级号
=class.
班级号
34.
< br>建立
2007
信管班选修了数据库课程的学生视图
Create view st2
As
select *
from student where
学号
in(
select
学号
from grade where
课程号
=(
select
课程号
from course where
课程名
='
数据库
' ))
and
班级号
=(select
班级号
from class
where
专业名
='
信息管理
'and
入学年
='2007')
35.
在课程表中增加一个‘先修课
号’属性,用于指定在学本课之前必须先修的
课程,如果为空,则表示该课没有要求的先
修课程。
Alter table course
Add
先修课程
char(10)
36.
分别向
Class
和
grade
表中录入一
些
2009
信管管理、
2009
工商管理、
2009
旅游管理、
2009
数理经济四个班级的信息,以及四个班级的一些同学的选
课信息。
Insert into calss
values('00102','
工商管理
< br>','2009',200,'200901') and
values('0
0103','
旅游管理
','2009',180,'200
9201')and
values('00103','
数
理经济
','2009',180,'2009401')and
values('00103','
信息管理
','200
9',180,'2009601')