接著學習SQL查詢
資料庫系統概論--高等教育出版社
高育的這本書不錯,在語言上比較通順.例子也不難,但很能說明問題,我把它們都在VFP裡調試了一下,當然出問題是必然的,放在這裡大家一起來探討一下.
一些有用的網站:
想要明明白白瞭解SQL,不看ANSI的白皮書怎麼行
http://www.contrib.andrew.cmu.edu/~shadow/sql/
編寫 SQL 查詢:讓我們從基礎知識開始
http://www.microsoft.com/china/msdn/library/data/sqlserver/ssequerybasics.mspx
沒有VFP怎麼行?Visual FoxPro V6.0 下載
如果你不放心D版可以試試MS SQL 2005它是免費的,可以從MS的網站下載
MS SQL 2005 Express Edition
http://msdn.microsoft.com/vstudio/express/sql/register/default.aspx
http://msdn.microsoft.com/vstudio/express/sql/default.aspx
Student
學號 Sno |
姓名 Sname |
性別 Ssex |
年齡 Sage |
所在系 Sdept |
95001 |
李勇 |
男 |
20 |
CS |
95002 |
劉晨 |
女 |
19 |
IS |
95003 |
王敏 |
女 |
18 |
MA |
95004 |
張立 |
男 |
19 |
IS |
|
Course
課程號 Cno |
課程名 Cname |
先行課 Cpno |
學分 Ccredit |
1 |
資料庫 |
5 |
4 |
2 |
數學 |
|
2 |
3 |
資訊系統 |
1 |
4 |
4 |
作業系統 |
6 |
3 |
5 |
資料結構 |
7 |
4 |
6 |
資料處理 |
|
2 |
7 |
PASCAL語言 |
6 |
4 |
|
SC
學號 Sno |
課程號 cno |
成績 Grade |
95001 |
1 |
92 |
95001 |
2 |
85 |
95001 |
3 |
88 |
95002 |
2 |
90 |
95002 |
3 |
80 |
|
eg1
查詢全體學事情的學號與姓名.
select sno,sname from student
eg2
查詢全體不生的姓名,學號,所在系.
select sname,sno,sdept from student
eg3
查詢全體學生的詳細記錄.
select * from student
select sno,sname,ssex,sage,sdept from student
eg4
查全體學生的姓名其及出生年份.
select sname,2006-sage from student
eg5
查詢全體學生的姓名,出生年份和所有系,要求用小寫字母表示所有系名.
select sname,'Year of birth:',2006-Sage,ISLOWER(sdept) from student
select sname,'Year of birth:',2006-Sage,LOWER(sdept) from student
(###又被我發現一個錯誤,書上是上一個語句,它的傳回值為T(ture)或F(false).
select sname NAME, 'Year of Birth:' BIRTH, 2006-sage BIRTHDAY, lower(sdept) DEPARTMENT from student
eg6
查詢選修了課程的學生學號.
select sno from sc
eg7
查詢電腦系全體學生的名單.
select sname from student where sdept='CS'
eg8
查詢所有年齡在20歲以下的學生姓名及其年齡.
select sname,sage from student where sage<20
select sname,sage from student where not sage>=20
eg9
查詢考試成績有不及格的學生的學號.
select distinct sno from sc where grade<60
(###書上又錯了,你看看書)
eg10
查詢年齡在20-23歲(包括20歲和23歲)之間的學生的姓名,系別和年齡.
select sname,sdept,sage from student where sage between 20 and 23
eg11
查詢年齡不在20-23歲之間的學生姓名,系別和年齡.
select sname,sdept,sage from student where sage not between 20 and 23
eg12
查詢資訊系(IS),數學系(MA)和電腦系(CS)學生的姓名和性別.
select sname,ssex from student where sdept in ('IS','MA','CS')
eg13
查詢既不是資訊系,數學系,也不是電腦科學系的學生的姓名和性別.
select sname,ssex from student where sdept in ('IS','MA','CS')
eg14
查詢學號為95001的學生的詳細情況.
select * from student where sno like '95001'
select * from student where sno='95001'
eg15
查詢所有姓劉的學生的姓名,學號和姓別.
select sname,sno,ssex from student where sname like '劉%'
eg16
查詢姓'歐陽'且全為三個字的學生的姓名.
select sname from student where sname like '劉_'
select sname from student where sname like '歐陽__'
(###這書也是想當然)
eg17
查詢名字中第2個字為陽字的學生的姓名和學號.
select sname,sno from student where sname like '_敏'
(###只有這樣才查得出來)
eg18
查詢所有不姓劉的學生姓名.
select sname from student where sname not like '劉%'
eg19
查詢DB_Design課程的課程號和學分.
select cno,ccredit from course where cname like 'DB/_Design' escape'/'
eg20
查詢以"DB_"開頭,且倒數第3個字會為i的課程的詳細情況.
select * from course where cname like 'DB/_%i__'ESCAPE'/'
eg21
某些學生選修課程後沒有參加考試,所以有選課記錄,但沒有考試成績.查詢缺少成績的學生的學號和相應的課程號.
select sno,cno from sc where grade is null
eg22
查詢所有有成績的學生學號和課程號.
select sno,cno from sc where grade is not null
eg23
查詢電腦系年齡在20歲以下的學生姓名.
select sname from student where sdept='CS' and sage<20
eg24
查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列.
select sno,grade from sc where cno='3' order by grade asc
select sno,grade from sc where cno='3' order by grade desc
eg25
查詢全體學生情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列.
select * from student order by sdept,sage desc
eg26
查詢學生總人數.
select count(*) from student
eg27
查詢選修了課程的學生人數.
select count(sno) from sc
select count(distinct sno) from sc
eg28
計算1號課程的學生平均成績.
select avg(grade) from sc where cno='1'
eg29
查詢選修課程的學生最高分數.
select max(grade) from sc where cno='1'
eg30
求各個課程號及相應的選課人數.
select cno,count(sno) from sc group by cno
eg31
查詢選修了3門以上課程的學生學號.
select sno from sc group by sno having count(*)>3
eg32
查詢每個學生及其選修課程的情況.
select student.*, sc.* from student,sc where student.sno=sc.sno
eg33
對例32用自然串連完成.
select student.sno,sname,ssex,sage,sdept,cno,grade from student,sc where student.sno=sc.sno
eg34
查詢每一門課的間接選修課(即先修課的先修課).
select first.cno, second.cpno from course first,course second where first.cpno=second.cno
(###在VFP中查詢的結果和書中的不一樣,它把NULL也當也先修課.
eg35
查詢選修2號課程且成績在90分以上的所有學生.
select student.sno,sname from student,sc where student.sno=sc.sno and sc.cno='2' and sc.grade>90
eg36
查詢每個學生的學號,姓名,選修課程名及成績.
select student.sno,sname,cname,grade from student,sc,course where student.sno=sc.sno and sc.cno=course.cno
eg37
查詢與劉晨在同一個系學習的學生.
select sno,sname,sdept from student where sdept in (select sdept from student where sname='劉晨')
eg38
查詢選修了課程名為資訊系統的學生學號和姓名.
select sno,sname from student where sno in (select sno from sc where cno in (select cno from course where cname='資訊系統'))
(###查得太深)
eg39
查詢其他系中比資訊系某一學生年齡小的學生姓名和年齡.
select sname,sage from student where sage<any (select sage from student where sdept='IS')
eg40
查詢其他系中比資訊系所有學生年齡都小的學生姓名及年齡.
select sname,sage from student where sage<all(select sage from student where sdept='IS') and sdept<>'IS'
eg41
查詢所有選修了1號課程的學生姓名.
select sname from student where exists (select* from sc where sno=student.sno and cno='1')
eg42
查詢沒有選修1號課程的學生姓名.
select sname from student where not exists(select * from sc where sno=student.sno and cno='1')
eg43
查詢選修了全部課程的學生姓名.
select sname from student where not exists (select * from course where not exists(select * from sc where sno=student.sno and cno=course.cno))
(###查得太深)
eg44
查詢至少選修了學生95002選修的全部課程的學生號碼.
select distinct sno from sc scx where not exists (select * from sc scy where scy.sno='95002' and not exists(select * from sc scz where scz.sno=scz.sno and scz.cno=scy.cno))
(###查得太深)
eg45
查詢電腦科學系的學生及年齡不大於19歲的學生.
select * fro mstudent where sdept='CS' union select * from student where sage<=19
eg46
查詢選修了課程1或者選修了課程2的學生
select sno from sc where cno='1' union select sno from sc where cno='2'
eg47
查詢電腦科學系的學生與年齡不大於19歲的學生的交集,這實際上就是查謁電腦科學系中年齡不大於19歲的學生.
select * from student where sdept='CS' and sage<=19
eg48
查詢選修課程1的學生集合與選修課程2的學生集合的交集.
本例實際上是查詢既選修了課程1又選修了課程2的學生.
select sno from sc where cno='1' and sno in (select sno from sc where cno='2')
eg49
查詢電腦科學系的學生與年齡不大於19歲的學生.
select * from student where sdept='CS' and sage>19
eg50
沒有了
下載代碼