MySQL必知必会-第4章 检索数据

数据检索

查询语句

在这里插入图片描述

1.基本查询语句

-- 查询全部的字段
select * from 表名 as '表的别名'

2.查询数量限制

select [DISTINCT] 列名 as '展现出来的列名', ....
from 表名 as '给表起的别名'
limit 开始行(0开始), 取得行数 / limit 取得行数 offset 开始行(0开始), 

在这里插入图片描述
在这里插入图片描述

3.使用完全限定名

select 表名.字段1, 表名.字段2, ... 
from 数据库名.表名;

4.排序数据

不排序的情况下,数据并不是随机顺序显示,【而是以它在底层表中出现的顺序显示】,可以是数据最初添加到表中的顺序。

4.1 基本升序/降序排序
-- 默认按照升序排序,显示从小到大
select * from 表名 as 表别名 order by 列名;
select * from 表名 as 表别名 order by 列名 asc;

在这里插入图片描述
在这里插入图片描述

-- 显示使用降序排序
select * from 表名 as 表别名 order by 列名 desc;
-- 按多个字段进行排序
-- 先按照列名1降序排序,然后再按照列名2升序排列
-- 【注意点】如果想在多个列上降序,必须对每个列指定desc关键字
select * from 表名 as 表别名 order by 列名1 desc 列名2;

在这里插入图片描述
在这里插入图片描述

4.2 order by 和 limit 配合找最高值或最低值
-- 取最大值
select * from 表名 as 表别名 order by 列名 desc limit 1;

在这里插入图片描述

-- 取最小值
select * from 表名 as 表别名 order by 列名 [asc] limit 1;

在这里插入图片描述
在这里插入图片描述

5.where过滤

5.1 子句操作符
符号含义
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
>=大于等于
between … and …在…和…之间
is null…为空
5.2 NULL与不匹配

当想要选出某列不具有/具有特定值的行时,不返回该列为空的行。

5.3 AND 与 OR 操作符

and操作符优先级高于or操作符

5.4 IN 操作符
-- 用于指定条件范围
select * from 表名 as 表别名 where 列名 IN (1,2, ...)
5.5 NOT 操作符

用于在where子句中否定后跟条件的关键字
【tips】MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反;与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

5.6 LIKE 操作符

通配符:% 可以表示任意字符出现任意次数
通配符:_ 可以表示一个字符
【区分大小写匹配】根据MySQL的配置方式,匹配是可以区分大小写的。
【注意NULL】%不能与NULL进行匹配
【使用技巧】
1)尽量避免使用通配符;
2)尽量不要把通配符至于搜索模式的开始处,搜索起来是最慢的;
3)注意通配符防止的位置,放错地方则无法返回正确的结果。

6.正则表达式 REGEXP操作符

-- 1.正则表达式的基本使用【REGEXP 】
-- 只要列名所代表的列中包含模式串即返回该记录(不区分大小写)
select * from 表名 as 表别名 where 列名 REGEXP '模式串';
-- 2.正则表达式区分大小写 【BINARY】
select * from 表名 as 表别名 where 列名 REGEXP BINARY '模式串';
-- 3.进行多个模式串的匹配【| 符号】
select * from 表名 as 表别名 where 列名 REGEXP '模式串1|模式串2|...';
-- 4.使用[]定义一组单个字符,只匹配[]中的一个字符【[]符号】
select * from 表名 as 表别名 where 列名 REGEXP '[123] 模式串';
-- 5.匹配范围【-符号】
-- [0-9] [1-5] [a-z]等等都是合法的
select * from 表名 as 表别名 where 列名 REGEXP '[0-9] 模式串';
-- 6.模式串中的转义字符 用于匹配. - | [] \等特殊字符【\\符号】
-- 如果想找到包含'.'的记录, 下面的写法会匹配所有的记录
select * from 表名 as 表别名 where 列名 REGEXP '.';
-- 应该使用\\符号进行转义
select * from 表名 as 表别名 where 列名 REGEXP '\\.';
select * from 表名 as 表别名 where 列名 REGEXP '\\-';
-- 匹配反斜杠\本身
select * from 表名 as 表别名 where 列名 REGEXP '\\\';
-- 小结: 多数正则表达式使用一个\转移特殊字符,而MySQL使用两个\\
--       MySQL本身解释一个\,正则表达式库解释另一个\
正则表达式\符号用于引用元字符
元字符说明
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表
预定义字符类集
说明
[:alnum:]任意字母和数字[a-zA-Z0-9]
[:digit:]任意数字[0-9]
[:xdigit:]任意十六进制数字[0-9]
[:alpha:]任意字符 [a-zA-Z]
[:lower:]任意小写字母[a-z]
[:upper:]任意小写字母[A-Z]
[:blank:]空格和制表[\\t]
[:space:]包括空格在内的任意空白字符[\\f\\n\\r\\t\\v]
[:print:]任意可打印字符
[:graph:]任意可打印字符,但不包括空格
[:cntrl:]ASCII控制字符 ASCII 0到31和127
[:punct:]既不在[:alnum:] 又不在[:cntrl:]中的任意字符
重复元字符(匹配多个重复字符)
元字符说明
*匹配0个或多个前面出现的字符
+匹配1个或多个前面出现的字符
?匹配0个或1个前面出现的字符
{n}匹配n个 前面出现的字符
{n, }匹配不少于n个前面出现的字符
{n, m}匹配不少于n个 ,不多于m个前面出现的字符
定位元字符
元字符说明
^文本的开始位置, 同时可以在集合中用于否定该集合
$文本的结束位置
[[:<:]]词的开始位置
[[:>:]]词的结束位置
简单的正则表达式测试
-- 可以使用select语句进行简单的正则表达式测试 匹配返回1 不匹配返回0
select '待匹配串' REGEXP '模式串';
-- 例如 下面语句返回0, 因为hello中没有一个数字;
select 'hello' REGEXP '[0-9]';
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页