1. 程式人生 > >Microsoft SQL Server 2008學生資料庫的練習

Microsoft SQL Server 2008學生資料庫的練習

use 作業
--萬用字元 _ 下劃線表示只要一個字元   %  百分號表示後面可以跟很多字元
--例題1  查詢學生表 姓劉的同學的資訊
select *
from student
where sname like '劉%'
--例題2  查詢數學系中年齡在20歲以下的學生
select *
from student
where sdept='ma' and sage<20
--例題3  查詢選修了c02號課程的學生的學號和成績 並降序排列
select sno,grade
from sc
where cno='c02'
order by grade desc
--例題4 全體學生 系降序  學號  升序
select *
from student
order by sdept desc,sno
--例題5 查詢學生的總人數
select COUNT(*)
from student
--例題6 查詢選修了課程的學生人數    考察去重複 distinct
select COUNT(distinct sno)
from sc
--例題7 計算選修了c03 課程的學生的平均成績
select AVG(grade)
from sc
where cno='c03'
--例題8 查詢選修了c03號課程學生成績的最高分
select max(grade)
from sc
where cno='c03'
--例題9 查詢男女同學的人數
select ssex,COUNT(sno) 人數
from student
group by ssex
--例題10 查詢每一門課程的平均成績
select cno,AVG(grade)平均成績
from sc
group by cno
--例題11 查詢每一位同學的平均成績
select sno,AVG(grade)
from sc
group by sno
--例題12 查詢所有系別
select  distinct sdept
from student
--例題13 學生的年齡都加1歲 並加一列 獎學金 預設值為5000
/*select * from student*/
update student
set sage=sage+1
 alter table student add 獎學金1 smallint default 5000
--刪除這一列
alter table student drop column 獎學金1 
sp_helpconstraint student --查詢這個表中的所有約束
--先刪除約束條件 才能直接刪除列(如果這個列有約束條件的話)
alter table student drop DF__student__獎學金1__09DE7BCC
--例題14 查詢學生表中非計算機系的所有女生的資訊
select *
from student
where sdept <> /*不等於*/'is' and ssex='f'
--例題15 查詢選修了一門課程中多於2個人的資訊
select COUNT(sno),cno
from sc
group by cno
having COUNT(sno)>2
--例題16 查詢每一個學生選課的情況
select *
from student
where sno in (select sno
from sc)
--例題17 求劉姍姍同學選課的課程號
select cno
from sc
where sno=(select sno
from student
where sname ='劉姍姍')
--例題18 求劉姍姍同學選課的課程號和成績
select sc.cno,grade
from sc,student,course
where sc.cno=course.cno and sc.sno=student.sno
and sname='劉姍姍'
--例題19  (比較特殊)查詢每一門課程的間接選修課
select  *
from course a,course b
where a.cno=b.cno 
--例題20 求年齡大於劉姍姍同學的學生學號,姓名和性別
select sno,sname,sage
from student
where sage>(select sage 
from student
where sname='劉姍姍')
--例題21 求年齡與劉姍姍同學相等的學生  In和=  相同的效果
select *
from student
where sage in(select sage 
from student
where sname='劉姍姍')
--例題22 查詢選修了課程名為“高數”的學生資訊
select *
from student
where sno in
(select sno from sc where cno=(
select cno from course where cname='高數'))
--例題23 查詢非計算機系且年齡不能超過計算機系所有年齡的學生資訊
select sage from student
where sdept <>'cs' and sage<=all(select sage from student where sdept='cs' )
--例題24 查詢比任何男生年齡小的女同學的資訊
select *
from student
where ssex='m'
 and sage <all (select sage 
from student 
where ssex='f')
--例題25 查詢所有選修了c01號課程的學生資訊
select *
from student 
where sno in( select sno
from sc
where cno='c01')
--例題26 查詢劉姍姍同學沒有選修的課程的課程號
select cno
from course
where cno !=all(
select cno
from sc
where sno =(
select sno 
from student
where sname='劉姍姍'))
---例題27 將資料庫'原理'的學生改為3 分
--select * from course
update course
set credit=3
where cname='資料庫'
---例題28 求學生的成績 平均分 最高分 最低分
select AVG(grade) 平均分,MAX(grade) 最高分,MIN(grade) 最低分
from sc
---例題29 查詢選修了c01號課程且考試及格的學生學號和成績
select sno,grade
from sc
where cno='c01' and grade>=60
---例題30 查詢姓胡 學生的學號,姓名和年齡
select sno,sname,sage
from student
where sname like '劉%'
---例題31 查詢3人以上選修的每一門課程的平均成績 最高分 最低分
select AVG(grade),MAX(grade),MIN(grade)
from sc
group by cno
having COUNT(sno)>3
---例題32 檢查學生中 年齡最大的學生的學號和年齡
--select sno,sage from student order by sage desc 
select * from student where sage >= (select max(sage) from student)
select * from student where sage >= all(select sage from student)
---例題33 求每個學生的最高分和最低分
select sno,MAX(grade),MIN(grade)
from sc
group by sno
---例題34 查詢CS系所有男同學考c05課程的成績,學號,姓名,成績降序
select sc.cno,sname,grade
from student,sc
where student.sno=sc.sno
and sdept='cs' and ssex='m' and cno='c05'
order by grade desc
---例題35 檢索選修了c++課程的學生的姓名
select sname
from student
where sno in (
select sno from sc where cno=(
select cno from course where cname='c++'))
---例題36 列出沒有選課的學生姓名
select * 
from student
where sno <>all
(select  sno from sc)