你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)

本章目录

  • 一.mysql高级语句分类
    • 1.1 按关键字排序
      • 1.1.1 按单字段排序
      • 1.1.1 按多字段排序
    • 1.2 对结果进行分组
    • 1.3 限制结果条目
    • 1.4 设置别名
    • 1.5 通配符
    • 1.6 子查询
    • 1.7 NULL值
  • 二.正则表达式
    • 2.1 以特定字符串开头的记录
    • 2.2 以特定字符串结尾的记录
    • 2.3 包含指定字符串的记录
    • 2.4 以“.”代替字符串中的任意一个字符的记录
    • 2.5 匹配包含或者关系的记录
    • 2.6 匹配前面字符的任意多次
    • 2.7 “+”匹配前面字符至少一次
    • 2.8 匹配指定字符集中的任意一个

一.mysql高级语句分类

1.1 按关键字排序

  • 使用ORDER BY语句来实现排序
  • 排序可针对一个或多个字段
  • ASC: 升序,默认排序方式
  • DESC:降序

以任务管理器来演示一下,默认以升序排列

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第1张图片

再点击一下就变成了以降序排列
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第2张图片

语法结构:SELECT column1, column2, … FROM table_name ORDER BY column1, column2, … ASC|DESC;

1.1.1 按单字段排序

范例:

创建一个数据库,并添加一些数据

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第3张图片

语句:select id,name,level from player where level>=45 order by level desc;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第4张图片

升序后面改为asc,不加也可以
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第5张图片

1.1.1 按多字段排序

语句:select id,name,level from player where level>=45 order by level desc,id desc;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第6张图片

1.2 对结果进行分组

  • 使用GROUP BY语句来实现分组
  • 通常结合聚合函数一起使用
  • 可以按一个或多个字段对结果进行分组

语法结构:SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第7张图片

结合order by来使用

语句:select count(name),level from player where level>=45 group by level order by count(name) desc;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第8张图片

1.3 限制结果条目

  • 只返回SELECT查询结果的第一行或前几行
  • 使用LIMIT语句限制条目
  • LIMIT语法结构

语法结构:SELECT column1, column2, … FROM table_name LIMIT [offset,] number

范例:
语法:select id,name,level from player limit 3;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第9张图片

语句·: select id,name,level from player order by level desc limit 3;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第10张图片

语句:select id,name,level from player limit 2,3;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第11张图片

1.4 设置别名

  • 使用AS语句设置别名,关键字AS可省略
  • 设置别名时,保证不能与库中其他表或字段名称冲突
  • 别名的语法结构

针对于表设置

语法结构:SELECT column_name AS alias_name FROM table_name;

语句:select count(*) as number from player;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第12张图片

针对于字段设置

语法结构:SELECT column_name(s) FROM table_name AS alias_name;

语句:select p.id,p.name from player as p limit 3;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第13张图片

AS作为连接语句来使用

语句:create table tmp as select * from player;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第14张图片

1.5 通配符

  • 用于替换字符中的部分字符
  • 配合LIKE一起使用,并协同WHERE完成查询
  • 常用通配符
    1.% 表示零个,一个或多个
    2._表示当字符

语句:select id,name,level from player where name like ‘s%’;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第15张图片

语句:select id,name,level from player where name like ‘%s’;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第16张图片

语句:select id,name,level from player where name like ‘%es%’;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第17张图片

语句:select id,name,level from player where name like ‘_uess’; 你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第18张图片

语句: select id,name,level from player where name like ‘use____’;
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第19张图片

语句:select id,name,level from player where name like ‘shi_ley’;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第20张图片

通配符"%”和"_"组合使用的例子

语句:select id,name,level from player where name like ‘_es%’;

你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第21张图片

1.6 子查询

  • 也称作内查询或者嵌套查询
  • 先于主查询被执行,其结果将作为外层主查询的条件
  • 在增删改查中都可以使用子查询
  • 支持多层嵌套
  • IN语句是用来判断某个值是否在给定的结果集中

IN 的语法结构如下
<表达式> [NOT] IN <子查询>

语句:select name,level from player where id in (select id from player where level>=45);
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第22张图片

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表,并定于属性你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第23张图片

再插入记录在这里插入图片描述

最后查询有coin为空值和不为空值的记录
你知道mysql的高级语句有哪些吗?mysql高级语句的用法(一)_第24张图片

二.正则表达式

  • 根据指定的匹配模式匹配记录中符合要求的特殊字符
  • 使用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’;


  1. d-f ↩︎

你可能感兴趣的