SQL Server 查詢基礎及分組(每三個小時一組)


一、鏈接查詢

  內連接(inner join)。左連接(left join),以左邊為基准,全部查詢右邊沒有匹配的值顯示為空。右鏈接(right join),和左連接相反,以右邊為基准左邊表的字段為空。全鏈接(full outer join)左右全部連接沒有對應值得字段為空。交叉鏈接(coress join)笛卡爾積

-- inner join 顯示
select * from Users 
inner join Wallets on Users.ID = Wallets.User_ID 
where  Money > 30000
-- inner join 隱式
select * from Wallets,Users 
where Wallets.User_ID = Users.ID and Money > 10000
-- left join
select * from Users 
left join Wallets  on Users.ID = Wallets.User_ID
-- right join
select * from Wallets 
right join Users on Users.ID = Wallets.User_ID 
-- full outer join
select * from Users
full outer join Wallets on Users.ID = Wallets.User_ID 
where User_ID is null or Users.ID is null
-- cross join
select * from Users 
cross join Wallets where Users.ID = 3

二、from子查詢(嵌套查詢)

--查詢錢包里金額大於30000
select * from Users where exists (select User_ID from Wallets where Money > 30000 and User_ID = Users.ID)
select * from Users where ID in (select User_ID from Wallets where Money > 30000)

三、分組

1. 根據日期分組

  根據convert 的第一個參數,設置結果的長度達到更具年月分組或年月日分組等

  2017-09 長度 7 varchar(7)

  2017-09-01 長度10 varchar(10)

-- 使用convert() 函數方式
select convert(varchar(7),CreatTime,120)日期,COUNT(*) 次數,sum(Money)總數 from Orders
group by convert(varchar(7),CreatTime,120)
-- 先查出對應的年月日等時間,再根據查詢出的字段分組
select YEAR(CreatTime) 年,month(CreatTime) 月,COUNT(*) 次數,sum(Money)總數 from Orders
group by month(CreatTime),YEAR(CreatTime)
order by 年,月 asc

2. 根據划分時間段進行分組(每三個小時一組)

  dataname:返回代表指定日期的指定日期部分的字符串。一個參數代表返回的格式,第二個參數為具體值dw:星期幾,qq, q:季度,yy, yyyy:年,mm,m:月,dd、d:日,hh:小時,mi, n:分鍾 ss、s:秒,ms:毫秒

select t.number 記錄數,
CONVERT(varchar(2),t.timeGroup * 3)+':00~'+ CONVERT(varchar(2),t.timeGroup * 3 + 2)+':59' 時間段
from 
(select datename(hh,CreateTime) /3 timeGroup,COUNT(1) number from ClassOptions 
group by datename(hh,CreateTime) / 3) t


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM