项目中常用的sql整理和详细01
--有四張表
--1.學生表
Student(S#,Sname,Sage,Ssex) --S# 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
--2.課程表
Course(C#,Cname,T#) --C# --課程編號,Cname 課程名稱,T# 教師編號
--3.教師表
Teacher(T#,Tname) --T# 教師編號,Tname 教師姓名
--4.成績表
SC(S#,C#,score) --S# 學生編號,C# 課程編號,score 分數
-----------------------------------------------------------------------------------------
--查詢"01"課程比"02"課程成績高的學生的信息及課程分數
--isnull(check_expression,replacement_value)的使用,如果check_expression不為NULL,那么返回該表達式的值;否則返回replacement_value
--leftjoin就是以左表為主返回左表中連接的所有值,沒有值則以NULL代替,右連接返之
01.select a.*,b.score as [語文分數],c.score as [數學分數]? from
?? Student as a,SC as b ,SC as c where a.S#=b.S# and a.S#=c.S# and b.C#='01' and c.C#='02' and b.score>c.score
02.select a.* , b.score [課程"01"的分數],isnull(c.score,60) [課程"02"的分數] from Student a
?? left join SC b on a.S# = b.S# and b.C# = '01'
?? left join SC c on a.S# = c.S# and c.C# = '02'
?? where b.score > isnull(c.score,0)
--查找數學成績比語文成績好的學生信息
?? select a.*,b.score [語文],c.score [數學] from Student a
?? left join SC b on a.S#=b.S# and b.C#='01'
?? left join SC c on a.S#=c.S# and c.C#='02'
?? where c.score>ISNULL(b.score,0)
-----------------------------------------------------------------------------------------
?--查找平均成績大于60分的學生編號姓名平均成績
?--group by 有一個原則,就是 select 后面的所有列中,沒有使用聚合函數的列,必須出現在 group by 后面(重要)
?--where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用where條件顯示特定的行。
?--having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,條件中經常包含聚組函數,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。
?--CAST類型轉換;具有ANSI標準的功能(比如,使用CAST的函數能更容易的被其它數據庫軟件使用),但比CONVERT功能相對弱一些。不過,當小數轉化為數值,并保留原始表達式中的小數數值時,仍然需要使用CAST。因此,我建議首先使用CAST,如果遇到必須使用CONVERT的情況時再使用CONVERT。
??? select a.S#,a.Sname,CAST(avg(b.score)as decimal)[平均分]? from Student a ,SC b
??? where? a.S#=b.S#
??? group by a.S#,a.Sname
??? having ISNULL(CAST(AVG(b.score)as decimal),0)>60
??? order by a.S#
------------------------------------------------------------------------------------------
??? --查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績
??? select a.S#[編號],a.Sname, cast(sum(b.score)as decimal)[總分],COUNT(b.C#)[課程數] from Student a
??? left join SC b on a.S#=b.S#
??? group by a.S#,a.Sname
??? having COUNT(b.C#)>0
??? order by a.S#
?
轉載于:https://www.cnblogs.com/zhaolee/archive/2011/07/15/2107860.html
總結
以上是生活随笔為你收集整理的项目中常用的sql整理和详细01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2BizBox-ERP那点事儿系列之4
- 下一篇: linux sort