資料庫實驗課堂作業-1.2資料查詢
阿新 • • 發佈:2018-11-14
資料庫實驗課堂實驗
1.2資料查詢
內容:
1).單表查詢
:查詢的目標表達式為所有列,指定列或指定列的運算。
:使用DISTINCT保留字消除重複性。
:對查詢結果排序和分組。
:集合分組使用集函式進行各項統計。
2).連線查詢
:笛卡爾積連線和等值連線。
:自連線。
:外連線。
:複合條件連線。
:多表連線。
3).巢狀查詢
:通過實驗驗證對子查詢的兩個限制條件。
:體會相關子查詢和不相關查詢的不同。
:考察4類謂詞的用法,包括:
第一類,IN,NOT IN;
第二類,帶有比較運算子的子查詢;
第三類,SOME,ANY或ALL謂詞的子查詢;
第四類,帶有EXISTS謂詞的子查詢。
4).集合運算
:使用保留字UNION進行集合或運算。
:採用邏輯運算子AND或OR來實現集合交和減運算。
程式碼:
--查詢年級為2001的所有學生名稱 select sname from students where grade=’2001’ order by sid --查詢選課成績合格的學生的課程成績,並把成績換算成積點。 select tid,cid,score,’point of score’,(score-50)/10 from choices where score>60 --查詢課時是‘48’或‘64’的課程名稱 select cname from courses where hour in(’48’,’64’) --查詢所有課程名稱中含有data的課程編號 select cname from courses where cname like ’%data%’ --查詢所有選修記錄的課程號 select cid from choices --去掉重複選項 select distinct cid from choices --保證所有列組成的行的唯一性,而不保證單獨的列的取值的唯一性 select distinct cid,tid from choices --查詢所有老師的平均工資 select avg(salary)from teachers --查詢所有學生的編號,姓名和平均成績,按總平均成績降序排列 select tid,avg(score) from choices group by tid order by avg(score) desc --統計各個課程的選課人數和平均成績 select cid,count(no),avg(score) from choices group by cid --查詢至少修了三門課程的學生編號 select sid from choices group by sid having count(*)>3 --查詢編號800009026的學生所選的全部課程名和成績 select courses.cname,choices.score from courses,choices where choices.sid=’800009026’and courses.cname=’database’ --考慮子查詢的形式,由外界向內部傳遞資料database select sid from choices where ’database’ in ( select cname from courses where courses.cid=choices.cid ) --同一課程的所有學生對 select x.tid,y.tid from choices x,choices y where x.cid=y.cid and x.no<y.no --不同別名來實現 select x.tid,y.tid from choices as x,choices as y where x.cid=y.cid and x.no<y.no --查詢至少被兩名學生選擇的課程編號 select x.cid from choices x group by x.tid having count(*)>2 --查詢編號為850955252的學生所選修的學生編號 select y.sid from choices as x, choices as y where x.cid=y.cid and x.sid=’850955252’ select students.sid, students.sname, students.grade, choices.cid, choices.score from students join choices on students.sid = choices.sid select students.sname, courses.cname, choices.score from students, courses, choices select students.sname, courses.cname, cname, choices.score from students, courses, choices where students.sid = choices.sid and courses.cid = choices.cid and students.sid = ’850955252’ select * from students where ( select grade from students where sid = ’850955252’ ) = grade select * from students where grade = ( select grade from students where sid = ’850955252’ ) select * from students where sid in ( select sid from choices ) select cname from courses where cid not in ( select cid from choices ) select sid, sname from students where sid in ( select sid from choices where cid in ( select cid from courses where cname = ’C++’ ) ) -- select cname from courses where hour = some ( select hour from courses where cname = ’UML’ OR CNAME = ’C++’ ) --查詢修10001課程的學生姓名 select sname from students where exists ( select * from choices x where x.cid = ’10001’ and x.sid = students.sid ) --查詢所有課程的學生姓名 select sname from students where not exists ( select * from courses as where not exists ( select * from choices as y where y.sid = students.sid and y.cid = x.cid ) ) --用集合查詢選擇課程C++或則選擇Java的編號 select tid from choices where choices.cid ( select courses.cid from courses where courese.cname =’C++’ ) union select tid from choices where choices.cid = ( select cid from courses where courses.cname = ’Java’ ) --採用or連線兩個判斷條件是否能夠實現 select tid from choices where choices.cid = ( select courses.cid from courses where courses,cname = ’C++’ OR courses.cname = ’Java’ ) --子查詢返回是單值 select tid from choices,courses where choices.cid=courses.cid and(where courses.cname=’C++’or courses.cname=’Java’) --實現集合交運算,查詢C++和Java的學生編號 select tid from choices where cname=’C++’ intersect celect sid from choices where cname=’Java’ --SQL2000通過巢狀查詢來實現集合交運算 select x.sid from courses as x,courses as y where (x.cid=( select cid from courses shere cname=’C++’ )and y.cid=( select cid from courses where cname=’Java’ ) and x.sid=y.sid --實現集合減運算,查詢選修課程C++沒選java的學生編號 select sid from choices where cname=’C++’ except select sid from choices where cname=’Java’ --SQL2000可以使用NOT運算子來實現 select distinct choices.csid from(select sid from choices,courses where choices.cid=courses.cid and courses.cname=’C++’ )as choices(csid) where choices.csid not in (select sid from choices,courses where choices.cid=courses.cid and courses.cname=’Java’ )
問題:
雖然是照著課本再打,能夠打出來,但是並不是太懂為什麼要這麼寫,沒有像以
前學的高階語言一樣能夠細緻的理解,然後做出題目。其次最大的問題就是題量
太大了!