連接查詢和分組查詢
一.使用group by 進行分組查詢
語法:
Select 列名
From 表名
Group by 列名
1.查詢男女學生的人數格式多少
分析:
首先按照性別進行分組:group by SSex
其次對每個組進行總數的統計,用到聚合函數count()。
完整的T-SQL語句如下:
Select count(*) AS 人數,SSex from Students
Group by SSex
2.查詢每個科目的平均分,並且按照由低到高的順序排列顯示
Select CourseID,avg(Score) AS 課程平均成績
From Score
Group by CourseID
Order by avg(Score) DESC
二.多列分組查詢
Select count(*) AS 人數,SGrade AS 年級, SSex AS 性別
From Students
Group by SGrade,SSex
Order by SGrade
二.使用having 子句進行分組篩選
1.查詢年紀總人數超過15的年級
Select count(*) AS 人數,SGrade AS 年級
From Students
Group by SGrade
Having count(*)>15
2.查詢平均分及格的課程信息
Select CourseID AS 課程編號,avg(Score) AS 課程平均成績
From students
Group by GourseID
Having avg(score)>=60
Having ,where,order by 和group by句子可以在同一個select語句中喲起使用,使用順序如下
Where→group by → having →order by
3.查詢每門課程及格總人數和及格學生的平均分
Select count(*) AS 人數,avg(Score) AS 平均分, CrouseID AS 課程
From SCore
Where Score>=60
Group by CrouseID
1.查詢每門課程及格人數和及格平均分在80分以上的記錄
Select count(*) AS 人數,avg(Score) AS 平均分,CrouseID AS 課程
From Score
Where Score>=60
Group by CrouseID
Having avg(Score)>80
Order by CrouseID
四.多表連接查詢
1.多表連接查詢的分類
多表連接查詢實際上是通過各個表之間共同列的關聯性來查詢數據的,他是關系數據庫查詢最主要的特征。
常用的連接:內鏈接,外連接
A.內鏈接
內鏈接是最典型,最常用的連接查詢,它根據表中共同的列來進行匹配,特別是兩個表存在主外建關系時通常會使用到內鏈接查詢
B.外連接
外連接是至少返回一個表中的所有記錄,根據匹配條件有選擇性地返回另一張表的記錄。外連接可以是左外連接,有外鏈接
2.內鏈接查詢
內鏈接查詢通常會使用向“=”或“<>”等比較運算符來判斷兩列數據值是否相等
內鏈接使用inner join 、、、on關鍵字或where子句來進行表之間的關聯。內鏈接查詢可以通過兩種方式實現
1.在where子句中指定連接條件
例如:查詢學生姓名和成績的T-SQL如下
Select Student、Sname,Score、CourseID,Score、Score
From Student,Score
Where Students.Scode=Score.StudentID
2.在from子句中使用insert join 、、、on
上面查詢也可一通過這種方式來實現
Select s.Sname,c.courseID ,c.Score
From Students AS s
Inner join Score AS c on(s.Score=c.StudentID)
在上面的內鏈接查詢中:
A:insner join 用來連接兩個表
B:inner 可以省略
C:on用來設置條件
D:AS指定表的“別名”,如果查詢的別名在用到兩個或多個表中不重復,則對這一列的引用不必用表名來限定
五、外連接查詢
與內部連接相對的方式稱為外部鏈接。在外部聯接中參與聯
接的表有主從之分,以主表的每行數據匹配從表的數據列,江都和聯接條件的數據直接返回到結果集中;對那些不符合連接條件的列,將被填上NULL值(空值)後在返回到結果集中
1.左外連接查詢
左外連接的結果集包括left join 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行
左外連接使用left join 、、、on 或 left outer join 、、、on 關鍵字來進行表之間的關聯
例如 :要統計所有學生的考試情況,要求顯示所參加考試學生的每次考試分數,沒有參加考試的學生也要顯示出來。這時候,以學生信息表為主表(有時也叫做左表),學生成績表為從表的做外連接查詢如下:
Select s.sname,c.CourseID,c.Score
From Students AS S
Left outer join Score AS C on S.Scode=C.studentID
2.右外聯接查詢
右外聯接查詢與左外聯接查詢類似,只不過要包含右表中所有匹配的行
右外聯接使用right join 、、、on或right outer join 、、、ou 關鍵字來進行之間的關聯
例如:在某數據庫中,存在書=書籍表Titles 和出版商表
Publishers之間的右外聯接將包含所有的出版商,在Titles 中沒有書名的(很久沒出書了)也會被列出
Select Titles.Titles_Id,Titles.Titles,Publishers.Pub_name
From Titles
Right outer join Publishers on Titles.Pub_id=Publishers.Pub_id
連接查詢和分組查詢