美文网首页
SQL 笔记系列二(查询规则)

SQL 笔记系列二(查询规则)

作者: _发强 | 来源:发表于2018-11-20 15:41 被阅读0次

    TOP 子句

    TOP 子句用于规定要返回的记录的数目。
    
    注释:并非所有的数据库系统都支持 TOP 子句。
    

    语法:

    SELECT TOP number|percent column_name(s) FROM table_name
    select top 2 * from User -- 查询前 2 条数据
    
    select top 50 percent * from User -- 查询 50% 的数据
    

    MySQL 语法

    select column_name(s) from table_name limit number
    
    select * from User limit 5  -- 查询前 5 条数据
    

    Oracle 语法

    select column_name(s) from table_name where rownum <= number
    
    select * from User where rounum<=5   -- 查询前 5 条数据
    

    LIKE 操作符

    LIKE 操作符 用于在 Where 子句中进行搜索某些特定条件(模糊查询)

    语法

    select column_name(s) from table_name where column_name like pattern
    

    示例

    -- 查询用户表中 手机号码为 1555开头的数据
    select * from User where phone_number like '1555%'
    
    -- 查询用户表中 手机号码包含 888 数字的人物姓名
    select name from User where phone_number like '%888%'
    
    -- 查询用户表中 手机号码是 6 结尾的所有数据
    select * from User where phone_number like '%6'
    
    

    通配符

    通配符 描述
    % 替代一个或多个字符
    _ 仅代替一个字符
    [charlist] 字符列中的任何单一字符
    [^charlist] 或者 [!charlist] 不在字符列中的任何单一字符
    • 使用 % 通配符
      用法参阅上面 LIKE 示例

    • 使用 _ 通配符

    -- 查询用户表中 名字为三个字,并且中间是 “发” 的用户
    select * from User where name like '_发_'
    
    -- 查询 User 表中 手机号码为 1555 开头 包含111 以28结尾的用户
    select * from User where phone_number like '1555_111_28'
    
    • 使用 [charlist] 通配符
    -- 查询 手机号以0、1、8、9 结尾的用户
    select * from User where phone_number like '%[0189]'
    

    注意

    [charlist] 通配符在 MySQL 中无效,实现方式是使用正则表达式:
    
    -- To find citys beginning with S or H 
    -- 查询用户表中城市名称以 S 或者 H 开头的
    select * from User where city REGEXP '^[S|H]'  
    
    -- To find phone_numbers ending with (0 or 1 or 8 or 9)
    -- 查询用户表中手机号尾数为 0、1、8、9 的用户。
    select * from User where phone_number regexp '[0|1|8|9]$' 
    
    -- To find city containing a 'Z' 
    -- 利用正则进行模糊查询,查询用户表中 city 包含 Z 的数据。
    select * from User where city rlike 'Z' 
    

    小结

    SQL 语句 在 MySQL 中查询规则整理如下:

    -- 查询名称以 b 开头的数据(不区分大小写)
    select * from User where name like 'b%'
    
    -- 查询名称以 ab 结尾
    select * from User where name like '%ab'
    
    -- 查询名称包含 w 字符
    select * from User where name like '%w%'
    
    -- 查询名称为 五个字符,使用_模式字符的五个实例
    select * from User where name like '_____'
    

    MySQL 使用正则表达式模式匹配

    关于正则表达式的一些特征:

    • . 匹配任何单个字符 。

    • 字符类[...]匹配括号内的任何字符。例如, [abc]匹配a, b或c。要命名一系列字符,请使用短划线。[a-z] 匹配任何字母,而[0-9] 匹配任何数字。

    • *匹配前面的事物的零个或多个实例。例如,x* 匹配任意数量的x字符, [0-9]匹配任意数量的数字,并.匹配任意数量的任何数字。

    • 如果模式匹配正在测试的值中的任何位置,则正则表达式模式匹配成功。(这与LIKE模式匹配不同,模式匹配仅在模式匹配整个值时才会成功。)

    • 锚定的图案,使得它必须在值的开头或结尾匹配正在测试中,使用^在一开始或$在图案的端部。

    示例
    正则匹配的关键字是 rlike (等价于 regexp)

    -- 查找名称 b 开头 (不区分大小写)
    select * from User where name rlike[/regexp] '^b'
    
    -- 查找 名称 a 或者 b 开头
    select * from User where name rlike '^[a|b]'
    
    -- 查找名称 a 结尾(不区分大小写)
    select * from User where name rlike 'a$'
    
    -- 查找名称 a 或 b 结尾
    select * from User where name rlike '[a|b]$'
    
    -- 查找名字中包含 w 字符
    select * from User where name rlike 'w'
    
    -- 如果需要强制使用正则表达式区分大小写 请使用 binary 关键字
    -- 查找 名字是 A 或者 B (区分大小写)
    select * from User where name rlike binary '[A|B]$'
    
    -- 查询名字是 7 个字符的数据 (等同于 where name like '_______')
    写法1:select * form User where name rlike '^.......$'
    写法2:select * from User where name rlike '^.{7}$'
    
    

    关于更多 MySQL 的正则表达式请参考 MySQL 8.0 参考手册-正则表达式

    相关文章

      网友评论

          本文标题:SQL 笔记系列二(查询规则)

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