--1)內連接,必須保證的是內連接的數據一定相等的纔會查詢出來。
select 用戶表.用戶ID, 用戶表.用戶名稱, 角色表.角色名稱
from 用戶表 inner join 角色表
on 用戶表.角色ID = 角色表.角色ID
--2)左連接
-- 作用:保證左邊表的數據全部出現,而關聯的這個表的數據滿足相等的條件下才會顯示。
-- left join
select 用戶表.用戶ID, 用戶表.用戶名稱, isnull(角色表.角色名稱,'無分類') as 分類名稱
from 用戶表 left join 角色表
on 用戶表.角色ID = 角色表.角色ID
--補充;如果某個字段查詢出的結果爲null值,那麼可以把null值替換一個默認值。
--isnull(字段,默認值)
--3)右連接
--作用:保證連接的右邊的表的數據全部出現,而關聯的表的數據只有滿足相等的條件纔會顯示。
select 用戶表.用戶ID, 用戶表.用戶名稱, isnull(角色表.角色名稱,'無分類') as 分類名稱
from 用戶表 right join 角色表
on 用戶表.角色ID = 角色表.角色ID
--補充:convert轉換函數,
--語法:convert(轉換的類型,轉換的字段)
--4)統計記錄數,count函數統計,count(可以是某個具體的字段,也可以是*)
--1.首先第一步,查詢出在掛號信息表裏查詢某個科室下的掛號人數 T_.....是代表表名
Select count(*) as 掛號人數
From T_Registration tr inner join T_Department td
On tr.DepartmentId = td.DepartmentId
Where td.DepartmentName='外科'
--)清空數據,不寫日誌操作記錄
truncate table 表名(t_sublist)
truncate table 表名(t_recipe)
--5)把兩個查詢的結果作爲臨時表存放,然後通過這兩個臨時表去計算
declare @begintime datetime--開始執行的時間
@endtime datetime, --執行結束時間
select @begintime =GETDATE()
Select t1.dname as 科室, (t1.掛號人數-t2.看病人數) as 等待人數
From (Select td.DepartmentName as dname, count(*) as 掛號人數
From T_Registration tr inner join T_Department td
On tr.DepartmentId = td.DepartmentId
group by td.DepartmentName) as t1,
(Select tp.DepartmentName as dname, count(*) as 看病人數
From T_Recipe tc inner join T_Doctor td
On tc.DoctorId = td.DoctorId
inner join T_Department tp
On td.DepartmentId = tp.DepartmentId
group by tp.DepartmentName) as t2
Where t1.dname = t2.dname
and t1.dname='外科'
print '消耗時間:'+convert(varchar(20),datediff(millisecond ,@begintime, GETDATE())) -- 打印輸出時間
--用子查詢來獲取等待人數--
Select m.DepartmentName,count(distinct t.RegistrationId) as 等待人數
From T_Registration t inner join T_Department m
on t.DepartmentId = m.DepartmentId
Where t.RegistrationId not in (Select r.RegistrationId
From T_Recipe r
inner join T_Doctor c
on r.DoctorId = c.DoctorId
inner join T_Department d
on c.DepartmentId = d.DepartmentId
Where d.DepartmentName='外科'
)
and m.DepartmentName = '外科'
Group By m.DepartmentName
--6)聚合函數,首先分組
select
from 表名
where 判斷條件
group by 分組條件(按照什麼分組)
--分組條件一定要出現在查詢的顯示列中--
select 分類表.分類名稱, count(*)
from 產品表 left join 分類表
on 產品表.分類ID = 分類表.分類ID
group by 產品表.分類名稱
--重點:1)如果有分組條件,那麼分組條件必須在顯示列中,也就是在select後面
2)如果有聚合函數(比如count,avg,sum等),
且聚合函數前有顯示列,那麼該顯示列必須出現在分組條件中。
use Test
go
--要求要查詢出產品分類爲水果和服飾
Select 分類ID
From 分類表
Where 分類表.分類名稱 = '水果' or 分類表.分類名稱='服飾'
Select 分類ID
From 分類表
Where 分類表.分類名稱 in('水果','服飾')
--用in表示.
Select *
From 產品表
Where 分類ID in (Select 分類ID
From 分類表
Where 分類表.分類名稱 = '水果'
or 分類表.分類名稱='服飾')
--用exists關鍵字
Select *
From 產品表
Where exists (Select * From 分類表
Where 分類表.分類ID=產品表.分類ID
and 分類表.分類名稱 in('水果','服飾'))
--查詢出產品不爲水果和服飾
Select *
From 產品表
Where not exists (Select * From 分類表
Where 分類表.分類ID=產品表.分類ID
and 分類表.分類名稱 in('水果','服飾'))
左,右,內連接 統計記錄數 子查詢 聚合函數 查詢產品分類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.