MySQL之过滤条件
9290 字
46 分钟
MySQL之过滤条件
- 1数据库初识
- 2SQL语句介绍
- 3MySQL数据库安装
- 4SQL语句基础
- 5SQL语句操作MySQL数据库基础
- 6MySQL之存储引擎
- 7MySQL之基本数据类型
- 8MySQL之约束条件
- 9MySQL之过滤条件本文
- 10多表查询和子查询
- 11多表查询练习题
- 12Navicate安装
- 13PDManer(元数建模)
- 14Tabby
- 15PyMySQL模块
- 16MySQL进阶知识之视图
- 17MySQL进阶知识之触发器
- 18MySQL进阶知识之事务
- 19MySQL进阶知识之存储过程
- 20MySQL进阶知识之函数
- 21MySQL进阶知识之流程控制
- 22MySQL进阶知识之索引
- 23MySQL进阶知识之事务隔离机制
- 24MySQL进阶知识之锁机制
- 25数据库的三大范式
- 26MySQL数据库小结
【一】查询语法
【1】语法
select */字段名 from 表名 where 筛选条件;【2】执行顺序
fromwhereselect【3】模版
- 虽然执行顺序和书写顺序不一致,但是可以按照书写顺序写SQL语句
# 先用 * 占位,再去补全完整的 SQL 语句select * from * where *# * 替换成想要的字段【二】数据准备
【1】创建数据库
drop database if exists emp_data;create database emp_data;【2】创建表
use emp_data;create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum("male","female") not null default "male", age int(3) unsigned not null default 28, hire_date date not null, post varchar(50), post_comment varchar(100), salary double(15,2), office int, depart_id int);- 查看表结构
desc emp;+--------------+-----------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------------+-----------------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(20) | NO | | NULL | || sex | enum('male','female') | NO | | male | || age | int(3) unsigned | NO | | 28 | || hire_date | date | NO | | NULL | || post | varchar(50) | YES | | NULL | || post_comment | varchar(100) | YES | | NULL | || salary | double(15,2) | YES | | NULL | || office | int(11) | YES | | NULL | || depart_id | int(11) | YES | | NULL | |+--------------+-----------------------+------+-----+---------+----------------+10 rows in set (0.01 sec)
【3】插入测试数据
insert into emp(name, sex, age, hire_date, post, salary, office, depart_id) values("dream", "male", 78, '20220306', "陌夜痴梦久生情", 730.33, 401, 1), # 以下是教学部("mengmeng", "female", 25, '20220102', "teacher", 12000.50, 401, 1),("xiaomeng", "male", 35, '20190607', "teacher", 15000.99, 401, 1),("xiaona", "female", 29, '20180906', "teacher", 11000.80, 401, 1),("xiaoqi", "female", 27, '20220806', "teacher", 13000.70, 401, 1),("suimeng", "male", 33, '20230306', "teacher", 14000.62, 401, 1), # 以下是销售部("娜娜", "female", 69, '20100307', "sale", 300.13, 402, 2),("芳芳", "male", 45, '20140518', "sale", 400.45, 402, 2),("小明", "male", 34, '20160103', "sale", 350.80, 402, 2),("亚洲", "female", 42, '20170227', "sale", 320.99, 402, 2),("华华", "female", 55, '20180319', "sale", 380.75, 402, 2),("田七", "male", 44, '20230808', "sale", 420.33, 402, 2), # 以下是运行部("大古", "female", 66, '20180509', "operation", 630.33, 403, 3),("张三", "male", 51, '20191001', "operation", 410.25, 403, 3),("李四", "male", 47, '20200512', "operation", 330.62, 403, 3),("王五", "female", 39, '20210203', "operation", 370.98, 403, 3),("赵六", "female", 36, '20220724', "operation", 390.15, 403, 3);
# Query OK, 17 rows affected (0.17 sec)# Records: 17 Duplicates: 0 Warnings: 0- 查看数据
select * from emp;
- 格式化美化数据
select * from emp\G;
【三】筛选条件之where
【1】作用
- 对整体数据的筛选
【2】查询3<=id<=6的数据
- 查询数据方式一
select id,name,age from emp where id >=3 and id <=6;+----+----------+-----+| id | name | age |+----+----------+-----+| 3 | xiaomeng | 35 || 4 | xiaona | 29 || 5 | xiaoqi | 27 || 6 | suimeng | 33 |+----+----------+-----+4 rows in set (0.00 sec)- 查询数据方式二
select id,name,age from emp where id between 3 and 6;+----+----------+-----+| id | name | age |+----+----------+-----+| 3 | xiaomeng | 35 || 4 | xiaona | 29 || 5 | xiaoqi | 27 || 6 | suimeng | 33 |+----+----------+-----+4 rows in set (0.00 sec)【3】查询 薪资是1w2或者1w3或者7300 的数据
- 查询数据方式一
select * from emp where salary=12000.50 or salary = 13000.70 or salary = 7300.33;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+5 rows in set (0.00 sec)
- 查询方式二
select * from emp where salary in (12000.50,13000.70,7300.33);+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+5 rows in set (0.00 sec)
【3】查询 员工姓名中包含字母o的姓名和薪资
模糊查询:like
% 任意
- 任意单个字符- 查询数据
select name,salary from emp where name like "%o%";+----------+----------+| name | salary |+----------+----------+| xiaomeng | 15000.99 || xiaona | 11000.80 || xiaoqi | 13000.70 || xiaomeng | 15000.99 || xiaona | 11000.80 || xiaoqi | 13000.70 |+----------+----------+6 rows in set (0.00 sec)【4】查询员工姓名是由六个字符组成的姓名和薪资
- 查询数据方式一
select name,salary from emp where name like "______";+--------+----------+| name | salary |+--------+----------+| xiaona | 11000.80 || xiaoqi | 13000.70 || xiaona | 11000.80 || xiaoqi | 13000.70 |+--------+----------+4 rows in set (0.00 sec)- 查询数据方式二
select name,salary from emp where char_length(name) = 6;+--------+----------+| name | salary |+--------+----------+| xiaona | 11000.80 || xiaoqi | 13000.70 || xiaona | 11000.80 || xiaoqi | 13000.70 |+--------+----------+4 rows in set (0.00 sec)【5】查询 id<3 或者 id>6 的数据
select * from emp where id not between 3 and 6;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+19 rows in set (0.00 sec)
【6】查询岗位描述为空的员工姓名和岗位名
针对 null 不能用 = ,而是要用 is
- 查询数据
select * from emp where post_comment is null;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+23 rows in set (0.00 sec)
【四】筛选条件之group by(分组)
【】0什么时候需要分组?
- 参考关键字:每个、平均、最高、最低
【1】按照部门分组
(1)查询数据
select * from emp group by post;
# ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'day03.emp.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by(2)严格模式
- 关闭这个严格模式
- 模糊查询所有严格模式
show variables like "%mode";+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+| Variable_name | Value |+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+| block_encryption_mode | aes-128-ecb || gtid_mode | OFF || innodb_autoinc_lock_mode | 1 || innodb_strict_mode | ON || offline_mode | OFF || pseudo_slave_mode | OFF || rbr_exec_mode | STRICT || slave_exec_mode | STRICT || sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |+--------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+9 rows in set, 1 warning (0.00 sec)(3)替换严格模式
- 删除了 ONLY_FULL_GROUP_BY
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER';- 查询数据
select * from emp group by post;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+4 rows in set (0.00 sec)
拿到每一个部门的第一行数据
最小的操作单位应该是组,而不是组内的单个数据
这条命令在没有设置严格模式的时候是可以执行的,返回的数据是每组的第一条数据
但是分组不应该以单条数据为参考,而是要以组为操作单位
如果设置了严格模式,上述命令会直接报错
也就是上面的那个错误
(4)其他办法
- 设置严格模式
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
# Query OK, 0 rows affected (0.00 sec)设置严格模式后,按照什么分组就只能拿到什么
其他字段不能直接获取,获取其他数据需要借助其他方法
- 查询数据
select post from emp group by post;+-----------------------+| post |+-----------------------+| operation || sale || teacher || 陌夜痴梦久生情 |+-----------------------+4 rows in set (0.00 sec)【2】获取每个部门的最高薪资(max)
(1)聚合函数 - max
- 聚合函数:max - 取最大值
- 可以利用as关键字给字段起别名,或者默认不写
- 但是不推荐,如果忽略语义不明确,容易错乱
(2)查询数据
select post,max(salary) from emp group by post;+-----------------------+-------------+| post | max(salary) |+-----------------------+-------------+| operation | 630.33 || sale | 420.33 || teacher | 15000.99 || 陌夜痴梦久生情 | 7300.33 |+-----------------------+-------------+4 rows in set (0.00 sec)(3)查询数据指定别名
select post as "部门" ,max(salary) as "最高薪资" from emp group by post;+-----------------------+--------------+| 部门 | 最高薪资 |+-----------------------+--------------+| operation | 630.33 || sale | 420.33 || teacher | 15000.99 || 陌夜痴梦久生情 | 7300.33 |+-----------------------+--------------+4 rows in set (0.00 sec)【3】获取每个部门的最低薪资(min)
(1)聚合函数 - min
- 聚合函数:min- 取最小值
(2)查询数据
select post as "部门" ,min(salary) as "最低薪资" from emp group by post;+-----------------------+--------------+| 部门 | 最低薪资 |+-----------------------+--------------+| operation | 330.62 || sale | 300.13 || teacher | 11000.80 || 陌夜痴梦久生情 | 730.33 |+-----------------------+--------------+4 rows in set (0.00 sec)【4】获取每个部门的平均薪资(avg)
(1)聚合函数 - avg
- 聚合函数:avg- 取平均值
(2)查询数据
select post as "部门" ,avg(salary) as "平均薪资" from emp group by post;+-----------------------+--------------+| 部门 | 平均薪资 |+-----------------------+--------------+| operation | 426.466000 || sale | 362.241667 || teacher | 13000.722000 || 陌夜痴梦久生情 | 4015.330000 |+-----------------------+--------------+4 rows in set (0.00 sec)【5】获取每个部门的薪资总和(sum)
(1)聚合函数 - sum
- 聚合函数:sum- 取总和
(2)查询数据
select post as "部门" ,sum(salary) as "薪资总和" from emp group by post;+-----------------------+--------------+| 部门 | 薪资总和 |+-----------------------+--------------+| operation | 2132.33 || sale | 2173.45 || teacher | 130007.22 || 陌夜痴梦久生情 | 8030.66 |+-----------------------+--------------+4 rows in set (0.00 sec)【6】获取每个部门的人数(count)
(1)聚合函数 - count
- 聚合函数:count- 计数
(2)查询数据
select post as "部门" ,count(salary) as "部门的人数" from emp group by post;+-----------------------+-----------------+| 部门 | 部门的人数 |+-----------------------+-----------------+| operation | 5 || sale | 6 || teacher | 10 || 陌夜痴梦久生情 | 2 |+-----------------------+-----------------+4 rows in set (0.00 sec)select post as "部门" ,count(id) as "部门的人数" from emp group by post;+-----------------------+-----------------+| 部门 | 部门的人数 |+-----------------------+-----------------+| operation | 5 || sale | 6 || teacher | 10 || 陌夜痴梦久生情 | 2 |+-----------------------+-----------------+4 rows in set (0.00 sec)select post as "部门" ,count(age) as "部门的人数" from emp group by post;+-----------------------+-----------------+| 部门 | 部门的人数 |+-----------------------+-----------------+| operation | 5 || sale | 6 || teacher | 10 || 陌夜痴梦久生情 | 2 |+-----------------------+-----------------+4 rows in set (0.00 sec)(3)不能对null计数
select post as "部门" ,count(post_comment) as "部门的人数" from emp group by post;+-----------------------+-----------------+| 部门 | 部门的人数 |+-----------------------+-----------------+| operation | 0 || sale | 0 || teacher | 0 || 陌夜痴梦久生情 | 0 |+-----------------------+-----------------+4 rows in set (0.00 sec)【7】查询分组之后的部门名称和每个部门下所有的员工姓名(group_concat)
(1)聚合函数 - group_concat
- 聚合函数:group_concat- 获得分组之后的具体的值
- 不单单支持获取分组之后的其他字段值,还支持拼接操作
(2)查询数据
select post,group_concat(name) from emp group by post;+-----------------------+---------------------------------------------------------------------------------+| post | group_concat(name) |+-----------------------+---------------------------------------------------------------------------------+| operation | 大古,张三,李四,王五,赵六 || sale | 娜娜,芳芳,小明,亚洲,华华,田七 || teacher | mengmeng,xiaomeng,xiaona,xiaoqi,suimeng,mengmeng,xiaomeng,xiaona,xiaoqi,suimeng || 陌夜痴梦久生情 | dream,dream |+-----------------------+---------------------------------------------------------------------------------+4 rows in set (0.00 sec)
(3)拼接数据
select post,group_concat(name,'_drm') from emp group by post;+-----------------------+-------------------------------------------------------------------------------------------------------------------------+| post | group_concat(name,'_drm') |+-----------------------+-------------------------------------------------------------------------------------------------------------------------+| operation | 大古_drm,张三_drm,李四_drm,王五_drm,赵六_drm || sale | 娜娜_drm,芳芳_drm,小明_drm,亚洲_drm,华华_drm,田七_drm || teacher | mengmeng_drm,xiaomeng_drm,xiaona_drm,xiaoqi_drm,suimeng_drm,mengmeng_drm,xiaomeng_drm,xiaona_drm,xiaoqi_drm,suimeng_drm || 陌夜痴梦久生情 | dream_drm,dream_drm |+-----------------------+-------------------------------------------------------------------------------------------------------------------------+4 rows in set (0.00 sec)
(4)查询多条数据
select post,group_concat(name,':',salary) from emp group by post;+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| post | group_concat(name,':',salary) |+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| operation | 大古:630.33,张三:410.25,李四:330.62,王五:370.98,赵六:390.15 || sale | 娜娜:300.13,芳芳:400.45,小明:350.80,亚洲:320.99,华华:380.75,田七:420.33 || teacher | mengmeng:12000.50,xiaomeng:15000.99,xiaona:11000.80,xiaoqi:13000.70,suimeng:14000.62,mengmeng:12000.50,xiaomeng:15000.99,xiaona:11000.80,xiaoqi:13000.70,suimeng:14000.62 || 陌夜痴梦久生情 | dream:7300.33,dream:730.33 |+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+4 rows in set (0.00 sec)
(5)查询数据(不分组之前用concat)
select concat("NAME:",name),concat("SALARY:",salary) from emp;+----------------------+--------------------------+| concat("NAME:",name) | concat("SALARY:",salary) |+----------------------+--------------------------+| NAME:dream | SALARY:7300.33 || NAME:mengmeng | SALARY:12000.50 || NAME:xiaomeng | SALARY:15000.99 || NAME:xiaona | SALARY:11000.80 || NAME:xiaoqi | SALARY:13000.70 || NAME:suimeng | SALARY:14000.62 || NAME:dream | SALARY:730.33 || NAME:mengmeng | SALARY:12000.50 || NAME:xiaomeng | SALARY:15000.99 || NAME:xiaona | SALARY:11000.80 || NAME:xiaoqi | SALARY:13000.70 || NAME:suimeng | SALARY:14000.62 || NAME:娜娜 | SALARY:300.13 || NAME:芳芳 | SALARY:400.45 || NAME:小明 | SALARY:350.80 || NAME:亚洲 | SALARY:320.99 || NAME:华华 | SALARY:380.75 || NAME:田七 | SALARY:420.33 || NAME:大古 | SALARY:630.33 || NAME:张三 | SALARY:410.25 || NAME:李四 | SALARY:330.62 || NAME:王五 | SALARY:370.98 || NAME:赵六 | SALARY:390.15 |+----------------------+--------------------------+23 rows in set (0.00 sec)(6)as语法
- as 语法不单单可以给字段起别名,还可以给表取别名
- 只能临时起别名
- 查数据
select emp.id,emp.name from emp;+----+----------+| id | name |+----+----------+| 1 | dream || 2 | mengmeng || 3 | xiaomeng || 4 | xiaona || 5 | xiaoqi || 6 | suimeng || 7 | dream || 8 | mengmeng || 9 | xiaomeng || 10 | xiaona || 11 | xiaoqi || 12 | suimeng || 13 | 娜娜 || 14 | 芳芳 || 15 | 小明 || 16 | 亚洲 || 17 | 华华 || 18 | 田七 || 19 | 大古 || 20 | 张三 || 21 | 李四 || 22 | 王五 || 23 | 赵六 |+----+----------+23 rows in set (0.00 sec)- 查数据起别名
select emp.id,emp.name from emp as ti;
# ERROR 1054 (42S22): Unknown column 'emp.id' in 'field list'select ti.id,ti.name from emp as ti;+----+----------+| id | name |+----+----------+| 1 | dream || 2 | mengmeng || 3 | xiaomeng || 4 | xiaona || 5 | xiaoqi || 6 | suimeng || 7 | dream || 8 | mengmeng || 9 | xiaomeng || 10 | xiaona || 11 | xiaoqi || 12 | suimeng || 13 | 娜娜 || 14 | 芳芳 || 15 | 小明 || 16 | 亚洲 || 17 | 华华 || 18 | 田七 || 19 | 大古 || 20 | 张三 || 21 | 李四 || 22 | 王五 || 23 | 赵六 |+----+----------+23 rows in set (0.00 sec)【8】查询每个人的年薪(12)
直接对查询到的数据进行运算
- 查询数据
select name,salary*12 from emp;+----------+-----------+| name | salary*12 |+----------+-----------+| dream | 87603.96 || mengmeng | 144006.00 || xiaomeng | 180011.88 || xiaona | 132009.60 || xiaoqi | 156008.40 || suimeng | 168007.44 || dream | 8763.96 || mengmeng | 144006.00 || xiaomeng | 180011.88 || xiaona | 132009.60 || xiaoqi | 156008.40 || suimeng | 168007.44 || 娜娜 | 3601.56 || 芳芳 | 4805.40 || 小明 | 4209.60 || 亚洲 | 3851.88 || 华华 | 4569.00 || 田七 | 5043.96 || 大古 | 7563.96 || 张三 | 4923.00 || 李四 | 3967.44 || 王五 | 4451.76 || 赵六 | 4681.80 |+----------+-----------+23 rows in set (0.00 sec)【五】筛选条件之 group by(分组) 注意事项
【0】引入
(1)关键字 where 和 group by 同时出现
- 关键字 where 和 group by 同时出现的时候,group by 必须在 where 后面
- where 先对整体数据进行过滤
- group by 再对数据进行分组
(2)where 筛选条件不能使用聚合函数
- where 筛选条件不能使用聚合函数
- 不分组,默认整张表就是一组
- 聚合函数只能在分组之后使用
- 查询数据
select id,name,age from emp where max(salary) > 3000;
# ERROR 1111 (HY000): Invalid use of group function- 查询数据select max(salary) from emp;+-------------+| max(salary) |+-------------+| 15000.99 |+-------------+1 row in set (0.00 sec)【1】统计各部门年龄在 30 岁以上的员工的平均薪资
(1)先求所有年龄大于30岁的员工
select * from emp where age >30;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+17 rows in set (0.00 sec)
(2)再对结果进行分组
select * from emp where age >30 group by post;
(3)语法总结
select post,avg(salary) from emp where age >30 group by post;+-----------------------+--------------+| post | avg(salary) |+-----------------------+--------------+| operation | 426.466000 || sale | 362.241667 || teacher | 14500.805000 || 陌夜痴梦久生情 | 4015.330000 |+-----------------------+--------------+4 rows in set (0.00 sec)
【六】筛选条件之having(分组之后筛选)
【0】引入
- having与where的功能是一模一样的 都是对数据进行筛选
- where用在分组之前的筛选
- havng用在分组之后的筛选
- 只不过having是在分组之后进行的过滤操作
- 即having是可以直接使用聚合函数的
【1】统计各部门年龄在 30 岁以上的员工的工资,并且保留平均薪资大于1w的部门
-- 先筛选出30岁以上的员工数据 然后再对数据进行分组select post,avg(salary) from emp where age>30 group by post;-- 在过滤出平均薪资大于10000的数据select post,avg(salary) from emp where age >30 group by post having avg(salary) > 10000 ;+---------+--------------+| post | avg(salary) |+---------+--------------+| teacher | 14500.805000 |+---------+--------------+1 row in set (0.00 sec)-- 针对聚合函数 如果还需要在其他地方作为条件使用 可以先起别名select post,avg(salary) as avg_salary from emp where age>30 group by post having avg_salary > 10000 ;
【七】筛选条件之distinct(去重)
【0】引入
- 必须是完全一样的数据才可以去重
- 一定要注意主键的问题
- 在主键存在的情况下是一定不可能去重的
等我们学到Django ORM之后 数据会被封装成对象
那个时候主键很容易被我们忽略 从而导致去重没有效果!!!
【2】对emp表中的age和id去重
- 由于id是主键自增,不重复,所以去重后的效果等价于没去重
select distinct id,age from emp;+----+-----+| id | age |+----+-----+| 1 | 78 || 2 | 25 || 3 | 35 || 4 | 29 || 5 | 27 || 6 | 33 || 7 | 78 || 8 | 25 || 9 | 35 || 10 | 29 || 11 | 27 || 12 | 33 || 13 | 69 || 14 | 45 || 15 | 34 || 16 | 42 || 17 | 55 || 18 | 44 || 19 | 66 || 20 | 51 || 21 | 47 || 22 | 39 || 23 | 36 |+----+-----+23 rows in set (0.00 sec)【3】只对emp表中的age去重
select distinct age from emp;+-----+| age |+-----+| 78 || 25 || 35 || 29 || 27 || 33 || 69 || 45 || 34 || 42 || 55 || 44 || 66 || 51 || 47 || 39 || 36 |+-----+17 rows in set (0.00 sec)【八】筛选条件之order by(排序)
【0】引入
- order by : 默认是升序
- asc 默认可以省略不写 ---> 修改降序
- desc : 降序
【1】将emp表中的数据按照薪资排序(升序)
select * from emp order by salary;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+23 rows in set (0.00 sec)
【2】将emp表中的数据按照薪资排序(降序)
select * from emp order by salary desc;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+23 rows in set (0.00 sec)
【3】将emp表中的数据按照薪资(升序)和年龄(降序)排序
- order by 后面可以跟多个参数
select * from emp order by age desc,salary asc;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 13 | 娜娜 | female | 69 | 2010-03-07 | sale | NULL | 300.13 | 402 | 2 || 19 | 大古 | female | 66 | 2018-05-09 | operation | NULL | 630.33 | 403 | 3 || 17 | 华华 | female | 55 | 2018-03-19 | sale | NULL | 380.75 | 402 | 2 || 20 | 张三 | male | 51 | 2019-10-01 | operation | NULL | 410.25 | 403 | 3 || 21 | 李四 | male | 47 | 2020-05-12 | operation | NULL | 330.62 | 403 | 3 || 14 | 芳芳 | male | 45 | 2014-05-18 | sale | NULL | 400.45 | 402 | 2 || 18 | 田七 | male | 44 | 2023-08-08 | sale | NULL | 420.33 | 402 | 2 || 16 | 亚洲 | female | 42 | 2017-02-27 | sale | NULL | 320.99 | 402 | 2 || 22 | 王五 | female | 39 | 2021-02-03 | operation | NULL | 370.98 | 403 | 3 || 23 | 赵六 | female | 36 | 2022-07-24 | operation | NULL | 390.15 | 403 | 3 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 15 | 小明 | male | 34 | 2016-01-03 | sale | NULL | 350.80 | 402 | 2 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 12 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 11 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+23 rows in set (0.00 sec)先按照age降序排
如果碰到 age 相同 ,再按照salary 升序排

【4】混合排序
- 统计各部门年龄在 10 岁以上的员工的工资,并且保留平均薪资大于1000的部门,对平均工资进行排序
select post,avg(salary) from emp where age >10 group by post having avg(salary) > 1000 order by avg(salary) desc ;+-----------------------+--------------+| post | avg(salary) |+-----------------------+--------------+| teacher | 13000.722000 || 陌夜痴梦久生情 | 4015.330000 |+-----------------------+--------------+2 rows in set (0.00 sec)【九】筛选条件之 limit(限制展示条数)
【0】引入
- 针对数据太多的情况,我们大都是做分页处理
- limit x,y : 第一个参数是起始位置,第二个是条数
【1】查询数据方式一:单数字限制
- 限制只展示五条数据
select * from emp limit 10;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 || 7 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 730.33 | 401 | 1 || 8 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 9 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 10 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+10 rows in set (0.00 sec)【2】查询数据:多限制
- 分页效果
select * from emp limit 0,6;+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+| 1 | dream | male | 78 | 2022-03-06 | 陌夜痴梦久生情 | NULL | 7300.33 | 401 | 1 || 2 | mengmeng | female | 25 | 2022-01-02 | teacher | NULL | 12000.50 | 401 | 1 || 3 | xiaomeng | male | 35 | 2019-06-07 | teacher | NULL | 15000.99 | 401 | 1 || 4 | xiaona | female | 29 | 2018-09-06 | teacher | NULL | 11000.80 | 401 | 1 || 5 | xiaoqi | female | 27 | 2022-08-06 | teacher | NULL | 13000.70 | 401 | 1 || 6 | suimeng | male | 33 | 2023-03-06 | teacher | NULL | 14000.62 | 401 | 1 |+----+----------+--------+-----+------------+-----------------------+--------------+----------+--------+-----------+6 rows in set (0.00 sec)从 0 后面 取六条
第一个参数是起始位置,第二个是条数
【3】案例:查询工资最高的人的详细信息
select * from emp order by salary desc limit 1;
当数据特别多的时候 经常使用limit来限制展示条数
节省资源 防止系统崩溃
【十】筛选条件之正则
【1】语法
属性名 REGEXP '匹配方式'- 其中,“属性名”表示需要查询的字段名称;
- “匹配方式”表示以哪种方式来匹配查询。
【2】匹配方式
- “匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。
- 下表列出了 REGEXP 操作符中常用的匹配方式。
| 选项 | 说明 | 例子 | 匹配值示例 |
|---|---|---|---|
| ^ | 匹配文本的开始字符 | ‘^b’ 匹配以字母 b 开头的字符串 | book、big、banana、bike |
| $ | 匹配文本的结束字符 | ‘st$’ 匹配以 st 结尾的字符串 | test、resist、persist |
| . | 匹配任何单个字符 | ‘b.t’ 匹配任何 b 和 t 之间有一个字符 | bit、bat、but、bite |
| * | 匹配前面的字符 0 次或多次 | ‘f*n’ 匹配字符 n 前面有任意个字符 f | fn、fan、faan、abcn |
| + | 匹配前面的字符 1 次或多次 | ‘ba+’ 匹配以 b 开头,后面至少紧跟一个 a | ba、bay、bare、battle |
| ? | 匹配前面的字符 0 次或1次 | ‘sa?’ 匹配0个或1个a字符 | sa、s |
| 字符串 | 匹配包含指定字符的文本 | ‘fa’ 匹配包含‘fa’的文本 | fan、afa、faad |
| [字符集合] | 匹配字符集合中的任何一个字符 | ‘[xz]’ 匹配 x 或者 z | dizzy、zebra、x-ray、extra |
| [^] | 匹配不在括号中的任何字符 | ‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串 | desk、fox、f8ke |
| 字符串{n,} | 匹配前面的字符串至少 n 次 | ‘b{2}’ 匹配 2 个或更多的 b | bbb、bbbb、bbbbbbb |
| 字符串{n,m} | 匹配前面的字符串至少 n 次, 至多 m 次 | ‘b{2,4}’ 匹配最少 2 个,最多 4 个 b | bbb、bbbb |
【3】案例
(0)准备数据
- 创建表
DROP TABLE IF EXISTS `person`;CREATE TABLE `person` ( `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(40) NULL DEFAULT NULL, `heigh` int(40) NULL DEFAULT NULL, `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;- 插入数据
INSERT INTO `person` VALUES ('Thomas ', 25, 168, '男');INSERT INTO `person` VALUES ('Tom ', 20, 172, '男');INSERT INTO `person` VALUES ('Dany', 29, 175, '男');INSERT INTO `person` VALUES ('Jane', 27, 171, '男');INSERT INTO `person` VALUES ('Susan', 24, 173, '女');INSERT INTO `person` VALUES ('Green', 25, 168, '女');INSERT INTO `person` VALUES ('Henry', 21, 160, '女');INSERT INTO `person` VALUES ('Lily', 18, 190, '男');INSERT INTO `person` VALUES ('LiMing', 19, 187, '男');
- (1)查询 name 字段以j开头的记录
select * from person where name REGEXP '^j';+------+------+-------+------+| name | age | heigh | sex |+------+------+-------+------+| Jane | 27 | 171 | |+------+------+-------+------+1 row in set (0.00 sec)- (2)查询 name 字段以“y”结尾的记录
select * from person where name REGEXP 'y$';+-------+------+-------+------+| name | age | heigh | sex |+-------+------+-------+------+| Dany | 29 | 175 | || Henry | 21 | 160 | || Lily | 18 | 190 | |+-------+------+-------+------+3 rows in set (0.01 sec)- (3)查询 name 字段值包含“a”和“y”,且两个字母之间只有一个字母的记录
select * from person where name REGEXP 'a.y';+------+------+-------+------+| name | age | heigh | sex |+------+------+-------+------+| Dany | 29 | 175 | |+------+------+-------+------+1 row in set (0.00 sec)- (4)查询 name 字段值包含字母“T”,且“T”后面出现字母“h”的记录
select * from person where name REGEXP 'Th*';+---------+------+-------+------+| name | age | heigh | sex |+---------+------+-------+------+| Thomas | 25 | 168 | || Tom | 20 | 172 | |+---------+------+-------+------+2 rows in set (0.00 sec)- (5)查询 name 字段值包含字母“T”,且“T”后面至少出现“h”一次的记录
select * from person where name REGEXP 'Th+';+---------+------+-------+------+| name | age | heigh | sex |+---------+------+-------+------+| Thomas | 25 | 168 | |+---------+------+-------+------+1 row in set (0.00 sec)- (6)查询 name 字段值包含字母“S”,且“S”后面出现“a”一次或零次的记录
select * from person where name REGEXP 'sa?';+---------+------+-------+------+| name | age | heigh | sex |+---------+------+-------+------+| Thomas | 25 | 168 | || Susan | 24 | 173 | |+---------+------+-------+------+2 rows in set (0.00 sec)- (7)查询 name 字段值包含字符串“an”的记录
select * from person where name REGEXP 'an';+-------+------+-------+------+| name | age | heigh | sex |+-------+------+-------+------+| Dany | 29 | 175 | || Jane | 27 | 171 | || Susan | 24 | 173 | |+-------+------+-------+------+3 rows in set (0.00 sec)- (8)查询 name 字段值包含字符串“an”或“en”的记录
- 指定多个字符串时,需要用|隔开。只要匹配这些字符串中的任意一个即可。
select * from person where name REGEXP 'an|en';+-------+------+-------+------+| name | age | heigh | sex |+-------+------+-------+------+| Dany | 29 | 175 | || Jane | 27 | 171 | || Susan | 24 | 173 | || Green | 25 | 168 | || Henry | 21 | 160 | |+-------+------+-------+------+5 rows in set (0.01 sec)- (9)查询 name 字段值包含字母“i”或“o”的记录
select * from person where name REGEXP '[io]';+---------+------+-------+------+| name | age | heigh | sex |+---------+------+-------+------+| Thomas | 25 | 168 | || Tom | 20 | 172 | || Lily | 18 | 190 | || LiMing | 19 | 187 | |+---------+------+-------+------+4 rows in set (0.00 sec)- (10)方括号[ ]还可以指定集合的区间。例如,“[a-z]”表示从 a
z 的所有字母;“[0-9]”表示从 09 的所有数字;“[a-z0-9]”表示包含所有的小写字母和数字;“[a-zA-Z]”表示匹配所有字符。MySQL中的正则表达式匹配不区分大小写。为区分大小写,可使用BINARY关键字。
select * from person where name REGEXP BINARY '^[a-z]';Empty set (0.00 sec)- (11)查询 name 字段值包含字母 a~t 以外的字符的记录
select * from person where name REGEXP '[^a-t]';+---------+------+-------+------+| name | age | heigh | sex |+---------+------+-------+------+| Thomas | 25 | 168 | || Tom | 20 | 172 | || Dany | 29 | 175 | || Susan | 24 | 173 | || Henry | 21 | 160 | || Lily | 18 | 190 | |+---------+------+-------+------+6 rows in set (0.00 sec)- (12)查询 name 字段值出现字母‘e’ 至少 2 次的记录
select * from person where name REGEXP 'e{2,}';+-------+------+-------+------+| name | age | heigh | sex |+-------+------+-------+------+| Green | 25 | 168 | |+-------+------+-------+------+1 row in set (0.00 sec)- (13)查询 name 字段值出现字符串“i” 最少 1 次,最多 3 次的记录
select * from person where name REGEXP 'i{1,3}';+--------+------+-------+------+| name | age | heigh | sex |+--------+------+-------+------+| Lily | 18 | 190 | || LiMing | 19 | 187 | |+--------+------+-------+------+2 rows in set (0.00 sec)支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














