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

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 参考手册-正则表达式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容