SQL-高阶-part1

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';

你可能感兴趣的:(SQL-高阶-part1)