Student(SId,Sname,Sage,Ssex) 學生表(學號、姓名、年齡、性別)
Course(CId,Cname,TId) 課程表(課程編號、課程名字、教師編號)
SC(SId,CId,score) 成績表(學號、課程編號、成績)
Teacher(TId,Tname) 教師表(教師編號、教師名字)
1. having: 對由sum或其他集合函數運算結果的輸出進行限制。
e.g. 查詢平均成績大於60分的同學的學號和平均成績
select SId,ave(score) from sc group by SId having(score)>60
2. LEFT JOIN: 關鍵字會從左表(table_name1) 那裏返回所有的行,即使在右表(table_name2) 中沒有匹配的行。
e.g. 查詢所有同學的學號、姓名、選課數、總成績
select Student.SId,Student.Sname,count(SC.CId),sum(score) fromStudent left Outer join SC on Student.SId=SC.SId group by Student.SId,Sname
3. WHERE 子句不能包含聚集函數; 因爲試圖用聚集函數判斷那些行輸入給聚集運算是沒有意義的。 相反,HAVING 子句總是包含聚集函數。
4. CONVERT() 函數是把日期轉換爲新數據類型的通用函數。CONVERT()函數可以用不同的格式顯示日期/時間數據。
e.g. 1981年出生的學生名單(注:Student表中Sage列的類型是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age fromstudent where CONVERT(char(11),DATEPART(year,Sage))='1981';
5. 微軟的ISNULL() 函數用於規定如何處理 NULL 值。
e.g. 查詢課程名稱爲“數據庫”,且分數低於60的學生姓名和分數
Select Sname,isnull(score,0) from Student,SC,Course whereSC.SId=Student.SId and SC.CId=Course.CId and Course.Cname='數據庫'and score <60;