查詢所有同學的學生編號、學生姓名、選課總數、所有課程的成績總和
聯合查詢不會顯示沒選課的學生:
select student.sid, student.sname,r.coursenumber,r.scoresum
from student,
(select sc.sid, sum(sc.score) as scoresum, count(sc.cid) as coursenumber from sc
group by sc.sid)r
where student.sid = r.sid;
如要顯示沒選課的學生(顯示為null),需要使用join:
select s.sid, s.sname,r.coursenumber,r.scoresum
from (
(select student.sid,student.sname
from student
)s left join
(select
sc.sid, sum(sc.score) as scoresum, count(sc.cid) as coursenumber
from sc
group by sc.sid
)r on s.sid = r.sid
);
4.1 查有成績的學生資訊
這一題涉及到in和exists的用法,在這種小表中,兩種方法的效率都差不多,但是請參考sql查詢中in和exists的區別分析
當表2的記錄數量非常大的時候,選用exists比in要高效很多.
exists用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值true或false.
結論:in()適合b錶比a表資料小的情況
結論:exists()適合b錶比a表資料大的情況
select * from student
where exists (select sc.sid from sc where student.sid = sc.sid);
select * from student
where student.sid in (select sc.sid from sc);
SQL 練習題 17題
統計各科成績各分數段人數 課程編號,課程名稱,100 85 85 70 70 60 60 0 及所佔百分比 有時候覺得自己真是死腦筋。group by以後的查詢結果無法使用別名,所以不要想著先單錶group by計算出結果再從第二張表裡添上課程資訊,而應該先將兩張表join在一起得到所有想要的屬性再...
SQL趣味練習題
第一中情況 create table renwu name varchar 20 not null,fahter varchar 20 insert into renwu values 小甲 大甲 insert into renwu values 大甲 老甲 insert into renwu na...
SQL基礎練習題
sql 基礎入門50題 1.選擇分數介於85 100,70 85,60 70,0 60分數段之間的人數,課程標號,課程名稱和所佔百分比 select distinct f.c name,a.c id,b.85 100 b.百分比,c.70 85 c.百分比,from score a left joi...