美文网首页
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 笔记系列二(查询规则)

    TOP 子句 语法: MySQL 语法 Oracle 语法 LIKE 操作符 LIKE 操作符 用于在 Where...

  • 第十章 SQL排序(二)

    第十章 SQL排序(二) 查询排序 InterSystems SQL提供了排序规则功能,可用于更改字段的排序规则或...

  • SQL语言学习(一)

    本系列内容为http://www.w3cschool.cn/sql 教程的自学笔记 SQL,指结构化查询语言,全称...

  • DVWA-SQL Injection(SQL注入)

    本系列文集:DVWA学习笔记 SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执...

  • SQL入门系列(六):多表查询

    以下内容来源于《漫画SQL》系列课程的学习笔记 这门课的链接:漫画SQL—网易云课堂 多表查询的前提是需要将两张表...

  • 初识MyBatis

    MyBatis学习笔记(二) Mapper XML文件配置 SQL映射文件几个的元素 ☆ Select查询语句 1...

  • 第九章 SQL查询数据库(二)

    第九章 SQL查询数据库(二) 调用用户定义函数的查询 InterSystems SQL允许您在SQL查询中调用类...

  • SQL学习笔记

    整体的SQL学习笔记,之后再分开来详细写。 查询 SELECT Select查询某些属性列的语法 Select查询...

  • First week

    用于自己复习笔记,初学MARKDOWN(W3SCHOOL学习) SQL SQL 指结构化查询语言SQL 使我们有能...

  • 11-mysqlSQL分析

    六星教育 - java-mysql优化1909 SQL优化 所谓SQL优化:基于MySQL的优化器查询规则来优化S...

网友评论

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

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