1.SQL SELECT TOP 子句
SELECT TOP 子句用于规定要返回的记录的数目,对于拥有数千条记录的大型表来说,是非常有用的。
MySQL 语法
SELECT column_name(s)
FROM table_name
LIMIT number;
实例:
SELECT *
FROM Persons
LIMIT 5;
如果是Oracle ,语法为
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
实例
SELECT *
FROM Persons
WHERE ROWNUM <=5;
SQL SELECT TOP PERCENT 实例
在 Microsoft SQL Server 中还可以使用百分比作为参数。
下面的 SQL 语句从 websites 表中选取前面百分之 50 的记录
SELECT TOP 50 PERCENT * FROM Websites;
2.SQL LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
SQL LIKE 语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
例如:选取 name 以字母 "G" 开始的所有客户:
SELECT * FROM Websites
WHERE name LIKE 'G%';
选取 name 以字母 "k" 结尾的所有客户:
SELECT * FROM Websites
WHERE name LIKE '%k';
选取 name 包含字母 "oo" 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '%oo%';
选取 name 不包含模式 "oo" 的所有客户:
SELECT * FROM Websites
WHERE name NOT LIKE '%oo%';
3.SQL 通配符
通配符可用于替代字符串中的任何其他字符,通配符与 SQL LIKE 操作符一起使用,通配符用于搜索表中的数据。
通配符有以下几种
% :替代 0 个或多个字符
_:替代一个字符
[character]:字符列中的任何单一字符
[!character]或[^character]:不在字符列中的任何单一字符
使用 SQL _ 通配符
选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites
WHERE name LIKE '_oogle';
选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站:
SELECT * FROM Websites
WHERE name LIKE 'G_o_le';
使用 SQL [charlist] 通配符
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';
选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites
WHERE name REGEXP '^[A-H]';
选取 name 不以 A 到 H 字母开头的网站:
SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';
其他学习者实践之后的例子:
其中搭配以上通配符可以让LIKE命令实现多种技巧:
1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
不过,MySQL 、SQLite 只支持 % 和 _ 通配符,不支持 [^charlist] 或 [!charlist] 通配符( MS Access 支持,微软 office 对通配符一直支持良好,但微软有时候的通配符不支持 %,而是 *,具体看对应软件说明)。通配符和正则不是一回事。
MySQL 和 SQLite 会把 like '[xxx]yyy' 的中括号当成普通字符,而不是通配符。
比如:
select * from persons WHERE City LIKE '[b]eijing'
将查出 city 为 [B]eijing 的行,而不是 city 为 beijing 的行。
MySQL 中要完成 [^charlist] 或 [!charlist] 通配符的查询效果,需要通过正则表达式来完成。
select * from persons WHERE City REGEXP '[b]eijing' SQLite不支持Regexp正则方法。
4.SQL IN 操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
选取 name 为 "Google" 或 "菜鸟教程" 的所有网站:
SELECT * FROM Websites
WHERE name IN ('Google','菜鸟教程');
5.SQL BETWEEN 操作符
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。
SQL BETWEEN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
下面的 SQL 语句选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites
WHERE alexa BETWEEN 1 AND 20;
选取 alexa 不在 1 和 20 之间的所有网站:
SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;
IN 和 BETWEEN 一起使用
选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND country NOT IN ('USA', 'IND');
BETWEEN 操作文本值
选取 name 以介于 'A' 和 'H' 之间字母开始的所有网站
SELECT * FROM Websites
WHERE name BETWEEN 'A' AND 'H';
SELECT * FROM Websites
WHERE name NOT BETWEEN 'A' AND 'H';
BETWEEN 操作日期
选取 date 介于 '2016-05-10' 和 '2016-05-14' 之间的所有访问记录:
SELECT * FROM access_log
WHERE date BETWEEN '2016-05-10' AND '2016-05-14';