0.目錄 1. "前言" 2. "最基本的SQL查詢語句" 3. "select...from..." 3.1 "“\ ”與“Top num \ ”" 3.2 "查詢指定列" 3.3 "Isnull函數:判斷空值" 3.4 "使用"+"將"列"與"字元串"連接起來(使用as重命名)" 4. "ord ...
0.目錄
1.前言
2.最基本的SQL查詢語句
3.select...from...
- 3.1 “*”與“Top num *”
- 3.2 查詢指定列
- 3.3 Isnull函數:判斷空值
- 3.4 使用"+"將"列"與"字元串"連接起來(使用as重命名)
4.order by
5.where
- 5.1 比較運算符
- 5.2 or 或 and
- 5.3 Like "%" 或 "_" 通配符
- 5.4 in 或 not in
- 5.5 is null 或 is not null
- 5.6 between...and...
6.group by & having
- 6.1 常用的聚合函數&經典查詢語句
- 6.2 count
- 6.3 Avg、Min、Max、Sum
- 6.4 group by & having 的作用
1.前言
增刪改查都是對數據的操作,其中“查”對應的SQL語句便是“select”,也就是“選擇”的意思。
本篇主要介紹數據的查詢,主要使用SQL Server提供的T-SQL語句查詢數據。
本篇主要參考了慕課網的視頻SQL Server基礎--T-SQL語句,以及部分參考了網易雲課堂的視頻SQLServer資料庫基礎,另外還參照了一下w3school的SQL 教程。如果有時間的話,推薦去看一下視頻課程。
2.最基本的SQL查詢語句
最基本的SQL查詢語句語法如下:
SELECT <table fields list>
FROM <table names list>
WHERE <row constraints specification>
GROUP BY <grouping specification>
HAVING <grouping selection specification>
ORDER BY <order rules specification>
Tips & Tricks:
1、Select...From... 語句是必須的。
2、Where, group by 以及 order by 三個語句不是必須的。
上面的語法先不必死記硬背,以下會依次介紹他們的功能。
3.select...from...
3.1 “*”與“Top num *”
select * from student
-- "*"代表選擇所有,即查詢student表中的所有數據
select Top 5 * from student
-- "Top num"代表選擇前num行,即查詢student表中的前num行數據
3.2 查詢指定列
select sno, sname
from student
-- 如果只想看student表中的學號和姓名列,那就只需要查詢指定列
3.3 Isnull函數:判斷空值
select cno, cname, isnull(cpno, ''), ccredit
from course
-- isnull(cpno,'')將cpno中的NULL值置空,用戶就看不到NULL了,只能看見空白。但是列的名字會變為(No column name/無列名)
原表如下:
查詢出的表如下:
3.4 使用"+"將"列"與"字元串"連接起來(使用as重命名)
select sno, sname as '姓名',
'學號是' + sno + '的同學叫' + sname +'.' as IDname
from student
-- 使用"+"將兩列進行合併
-- 使用"as"將列名重命名
4.order by
原表:
4.1 asc(正序)
select *
from FactSalesQuota
order by SalesAmountQuota
-- 預設就是asc正序排序(從小到大)
4.2 desc(倒序)
select *
from FactSalesQuota
order by EmployeeKey desc
-- desc倒序排序(從大到小)
4.3 其他
select *
from FactSalesQuota
order by EmployeeKey desc, SalesAmountQuota
-- 先按EmployeeKey倒序排序,如果EmployeeKey相同再按SalesAmountQuota排序
5.where
5.1 比較運算符
-- 比較運算符有 =、>、<、>=、<=、<>("<>"是不等於的意思)
select *
from student
where sdept = '理學院'
select *
from student
where sage >= 20
select *
from student
where ssex <> '男'
5.2 or 或 and
-- and就是兩個條件都要滿足,or就是滿足一個條件即可
-- and就是兩個條件都要滿足,or就是滿足一個條件即可
select *
from student
where sdept = '理學院' and sage >= 20
select *
from student
where sage >= 20 or sno = '0001'
select *
from student
where ssex = '男' and ssex = '女'
可以看到,沒有既是"男"又是"女"的學生,所以第三張表沒有任何數據。
5.3 Like "%" 或 "_" 通配符
原表:
-- like代表要模糊查找
-- "%"代表任意符,表示可以有任何東西也可以沒有
-- "_"代表占位符,就是有且僅有一個字母,但是忘記了那個字母具體是什麼
select *
from FactCallCenter
where Shift like 'AM'
-- like'Shift'代表精確查找'AM',相當於where Shift = 'AM'
select *
from FactCallCenter
where Shift like 'PM%'
-- like 'PM%'代表以PM開頭的所有字元串
-- like '%PM'代表以PM結尾的所有字元串
select *
from FactCallCenter
where Shift like '%M%'
-- like '%M%'代表M前面和後面都可以有任何東西
select *
from FactCallCenter
where Shift like 'PM_'
-- like 'PM_'代表PM後面有且僅有一個字母或者數字,不能是空
5.4 in 或 not in
select *
from FactCallCenter
where DateKey in ('20101101', '20101105', '20101110')
select *
from FactCallCenter
where WageType not in ('weekday')
-- 相當於where WageType <> 'weekday'
5.5 is null 或 is not null
select *
from DimProduct
where ProductSubcategoryKey is null
select *
from DimProduct
where ProductSubcategoryKey is not null
5.6 between...and...
操作符 BETWEEN ... AND 會選取介於兩個值之間的數據範圍。這些值可以是數值、文本或者日期。(在SQLServer中兩個端點的值都會包括)
例如:
select *
from FactCallCenter
where DateKey between '20101105' and '20101107'
-- DateKey在20101105-20101107範圍內的所有數據
-- 如果要取不在這個範圍的則可以用以下語句
select *
from FactCallCenter
where DateKey not between '20101105' and '20101107'
6.group by & having
6.1 常用的聚合函數 & 經典查詢語句
常用的函數有:
count、Avg、Min、Max、Sum
6.2 count
select count(*)
from FactCallCenter
where Shift = 'AM'
-- count用來統計符合條件的行數
6.3 Avg、Min、Max、Sum
select
Avg(LevelOneOperators) as AverageLevelOneOperators
,Min(LevelOneOperators) as MinimumLevelOneOperators
,Max(LevelOneOperators) as MaximumLevelOneOperators
,Sum(LevelOneOperators) as SummaryLevelOneOperators
from FactCallCenter
-- Avg平均值,Min最小值,Max最大值,Sum求和
6.4 group by & having 的作用
select Shift, Max(LevelOneOperators) as LevelOneOperators最大值
from FactCallCenter
where Shift is not null
group by Shift
-- group by Shift表示對不同的Shift值,分別求LevelOneOperators的最大值
select Shift, Max(LevelOneOperators) as LevelOneOperators最大值
from FactCallCenter
where Shift is not null
group by Shift
having Max(LevelOneOperators) > 2
-- group by Shift表示對不同的Shift值,分別求LevelOneOperators的最大值
-- having Max(LevelOneOperators) > 2 進一步對結果進行篩選