T-SQL--分頁、內置函數

T-SQL基礎

T-SQL的組成

  1. 數據定義語言:(DDL,Data Dfinition Language)
  2. 數據操縱語言:(DML,Data Manipulation Language)
  3. 數據控制語言:(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分頁查詢

分頁查詢的必要

  1. 針對於目標數據量龐大的查詢結果,爲了能夠快速查詢

  2. 分頁查詢有助於應用程序對數據的一個顯示

如何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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章