T-SQL基礎
T-SQL的組成
- 數據定義語言:(DDL,Data Dfinition Language)
- 數據操縱語言:(DML,Data Manipulation Language)
- 數據控制語言:(DCL,Data Control Language)
T-SQL基礎運算符
比較運算符
核心作用主要用作用快速的條件查詢
運算符 | 作用 |
---|---|
= | 判斷相等 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
!= <> | 不等於 |
! | 非 |
邏輯運算符
運算符 | 作用 |
---|---|
ALL | 如果一個比較集中全部都是TRUE,則值爲TRUE |
ANY | 如果一個比較集中任何一個爲TRUE,則值爲TRUE |
AND | 如果兩個布爾表達式均爲TRUE,則值爲TRUE |
OR | 如果任何一個布爾表達式是TRUE,則值爲TRUE |
BETWEEN | 如果操作數是在某個範圍內(可取上下限),則值爲TRUE |
LIKE | (模糊查詢)如果操作數匹配某個模式的話,則值爲TRUE |
IN | 如果操作數與一個表達式列表中的某個相等的話,則值爲TRUE |
NOT | 對任何其他布爾運算符的值取反 |
SOME | 如果一個比較集中的某些爲TRUE的話,則值爲TRUE |
EXISTS | 如果子查詢包含任何行,則值爲TRUE |
SQL 通配符
在搜索數據庫中的數據時,SQL 通配符可以替代一個或多個字符。可以理解爲和C#中正則的元字符類似
通配符 | 描述 |
---|---|
% | 替代一個或多個字符 |
_ | 僅替代一個字符 |
[a,b,d],[a-d] | 字符列中的任何單一字符 |
[ ^a,b,c] 或者 [!b] | 不在字符列中的任何單一字符 |
SELECT查詢語句
SELECT 字段1名 AS '重命名1',字段2名 AS '重命名2',.... FROM 表名
SELECT 字段1名 AS '重命名1',字段2名 AS '重命名2',.... FROM 表名
SELECT StuID AS '學號',SubID AS '科目ID',Score AS '分數' FROM Score
多表連接查詢-內聯接
內聯接查詢可以爲將數據庫中多張表通過其內部關係進行查詢,得到一張新的有用的"表",這個新表是內聯接查詢的結果並不存在
注意:多張表要保證表與表之間的字段有某種特殊意義的聯繫
SELECT Sname AS '姓名',SubName AS '科目',Score AS '分數' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID
按排列順序查詢
排序查詢肯定是先排序再查詢
將查詢結果按照某個指定字段以升序(例如:數字按照從小到大)、降序這兩種方式進行重新排列顯示。
SELECT <字段> FROM 表名 [WHERE條件] ORDER BY <指定列名> ASC/ DESC,<指定列名> ASC/ DESC
升序:使用關鍵字ASC,如果在查詢語句中ORDER BY排序之後未聲明任何關鍵字則默認是升序
降序:使用關鍵字DESC
SELECT Sname AS '姓名',SubName AS '科目',Score AS '分數' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID WHERE SubName='C#'ORDER BY Score DESC
注意:排序查詢語句中的升序或降序不是僅有一個字段
TOP查詢指定行
使用TOP可以從結果中查詢出指定的前多少行
SELECT TOP(數量) <列名> FROM 表名
從表中查詢前多少行,由括號中的數量決定
SELECT TOP(3) Sname AS '姓名',SubName AS '科目',Score AS '分數' FROM Score JOIN Student ON Score.StuID=Student.SID JOIN Subject ON Score.SubID=Subject.SubID WHERE SubName='C#'
T-SQL分頁查詢
分頁查詢的必要
-
針對於目標數據量龐大的查詢結果,爲了能夠快速查詢
-
分頁查詢有助於應用程序對數據的一個顯示
如何T-SQL進行分頁查詢
使用NOT IN分頁
SELECT TOP(5) * FROM StudentInfo WHERE StuID NOT IN(SELECT TOP(5)StuID FROM StudentInfo ORDER BY StuID) ORDER BY StuID
SELECT TOP(每頁的數據量) * FROM 表名 WHERE 標識列 NOT IN(SELECT TOP(已經過去的頁數)標識列 FROM 表名 ORDER BY 標識列) ORDER BY 標識列
使用IN進行分頁
SELECT TOP(5) * FROM StudentInfo WHERE StuID IN
(SELECT TOP(5) StuID FROM StudentInfo WHERE StuID IN
(SELECT TOP(10) StuID FROM StudentInfo ORDER BY StuID)ORDER BY StuID DESC)ORDER BY StuID ASC
SELECT * FROM 表名 WHERE 標識列 IN (SELECT TOP(每頁的數據) 標識列 FROM 表名 WHERE 標識列 IN (SELECT TOP(當前頁在內的總數據) 標識列 FROM 表名 ORDER BY 標識列)ORDER BY 標識列 DESC)ORDER BY 標識列 ASC
注意:
1.在子連接查詢中如果有多個排序查詢,務必要注意子查詢語句如果要使 用ORDER BY則必須要使用TOP關鍵字
2. 使用IN語句進行分頁前提是必須要計算好最後一頁的數據
SQL例題:
使用T-SQL語句查詢出Student表中的第3-第8條數據(標識列不連續)
實現思路:
1.首先查出來前兩條記錄中的標識列數據
2.然後查詢從第3條數據之後剩餘的所有數據
3.最後在剩餘的數據中取前5條數據
SELECT TOP(6)*FROM Teacher WHERE TID NOT IN (SELECT TOP(2) TID FROM Teacher ORDER BY TID) ORDER BY TID
T-SQL內置函數-聚合函數
SUM函數
返回表達式中所有值的和
SELECT SUM(Score) FROM Score WHERE SubID=1
MIN函數
返回表達式的最小值
SELECT MAX(Score) FROM Score WHERE SubID=1
MAX函數
返回表達式的最大值
SELECT MAX(Score) FROM Score WHERE SubID=1
COUNT函數
返回組中項目的數量,如果用COUNT統計一列的數量如果該列有NULL值則不計算這列,因此一般使用COUNT函數統計某張表中的實體數量使用*查詢
SELECT COUNT(*) FROM Student
DISTINCT函數
返回一個集合,並從指定集合中刪除重複的元組
SELECT DISTINCT(StuID) FROM Score