美文网首页
SQL-高阶-part1

SQL-高阶-part1

作者: Qiqi_da81 | 来源:发表于2019-04-23 17:02 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/ttjcgqtx.html