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