接著學習SQL查詢,練習《資料庫系統概論–高等教育出版社》中的例子

來源:互聯網
上載者:User

接著學習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
沒有了

 

下載代碼

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.