1. 程式人生 > >表連接和分組查詢

表連接和分組查詢

兩張 -- 多表連接查詢 數據行 產生 記錄 group bsp log

分組查詢:分組查詢就是按某一列分組,相同的列合並,得到結果可能他少於總記錄

使用group by
分組查詢:按什麽分(年級、姓氏、地址、年齡)年級

分組查詢語法:
Select * from <表名>
Where 條件
Group by 列名

Group by後的列名必須在*裏面出現

Demo:
Select GradeId
From Student
Group by GradeId

--統計每學期男女同學的人數 該怎麽辦
select GradeId as 編號,COUNT(Sex) as 總和
from Student
where Sex = ‘男‘
group by GradeId

select COUNT(*) as 人數,GradeId as 年級,Sex as 性別


from Student
group by Sex,GradeId

Group by 分組
Order by排序(默認asc)desc
倒須
select COUNT(*) as 人數,GradeId as 年級,Sex as 性別
from Student
group by Sex,GradeId
order by GradeId desc


需求3
如何獲取人數超過人的年級
select COUNT(*) as 人數,GradeId as 年級
from Student
group by GradeId
having COUNT(*) > 23
分組篩選語句Hhaving
Having 子句對分組後的數據進行篩選,將“組”看做“列”來限定條件


語法:
Select * from <表名>
Where 條件
Group by 列名
Having 函數
Having用法與where 用法類似,有三點不同
Having只能用在Group by(分組統計用語句)
Where 是用於在初始表中篩選查詢,having用在where和group by結果果你中查詢
Having可以使用聚合函數,where不能

Where 和Having對比
Where子句
·····用來篩選from子句中指定的操作所產生的行
Gorup by子句
·····用來分組where子句的輸出
Having子句
·····用來從分組的結果中篩選行
順序:where Group by Having


Where :子句從數據源中去掉不符合搜索的數據
Group by:子句搜索數據行到各個組中
Having:子句去掉不符合搜索條件的各個數據行

如何從兩張表中的到所需的數據
常用的多表連接查詢
內連接通常使用“=”“<>”比較運算符來判斷兩個列的數值是否相等
使用inner join…on關鍵字或where子句來查詢
內連接(inner join)
語法:select * select
From <表名> 等價 from <表名1,2,n>
Inner join 表1 =====》 where 條件
inner join 表n
On 連接條件

select Student.StudentName as 姓名,Grade.GradeName as 年級
from Student,Grade
where Student.GradeId = Grade.GradeId

select stu.StudentName as 姓名,g.GradeName as 年級
from Student stu
inner join Grade g
on stu.GradeId = g.GradeId

--三個表Student、Subject、Result
select s.StudentName as 姓名,r.StudentResult as 成績,j.SubjectName as 科目
from Student s
inner join Result r on s.StudentNo = r.StudentNo
inner join Subject j on j.SubjectId = r.SubjectId

--where實現三個表的連查
select s.StudentName as 姓名,r.StudentResult as 成績,j.SubjectName as 科目
from Student s,Result r,Subject j
where(s.StudentNo = r.StudentNo) and (r.SubjectId = j.SubjectId)

外鏈接
左外連接(left join)
右外鏈接(right join)

表連接和分組查詢