sql基礎查詢語句運用

轉載自Last updated
暫且 用這個表來做一下sql基本查詢知識的總結

Student(S#,Sname,Sage,Ssex) 學生表 S#:學號;Sname:學生姓名;Sage:學生年齡;Ssex:學生性別
Course(C#,Cname,T#) 課程表 C#,課程編號;Cname:課程名字;T#:教師編號
SC(S#,C#,score) 成績表 S#:學號;C#,課程編號;score:成績
Teacher(T#,Tname) 教師表 T#:教師編號; Tname:教師名字

問題及答案:
1、查詢“001”課程比“002”課程成績高的所有學生的學號;
select a.S# from (select s#,score from SC where C#=’001′) a,(select s#,score
from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;

答:a,b作爲查詢課程的這個結果集的別名

2、查詢平均成績大於60分的同學的學號和平均成績;
select S#,avg(score)
from sc
group by S# having avg(score) >60;

答:
avg()是得出平均數的函數
group by是根據查詢出來的數據進行分組。例如這裏就是根據查詢出來的S#這個學號來分組。

having,是用於和函數一起使用的過濾條件(where無法與函數關鍵字一起用)

 ***where用於group by 前,而having用於group by之後***

WHERE 子句用來篩選 FROM 子句中指定的操作所產生的行。
GROUP BY 子句用來分組 WHERE 子句的輸出。
HAVING 子句用來從分組的結果中篩選行。

3、查詢所有同學的學號、姓名、選課數、總成績;
select Student.S#,Student.Sname,count(SC.C#),sum(score) fromStudent left
Outer join SC on Student.S#=SC.S# group by Student.S#,Sname

答:count()計算個數,sum()計算總數。
left join 是left Outer join簡寫,左外連接,將左表的全部查詢結果顯示,右表根據匹配信息顯示,若沒有則直接顯示null.

4、查詢姓“李”的老師的個數;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

答:distinct()返回唯一不同的值,即出現了兩個相同的數據,但是隻顯示一個。
like 操作字,意思爲包含,以…. 。
NOT LIKE :不包含
LIKE ‘%d’ :以d結尾的
LIKE ‘d%’ :以d開頭的
LIKE ‘%d%’ :包含d的

5、查詢沒學過“葉平”老師課的同學的學號、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’葉平’);

答:根據給出的信息Teacher.Tname=’葉平’

6、查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名;
select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);

將外查詢表的每一行,代入內查詢作爲檢驗,如果內查詢返回的結果取非空值,則EXISTS子句返回TRUE,這一行行可作爲外查詢的結果行,否則不能作爲結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章