07:MySQL基本操作(DQL)

 前言:

本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。

视频教程地址连接: 2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程_哔哩哔哩_bilibili

上一篇:(06:MySQL约束

06:MySQL约束_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程_哔哩哔哩_bilibili上一篇:(05:MySQL基本操作(DML))https://blog.csdn.net/qq_52906615/article/details/122006363https://blog.csdn.net/qq_52906615/article/https://blog.csdn.net/qq_52906615/article/details/122006559下一篇:(08:MySQL多表操作

08:MySQL多表操作_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程_哔哩哔哩_bilibili上一篇:(07:MySQL基本操作(DQL))07:MySQL基本操作(DQL)_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序https://blog.csdn.net/qq_52906615/article/details/122019598?spm=1001.2014.3001.5501


目录

一、DQL解释

1、概念

2、应用

3、语法格式

4、简化版语法

二、数据准备

1、创建数据库和表:

2、添加数据:

三、简单查询

四、运算符

1、简介

2、算术运算符查询

1、算数运算符

2、示例

3、条件查询

1、比较运算符

2、逻辑运算符

3、示例

4、位运算符查询

1、位运算符

2、示例

五、排序查询(order by)

1、介绍

2、特点

3、操作

六、聚合查询

1、简介

2、操作

3、null值处理

1、介绍

2、操作

七、分组查询(group by)

1、简介

2、操作

3、分组之后的条件筛选-having

4、格式

5、操作

八、分页查询(limit)

1、简介

2、格式

3、操作

九、Insert_into_select语句

1、简介

2、格式

3、测试

十、总结

十一、练习

1、练习(1)(P55)

2、练习(2)(P56)

十二、正则表达式查询介绍

1、介绍

2、格式

十三、正则表达式查询操作


一、DQL解释

1概念

  • 数据库管理系统一个重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。
  • MySQL提供了功能强大、灵活的语句来实现这些操作。
  • MySQL数据库使用select语句来查询数据。

2应用

07:MySQL基本操作(DQL)_第1张图片

3语法格式

select

  [all|distinct]

  <目标列的表达式1> [别名],

  <目标列的表达式2> [别名]...

from <表名或视图名> [别名],<表名或视图名> [别名]...

[where<条件表达式>]

[group by <列名>

[having <条件表达式>]]

[order by <列名> [asc|desc]]

[limit <数字或者列表>];

4简化版语法

select *| 列名 from 表 where 条件

二、数据准备

1、创建数据库和表:

-- 创建数据库

create database if not exist mydb2;

use mydb2;

-- 创建商品表:

create table product(

 pid int primary key auto_increment, -- 商品编号

 pname varchar(20) not null , -- 商品名字

 price double,  -- 商品价格

 category_id varchar(20) -- 商品所属分类

);

2、添加数据:

insert into product values(null,'海尔洗衣机',5000,'c001');

insert into product values(null,'美的冰箱',3000,'c001');

insert into product values(null,'格力空调',5000,'c001');

insert into product values(null,'九阳电饭煲’,200,'c001');

insert into product values(null,'啄木鸟衬衣',300,'c002');

insert into product values(null,'恒源祥西裤',800,'c002');

insert into product values(null,'花花公子夹克',440,'c002');

insert into product values(null,'劲霸休闲裤',266,'c002');

insert into product values(null,'海澜之家卫衣',180,'c002');

insert into product values(null,'杰克琼斯运动裤',430,'c002');

insert into product values(null,'兰蔻面霜',300,'c003');

insert into product values(null,'雅诗兰黛精华水',200,'c003');

insert into product values(null,'香奈儿香水',350,'c003');

insert into product values(null,'SK-II神仙水',350,'c003');

insert into product values(null,'资生堂粉底液',180,'c003');

insert into product values(null,'老北京方便面',56,'c004');

insert into product values(null,'良品铺子海带丝',17,'c004');

insert into product values(null,'三只松鼠坚果',88,null);

三、简单查询

-- 1.查询所有的商品. 

select *  from product;

 

-- 2.查询商品名和商品价格.

select pname,price from product;

 

-- 3.别名查询.使用的关键字是as(as可以省略的). 

-- 3.1表别名:

select * from product as p;

select * from product p;

select p.id,u.id from product p,user u;

-- 3.2列别名:

select pname as pn from product;

select pname pn from product;

 

-- 4.去掉重复值. 

select distinct price from product;

select distinct * from product;

 

-- 5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.

select pname,price+10 from product;

四、运算符

1、简介

  • 数据库中的表结构确立后,表中的数据代表的意义就已经确定。通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据。
  • 例如,学生表中存在一个birth字段,这个字段表示学生的出生年份。而运用MySQL的算术运算符用当前的年份减学生出生的年份,那么得到的就是这个学生的实际年龄数据。
  • MySQL支持4种运算符:算术运算符比较运算符逻辑运算符位运算符

2、算术运算符查询

1、算数运算符

算术运算符

说明

+

加法运算

-

减法运算

*

乘法运算

/ 或  DIV

除法运算,返回商

% 或  MOD

求余运算,返回余数

2、示例

select 6 + 2;

select 6 - 2;

select 6 * 2;

select 6 / 2;

select 6 % 2;

 

-- 将每件商品的价格加10

select name,price + 10 as new_price from product;

-- 将所有商品的价格上调10%

select pname,price * 1.1 as new_price from product;

3、条件查询

1、比较运算符

比较运算符

说明

=

等于

<        <=

小于和小于等于

>        >=

大于和大于等于

<=>

安全的等于,两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0

<> !=

不等于

IS NULL  ISNULL

判断一个值是否为 NULL

IS NOT NULL

判断一个值是否不为 NULL

LEAST

当有两个或多个参数时,返回最小值

GREATEST

当有两个或多个参数时,返回最大值

BETWEEN AND

判断一个值是否落在两个值之间

IN

判断一个值是IN列表中的任意一个值

NOT IN

判断一个值不是IN列表中的任意一个值

LIKE

通配符匹配

REGEXP

正则表达式匹配

2、逻辑运算符

逻辑运算符

说明

NOT 或者 !

逻辑非

AND 或者 &&

逻辑与

OR 或者 ||

逻辑或

XOR

逻辑异或

3、示例

-- 查询商品名称为“海尔洗衣机”的商品所有信息:

select * from product where pname = '海尔洗衣机';

-- 查询价格为800商品

select * from product where price = 800;

 

-- 查询价格不是800的所有商品

select * from product where price != 800;

select * from product where price <> 800;

select * from product where not(price = 800);

 

-- 查询商品价格大于60元的所有商品信息

select * from product where price > 60;

 

-- 查询商品价格在200到1000之间所有商品

select * from product where price >= 200 and price <=1000;

select * from product where price between 200 and 1000;

 

-- 查询商品价格是200或800的所有商品

select * from product where price = 200 || price = 800;

select * from product where price = 200 or price = 800;

select * from product where price in (200,800);

 

-- 查询含有'裤'字的所有商品

select * from product where pname like '%裤%';

-- 查询以'海'开头的所有商品

select * from product where pname like '海%';

-- 查询第二个字为'蔻'的所有商品

select * from product where pname like '_蔻%';

 

-- 查询category_id为null的商品

select * from product where category_id is null;

-- 查询category_id不为null分类的商品

select * from product where category_id is not null;

 

-- 使用least求最小值,如果求最小值中有null,结果直接为null

select least(10, 20, 30); -- 10

select least(10, null , 30); -- null

 

-- 使用greatest求最大值,如果求最大值中有null,结果直接为null

select greatest(10, 20, 30);

select greatest(10, null, 30); -- null

4、位运算符查询

1、位运算符

位运算符

说明

|

按位或

&

按位与

^

按位异或

<< 

按位左移

>> 

按位右移

~

按位取反,反转所有比特

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

2、示例

select 3&5; -- 位与

select 3|5; -- 位或

select 3^5; -- 位异或

select 3>>1; -- 位左移

select 3<<1; -- 位右移

select ~3;   -- 位取反


五、排序查询(order by

1、介绍

如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 order by 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。按字段的先后顺序来分主次,先排字段名1,再排字段名2

select 
字段名1,字段名2,……
from 表名
order by 字段名1 [asc|desc],字段名2[asc|desc]……

2、特点

1.asc代表升序,desc代表降序,如果不写默认升序

2.order by用于子句中可以支持单个字段,多个字段,表达式,函数,别名

3.order by子句,放在查询语句的最后面。LIMIT子句除外

3、操作

-- 1.使用价格排序(降序)

select * from product order by price desc;

-- 2.在价格排序(降序)的基础上,以分类排序(降序)

select * from product order by price desc,category_id asc;

-- 3.显示商品的价格(去重复),并排序(降序),前面不能加其他字段

select distinct price from product order by price desc;

六、聚合查询

1、简介

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

聚合函数

作用

count()

统计指定列不为NULL的记录行数

sum()

计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0

max()

计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

min()

计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

avg()

计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0

2、操作

-- 1 查询商品的总条数

select count(*) from product;

-- 2 查询价格大于200商品的总条数

select count(*) from product where price > 200;

-- 3 查询分类为'c001'的所有商品的总和

select sum(price) from product where category_id = 'c001';

-- 4 查询商品的最大价格

select max(price) from product;

-- 5 查询商品的最小价格

select min(price) from product;

-- 6 查询分类为'c002'所有商品的平均价格

select avg(price) from product where category_id = 'c002';

3null值处理

1、介绍

count函数对null值的处理

如果count函数的参数为星号(*),则统计所有记录的个数。而如果参数为某字段,不统计含null值的记录个数

sum和avg函数对null值的处理

这两个函数忽略null值的存在,就好象该条记录不存在一样。

max和min函数对null值的处理

max和min两个函数同样忽略null值的存在。

2、操作

-- 创建表

create table test_null(

 c1 varchar(20),

 c2 int

);

-- 插入数据

insert into test_null values('aaa',3);

insert into test_null values('bbb',3);

insert into test_null values('ccc',null);

insert into test_null values('ddd',6);

 

-- 测试,结果:4-4-3

select count(*), count(1), count(c2) from test_null;

-- 测试,结果:12-6-4,avg也默认不处理null,如果想处理可以加default

select sum(c2),max(c2),min(c2),avg(c2) from test_null;

七、分组查询(group by

1、简介

分组查询是指使用group by字句对查询信息进行分组。

select 字段1,字段2 from 表名 group by 分组字段 having 分组条件;

2、操作

-- 1 统计各个分类商品的个数

select category_id ,count(*) from product group by category_id ;

07:MySQL基本操作(DQL)_第2张图片

  • 先执行分组、然后将分组以后的id提取出来,再执行统计每组的个数,最后进行查询操作。
  • group by后面可用逗号隔开加多个参数,只有都相同,才会分往同一个组。
  • 如果要进行分组的话,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现:因为会导致列不匹配,例如:当按省分组学生后,只能出现省和该省统计的人数,如果出现其他列,如学生名,就会报错。最先执行了分组操作后,已经划分。select count(*) from student group by '','''';

3、分组之后的条件筛选-having

  • 分组之后对统计结果进行筛选的话必须使用having,不能使用where
  • where子句用来筛选 FROM 子句中指定的操作所产生的行
  • group  by  子句用来分组 WHERE 子句的输出。
  • having 子句用来从分组的结果中筛选行

4、格式

select 字段1,字段2… from 表名 group by 分组字段 having 分组条件;

5、操作

-- 2.统计各个分类商品的个数,且只显示个数大于3的信息

select category_id ,count(*) from product group by category_id having count(*) > 3;

八、分页查询(limit

1、简介

分页查询在项目开发中常见,由于数据量很大,显示屏长度有限,因此对数据需要采取分页显示方式。例如数据共有30条,每页显示5条,第一页显示1-5条,第二页显示6-10条。 

2、格式

-- 方式1-显示前n条

select 字段1,字段2... from 表明 limit n

-- 方式2-分页显示

select 字段1,字段2... from 表明 limit m,n

m: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数

n: 整数,表示查询多少条数据

3、操作

-- 查询product表的前5条记录

select * from product limit 5

-- 从第4条开始显示,显示5条

select * from product limit 3,5

SQL关键词执行顺序:from-->where-->grop by-->count()-->select-->having-->order by-->limit


九、Insert_into_select语句

1、简介

  • 将一张表的数据导入到另一张表中,可以使用INSERT INTO SELECT语句 。
  • 将一张表的数据导入到另一张表中,有两种选择 SELECT INTO 和 INSERT INTO SELECT 。

2、格式

insert into Table2(field1,field2,…) select value1,value2,… from Table1;

insert into Table2 select * from Table1;

要求目标表Table2必须存在

 

SELECT vale1, value2 into Table2 from Table1

 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。

3、测试

07:MySQL基本操作(DQL)_第3张图片


十、总结

07:MySQL基本操作(DQL)_第4张图片


十一、练习

1、练习(1)(P55

CREATE DATABASE IF NOT EXISTS mydb2;

USE mydb2;

CREATE TABLE IF NOT EXISTS student(

id INT,

`name` VARCHAR(20),

gender VARCHAR(20),

chinese INT,

english INT,

math INT

);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(1,'张明','男',89,78,90);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(2,'李进','男',67,53,95);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(3,'王五','女',87,78,77);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(4,'李一','女',88,98,92);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(5,'李财','男',82,84,67);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(6,'张宝','男',55,85,45);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(7,'黄蓉','女',75,65,30);

INSERT INTO student(id,`name`,gender ,chinese,english,math)VALUES(7,'黄蓉','女',75,65,30);

 

-- 查询表中所有学生的信息。

SELECT * FROM student;

-- 查询表中所有学生的姓名和对应的英语成绩。

SELECT `name`,english FROM student;

-- 过滤表中重复数据。

SELECT distct * FROM student;

-- 统计每个学生的总分。

SELECT `name`,(chinese + english + math) AS total_score FROM student;

-- 使用别名表示学生分数。

SELECT `name`,chinese '语文成绩',english '英语成绩',math '数学成绩' FROM student;

-- 查询英语成绩大于90分的同学

SELECT * FROM `student` WHERE `english`>90;

-- 查询总分大于200分的所有同学

SELECT * FROM `student` WHERE (chinese + english + math)>200;

-- 查询英语分数在80—90之间的同学。

SELECT * FROM `student` WHERE `english` BETWEEN 80 AND 90;

SELECT * FROM `student` WHERE `english` >= 80 AND `english` <=90;

-- 查询英语分数不在80—90之间的同学。

SELECT * FROM `student` WHERE `english` NOT BETWEEN 80 AND 90;

SELECT * FROM `student` WHERE NOT (`english` BETWEEN 80 AND 90);

SELECT * FROM `student` WHERE `english` < 80 || `english` >90;

-- 查询数学分数为89,90,91的同学。

SELECT * FROM `student` WHERE `math` IN (89,90,91);

-- 查询数学分数不为89,90,91的同学。

SELECT * FROM `student` WHERE `math` NOT IN (89,90,91);

SELECT * FROM `student` WHERE NOT `math` IN (89,90,91);

-- 查询所有姓李的学生英语成绩。

SELECT `name`,`english` FROM `student` WHERE `name` LIKE '李%';

-- 查询数学分80并且语文分80的同学

SELECT * FROM `student` WHERE `math` = 80 AND `chinese` = 80;

-- 杳询英语80或者总分200的同学

SELECT * FROM `student` WHERE `english` = 80 OR (chinese + english + math)=200;

-- 对数学成绩降序排序后输出。

SELECT * FROM `student` ORDER BY `math` DESC;

-- 对总分排序后输出,然后再按从高到低的顺序输出

SELECT `name`,(chinese + english + math) AS total_score FROM `student` ORDER BY (chinese + english + math) DESC;

-- 对姓李的学生成绩排序输出

SELECT `name`,(chinese + english + math) AS total_score FROM `student` WHERE `name` LIKE '李%' ORDER BY (chinese + english + math) DESC;

-- 查询男生和女生分别有多少人,并将人数降序排序输出

SELECT `gender`,COUNT(*) AS total_cnt FROM `student` GROUP BY `gender` HAVING total_cnt>= 4 ORDER BY total_cnt DESC;

2、练习(2)(P56

USE mydb2;

CREATE TABLE IF NOT EXISTS emp(

empno INT, -- 员工编号

ename VARCHAR(50), -- 员工名字

job VARCHAR(50),-- 工作名字

mgr INT, -- 上级领导编号

hiredate DATE,-- 入职日期

sal INT,-- 薪资

comm INT, -- 奖金

deptno INT -- 部门编号

);

INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);

INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);

INSERT INTO emp VALUES(7521,'WARD' ,'SALESMAN',7698,'1981-02-22',1250,500,30);

INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);

INSERT INTO emp VALUES(7654,'MARIIN','SALESBAN',7698,'1981-09-28',1250,1400,30);

INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);

INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);

INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);

INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17' ,5000,NULL,10);

INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);

INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);

INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);

INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);

INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

 

-- 1、按员工编号升序排列不在10号部门工作的员工信息

SELECT * FROM `emp` WHERE NOT (`deptno` = 10) ORDER BY `empno`;

SELECT * FROM `emp` WHERE `deptno` != 10 ORDER BY `empno`;

-- 2、查询姓名第二个字母不是”A”且薪水大于1000元的员工信息,按年薪降序排列

-- ifnull(comm, 0)如果comm的值为null,则当做0,不为null,则还是原来的值

SELECT * FROM `emp` WHERE `ename` NOT LIKE '_A%' AND `sal` > 1000 ORDER BY (`sal`*12+ IFNULL(comm,0)) DESC;

-- 3、求每个部门的平均薪水

SELECT `deptno`,AVG(`sal`) AS AVG_sal FROM `emp` GROUP BY `deptno` ORDER BY AVG_sal DESC;

-- 4、求各个部门的最高薪水

SELECT `deptno`,MAX(`sal`) AS MAX_sal FROM `emp` GROUP BY `deptno` ORDER BY MAX_sal DESC;

-- 5、求每个部门每个岗位的最高薪水

SELECT `deptno`,`job`,MAX(`sal`) FROM `emp` GROUP BY `deptno`,`job` ORDER BY `deptno`;

-- 6、求平均薪水大于2000的部门编号

SELECT `deptno`, AVG(`sal`) AS avg_sal FROM `emp` GROUP BY `deptno` HAVING avg_sal > 2000;

-- 7、将部门平均薪水大于1500的部门编号列出来,按部门平均薪水降序排列

SELECT `deptno`, AVG(`sal`) AS avg_sal FROM `emp` GROUP BY `deptno` HAVING avg_sal > 1500 ORDER BY avg_sal DESC;

-- 8、选择公司中有奖金的员工姓名,工资

SELECT `ename`,(`sal`+IFNULL(comm,0)) AS sal FROM `emp` WHERE `comm` IS NOT NULL;

-- 9、查询员工最高工资和最低工资的差距

SELECT (MAX(`sal`)-MIN(`sal`)) AS '薪资差距' FROM `emp`;

十二、正则表达式查询介绍

1介绍

正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。

MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。

2、格式

模式

描述

^

匹配输入字符串的开始位置。

$

匹配输入字符串的结束位置。

.

匹配除 "\n" 之外的任何单个字符。

[...]

字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。

[^...]

负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。

p1|p2|p3

匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。


十三、正则表达式查询操作

-- ^ 在字符串开始处进行匹配

SELECT  'abc' REGEXP '^a'; -- 1

 

-- $ 在字符串末尾开始匹配

SELECT  'abc' REGEXP 'a$'; -- 0

SELECT  'abc' REGEXP 'c$'; -- 1

 

-- . 匹配任意字符

SELECT  'abc' REGEXP '.b'; -- 1

SELECT  'abc' REGEXP '.c'; -- 1

SELECT  'abc' REGEXP 'a.'; -- 1

 

-- [...] 匹配括号内的任意单个字符,后面括号中的任意字符是否在前边出现

SELECT  'abc' REGEXP '[xyz]'; -- 0

SELECT  'abc' REGEXP '[xaz]'; -- 1

 

-- [^...] 注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配

SELECT  'a' REGEXP '[^abc]'; -- 0

SELECT  'x' REGEXP '[^abc]'; -- 1

SELECT  'abc' REGEXP '[^a]'; -- 1

 

-- a* 匹配0个或多个a,包括空字符串。 可以作为占位符使用.有没有指定字符都可以匹配到数据

SELECT 'stab' REGEXP '.ta*b'; -- 1

SELECT 'stb' REGEXP '.ta*b'; -- 1

SELECT '' REGEXP 'a*'; -- 1

 

-- a+  匹配1个或者多个a,但是不包括空字符

SELECT 'stab' REGEXP '.ta+b'; -- 1

SELECT 'stb' REGEXP '.ta+b'; -- 0

 

-- a?  匹配0个或者1个a

SELECT 'stb' REGEXP '.ta?b'; -- 1

SELECT 'stab' REGEXP '.ta?b'; -- 1

SELECT 'staab' REGEXP '.ta?b'; -- 0

 

-- a1|a2  匹配a1或者a2,

SELECT 'a' REGEXP 'a|b'; -- 1

SELECT 'b' REGEXP 'a|b'; -- 1

SELECT 'b' REGEXP '^(a|b)'; -- 1

SELECT 'a' REGEXP '^(a|b)'; -- 1

SELECT 'c' REGEXP '^(a|b)'; -- 0

 

-- a{m} 匹配m个a

SELECT 'auuuuc' REGEXP 'au{4}c'; -- 1

SELECT 'auuuuc' REGEXP 'au{3}c'; -- 0

 

-- a{m,n} 匹配m到n个a,包含m和n

SELECT 'auuuuc' REGEXP 'au{3,5}c'; -- 1

SELECT 'auuuuc' REGEXP 'au{4,5}c'; -- 1

SELECT 'auuuuc' REGEXP 'au{5,10}c'; -- 0

 

-- (abc) abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。

SELECT 'xababy' REGEXP 'x(abab)y'; -- 1

SELECT 'xababy' REGEXP 'x(ab)*y'; -- 1

SELECT 'xababy' REGEXP 'x(ab){1,2}y'; -- 1

 上一篇:(06:MySQL约束

06:MySQL约束_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程_哔哩哔哩_bilibili上一篇:(05:MySQL基本操作(DML))https://blog.csdn.net/qq_52906615/article/details/122006363https://blog.csdn.net/qq_52906615/article/https://blog.csdn.net/qq_52906615/article/details/122006559下一篇:(08:MySQL多表操作

08:MySQL多表操作_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql入门到高级全套教程_哔哩哔哩_bilibili上一篇:(07:MySQL基本操作(DQL))07:MySQL基本操作(DQL)_意莫ღ的博客-CSDN博客前言:本系列博客主要参考黑马程序员视频教程,仅供学习使用,整理不易转载请注明出处,多谢(*^▽^*)~。视频教程地址连接: 2022黑马程序https://blog.csdn.net/qq_52906615/article/details/122019598?spm=1001.2014.3001.5501

你可能感兴趣的:(MySQL,mysql,数据库)