本章目录
一.mysql高级语句分类
1.1 按关键字排序
- 使用ORDER BY语句来实现排序
- 排序可针对一个或多个字段
- ASC: 升序,默认排序方式
- DESC:降序
以任务管理器来演示一下,默认以升序排列
再点击一下就变成了以降序排列
语法结构:SELECT column1, column2, … FROM table_name ORDER BY column1, column2, … ASC|DESC;
1.1.1 按单字段排序
范例:
创建一个数据库,并添加一些数据
语句:select id,name,level from player where level>=45 order by level desc;
升序后面改为asc,不加也可以
1.1.1 按多字段排序
语句:select id,name,level from player where level>=45 order by level desc,id desc;
1.2 对结果进行分组
- 使用GROUP BY语句来实现分组
- 通常结合聚合函数一起使用
- 可以按一个或多个字段对结果进行分组
语法结构:SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name;
结合order by来使用
语句:select count(name),level from player where level>=45 group by level order by count(name) desc;
1.3 限制结果条目
- 只返回SELECT查询结果的第一行或前几行
- 使用LIMIT语句限制条目
- LIMIT语法结构
语法结构:SELECT column1, column2, … FROM table_name LIMIT [offset,] number
范例:
语法:select id,name,level from player limit 3;
语句·: select id,name,level from player order by level desc limit 3;
语句:select id,name,level from player limit 2,3;
1.4 设置别名
- 使用AS语句设置别名,关键字AS可省略
- 设置别名时,保证不能与库中其他表或字段名称冲突
- 别名的语法结构
针对于表设置
语法结构:SELECT column_name AS alias_name FROM table_name;
语句:select count(*) as number from player;
针对于字段设置
语法结构:SELECT column_name(s) FROM table_name AS alias_name;
语句:select p.id,p.name from player as p limit 3;
AS作为连接语句来使用
语句:create table tmp as select * from player;
1.5 通配符
- 用于替换字符中的部分字符
- 配合LIKE一起使用,并协同WHERE完成查询
- 常用通配符
1.% 表示零个,一个或多个
2._表示当字符
语句:select id,name,level from player where name like ‘s%’;
语句:select id,name,level from player where name like ‘%s’;
语句:select id,name,level from player where name like ‘%es%’;
语句:select id,name,level from player where name like ‘_uess’;
语句: select id,name,level from player where name like ‘use____’;
语句:select id,name,level from player where name like ‘shi_ley’;
通配符"%”和"_"组合使用的例子
语句:select id,name,level from player where name like ‘_es%’;
1.6 子查询
- 也称作内查询或者嵌套查询
- 先于主查询被执行,其结果将作为外层主查询的条件
- 在增删改查中都可以使用子查询
- 支持多层嵌套
- IN语句是用来判断某个值是否在给定的结果集中
IN 的语法结构如下
<表达式> [NOT] IN <子查询>
语句:select name,level from player where id in (select id from player where level>=45);
1.7 NULL值
- 表示缺失的值
- 与数字0或者空白(spaces)是不同的
- 使用IS NULL或IS NOT NULL进行判断
- NULL值和空值的区别:
1.空值长度为0,不占空间;NULL值的长度为Null,占用空间
2.IS NULL无法判断空值
3.空值使用"="或者<>"来处理
4.COUNT()计算时,Null会忽略,空值会加入计算
范例:
创建一个表test,该表包含不设置NOT NULL的字段,然后向表中插入不同的记录值,其中包括NULL值和实际有值的记录,
操作如下:
先创建一个名叫test表,并定于属性
再插入记录
最后查询有coin为空值和不为空值的记录
二.正则表达式
- 根据指定的匹配模式匹配记录中符合要求的特殊字符
- 使用REGEXP关键字指定匹配模式
- 常用匹配模式
^:匹配文本的开始字符
$:匹配文本的结束字符
. :匹配任意单个字符
*:匹配任意个前面的字符
+:匹配前面的字符 1 次或多次
p1|p2:匹配 p1 或 p2
[…]:匹配字符集合中的任意一个字符
[^…] :匹配不在括号中的任何字符 ‘
{n} :匹配前面的字符串 n 次
{n,m}:匹配前面的字符串至少 n 次,至多m 次 ‘
2.1 以特定字符串开头的记录
例如,在player表中查询以us开头的name字段并打印对应的id、name 和 level 记录。
语句:select id,name,level from player where name REGEXP ‘^us’;
2.2 以特定字符串结尾的记录
例如,在 player 表中查询以 ss 结尾的 name 字段并打印对应的 id、name 和 level 记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘ss$’;
2.3 包含指定字符串的记录
例如,在player表中查询包含ok字符串的name字段并打印对应的 id、name 和 level记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘ok’;
2.4 以“.”代替字符串中的任意一个字符的记录
例如,在player表中查询包含字符串shir 与 ey,且两个字符串之间只有一个字符的name 字段并打印对应的 id、name 和 level 记录.
语句 :select id,name,level from player where name REGEXP ‘shir.ey’;
2.5 匹配包含或者关系的记录
例如,在 player 表中查询包含字符串ok或者ss的name字段并打印对应的 id、name和 level 记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘ok|ss’;
2.6 匹配前面字符的任意多次
例如,在 player 表中查询包含三个或者更多个连续的 o 的 name 字段并打印对应的 id、name 和 level 记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘oooo*’;
2.7 “+”匹配前面字符至少一次
例如,在player表中查询包含四个或者更多个o的 name 字段并打印对应的 id、name和 level 记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘oooo+’;
2.8 匹配指定字符集中的任意一个
例如,在 player 表中查询包含以 d、e、f 开头的 name 字段并打印对应的 id、name 和level 记录,具体操作如下所示。
语句:select id,name,level from player where name REGEXP ‘1’;
-
d-f ↩︎