-
Between..And
--between...and...在數據庫內部是做作特殊優化的,執行效率比> and<等這種方式快;
--between a and b 相當于:字段>=a and字段<=b
例如:
SELECT * FROM dbo.MyStudent WHERE S_Age BETWEEN 20 AND 30
SELECT * FROM dbo.MyStudent WHERE S_Age>=20 AND S_Age<=30
Between ..and還可以做分頁。
比如,我現在設置每一頁顯示3條數據
傳統的做法:
第一頁:
SELECT TOP 3 * FROM dbo.MyStudent
第二頁:
SELECT *FROM dbo.MyStudent WHERE S_ID BETWEEN 4 AND 6
...
總結分頁:
SELECT * FROM dbo.MyStudent WHERE S_ID BETWEEN (當前頁-1)*頁容量+1 AND 當前頁*頁容量
-
IN關鍵字
判斷一個列的值,是否在括號內:
SELECT * FROM dbo.MyStudent WHERE S_Gender IN ('女')--正確
SELECT * FROM dbo.MyStudent WHERE S_Gender IN(1) --錯誤,數據類型不同【在將 varchar 值 '男' 轉換成數據類型 int 時失敗。】
-
模糊查詢
使用系統已經定義好的通配符,按照定義的規則匹配數據,如果能匹配就查出來:
通配符,匹配符:_(下劃線),%(百分號),[](中括號),^(尖括號)
_代表一個任意字符;
%代表零個或多個任意字符;
[]中括號代表一個字符的取值區間;
^配和[]使用,表示不是這個區間。注意,^z字符是數據庫不兼容的,SQL Server可以用,其他數據庫用not like
--查找姓“張”的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '張%'
--查找名字中包含字母‘o’的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '%o%'
--查找名字的第二位是字母'i'的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '_i%'
--取值區間,用的很少。。
--查詢中間任何位置有字母的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '%[a-z]%'
--取值區間,用的很少。。
--查詢中間任何位置有數字的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '%[0-9]%'
--查找名字中有字母或數字的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '%[0-9,a-z]%'
--SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '張四'
--表中有名字為張四的學生,現在判斷,_(下劃線)是否可以匹配零個字符。如果可以的話,下面的這句SQL可以檢索到數據
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '張四_'
事實證明:_下滑線不能匹配零個字符,也就是說,下劃線代表后面必須有一個字符!!!
--查詢最后一位不是數字的學生信息
SELECT * FROM dbo.MyStudent WHERE S_Name LIKE '%[^0-9]%'
文章列表