-
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]%‘