1. 程式人生 > >資料庫實驗課堂作業-1.2資料查詢

資料庫實驗課堂作業-1.2資料查詢

  					資料庫實驗課堂實驗

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’
)

問題:
雖然是照著課本再打,能夠打出來,但是並不是太懂為什麼要這麼寫,沒有像以

前學的高階語言一樣能夠細緻的理解,然後做出題目。其次最大的問題就是題量

太大了!