前言

整理复习MySQL数据库,记录学习,涵盖较全!


MySQL单表查询

  • 前言
  • 1.单表查询
  • 1.1 查询所有字段
  • 1.2 查询指定字段
  • 1.3 WHERE条件查询
  • 1.4 带 IN 关键字查询
  • 1.5 带 BETWEEN AND 的范围查询
  • 1.6 带 LIKE 的模糊查询
  • 1.7 空值查询
  • 1.8 带 AND 的多条件查询
  • 1.9 带 OR 的多条件查询
  • 1.10 DISTINCT 去重复查询
  • 1.11 对查询结果排序
  • 1.12 GROUP BY分组查询(重点)
  • 1.13 LIMIT 分页查询
  • 结束



1.单表查询

准备:t_student表,代码如下

create table `t_student` (
	`id` double ,
	`stuName` varchar (60),
	`age` double ,
	`sex` varchar (30),
	`gradeName` varchar (60)
); 
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('1','张三','23','男','一年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('2','张三丰','25','男','二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('3','李四','23','男','一年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('4','王五','22','男','三年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('5','珍妮','21','女','一年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('6','李娜','26','女','二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('7','王峰','20','男','三年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('8','梦娜','21','女','二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('9','小黑','22','男','一年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('10','追风','25','男','二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('11','小小张三','21',NULL,'二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('12','小张三','23','男','二年级');
insert into `t_student` (`id`, `stuName`, `age`, `sex`, `gradeName`) values('13','张三锋小','24',NULL,'二年级');

1.1 查询所有字段

语法

1. select 字段1,字段2,字段 3… from 表名;

2. select * from 表名

演示
两种语句效果相同;

select id,stuName,age,sex,gradeName from t_student;
select * from t_student;

mysql学生表统计男女生各多少人 mysql查询学生表_字段

1.2 查询指定字段

语法

1. select 字段1,字段2,字段 3… from 表名;

:上面的查询所有,与此处相同语法,是将表中所有的字段罗列,指定字段只需将需要的字段写出即可。

演示

select id,stuName from t_student;

mysql学生表统计男女生各多少人 mysql查询学生表_字段_02

1.3 WHERE条件查询

语法

1. select 字段1,字段2,字段 3… from 表名 where 条件表达式;

2. select * from 表名 where 条件表达式;

第一种可查询指定字段或者全部字段带条件
第二种查询全部带条件

演示

select * from t_student where id = 1;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_03

select id,stuName,age from t_student where id = 2;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql_04

:查询指定字段的语法只要是查询语句都可用,select 字段1,字段2,字段 3… from 表名,要灵活使用,后面都以查询所有为例(直观方便哈)

1.4 带 IN 关键字查询

语法

1. select * from 表名 where 字段 in (元素 1,元素 2,元素 3);

2. select * from 表名 where 字段 not in (元素 1,元素 2,元素 3);

in 后面为一个范围,在此范围内查询。not in是查询不在范围内。

演示:

select * from t_student where id in (1,2,3);

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_05

select * from t_student where id not in (1,2,3);

mysql学生表统计男女生各多少人 mysql查询学生表_数据库_06

1.5 带 BETWEEN AND 的范围查询

语法

1. select * from 表名 where 字段 between 取值1 and 取值2;

2. select * from 表名 where 字段 not between 取值1 and 取值2;

取值1为起始值,取值2为结束值

演示

select * from t_student where id between 1 and 5;

mysql学生表统计男女生各多少人 mysql查询学生表_数据库_07

select * from t_student where id not between 1 and 5;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_08

1.6 带 LIKE 的模糊查询

语法

1. select * from 表名 where 字段 like " 字符串 ";

2. select * from 表名 where 字段 like " %字符串 ";

3. select * from 表名 where 字段 like " 字符串% ";

4. select * from 表名 where 字段 like " %字符串% "
这条语法通常用做模糊查询

5. select * from 表名 where 字段 like " _字符串 ";

6. select * from 表名 where 字段 like " 字符串_ "

7. select * from 表名 where 字段 like " _ 字符串 _ ";

“%”代表任意字符或者多个字符,“_” 代表单个字符占一位。与上面同理

演示

select * from t_student where stuName like "张三"

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_09

select * from t_student where stuName like "%张三"

mysql学生表统计男女生各多少人 mysql查询学生表_数据库_10

select * from t_student where stuName like "张三%"

mysql学生表统计男女生各多少人 mysql查询学生表_mysql_11

select * from t_student where stuName like "%张三%"

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_12

select * from t_student where stuName like "_张三"

mysql学生表统计男女生各多少人 mysql查询学生表_表名_13

select * from t_student where stuName like "张三_"

mysql学生表统计男女生各多少人 mysql查询学生表_表名_14

select * from t_student where stuName like "_张三_"

该条件下无数据

mysql学生表统计男女生各多少人 mysql查询学生表_mysql_15

1.7 空值查询

语法

1. select * from 表名 where 字段 is null;

1. select * from 表名 where 字段 is not null;

演示

select * from t_student where sex is null;

mysql学生表统计男女生各多少人 mysql查询学生表_表名_16

select * from t_student where sex is not null;

mysql学生表统计男女生各多少人 mysql查询学生表_数据库_17

1.8 带 AND 的多条件查询

语法

1. select * from 表名 where 条件表达式1 and 条件表达式2 [and 条件表达式n]

用and连接多个条件,条件全部满足即可

演示

select * from t_student where id >5 and stuName like "%张三%";

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_18

1.9 带 OR 的多条件查询

语法

1. select * from 表名 where 条件表达式1 or 条件表达式2 [ …or 条件表达式n ]

用or连接多个条件,满足一个条件即可(个人认为纯 sql 使用意义不大,框架中会使用,例如 Mybatis-Plus 条件构造器

演示

select * from t_student where id >5 or stuName like "%张三%";

mysql学生表统计男女生各多少人 mysql查询学生表_表名_19

1.10 DISTINCT 去重复查询

语法

1. select distinct 字段名 from 表名

演示

select distinct gradeName from t_student;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_20

1.11 对查询结果排序

语法

1. select * from 表名 order by 字段名 asc [ desc ];

order by 排序关键字,asc升序,desc降序,默认升序

演示

select * from t_student order by age asc;

mysql学生表统计男女生各多少人 mysql查询学生表_表名_21

select * from t_student order by age desc;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql_22

1.12 GROUP BY分组查询(重点)

语法

1. group by 字段名 [ having 条件表达式 / with rollup ] ;

注意

1. 单独使用(毫无意义)。例如:select * from 表名group by 字段名;

select * from t_student group by age;

mysql学生表统计男女生各多少人 mysql查询学生表_数据库_23


可以看到虽然根据年龄分组,但是每个年龄只有一条数据,与实际所有的数据不符合(可回到顶部查看所有数据),也与实际需求不符合,所以单独使用无意义。

2. 与 GROUP_CONCAT() 函数一起使用。

-- 根据年龄分组,显示每个年龄下的学生姓名
select age,GROUP_CONCAT(stuName) from t_student group by age;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_24

GROUP_CONCAT() 函数详情请看 MySQL group_concat()详解 这篇文章

3. 与聚合函数一起使用。(COUNT 函数计算表中的行数)

-- 根据年龄分组,显示每个年龄下的学生人数。
-- 第一个是同concat函数拼接字符串做显示结果;
-- 第二个直接查人;
select age,CONCAT(COUNT(stuName),"个人") from t_student group by age;
select age,COUNT(stuName) from t_student group by age;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql学生表统计男女生各多少人_25


mysql学生表统计男女生各多少人 mysql查询学生表_字段_26

4. 与 HAVING 一起使用(限制、筛选输出的结果)。

-- 根据年龄分组,显示每个年龄下的学生人数(加 HAVING 限制条件,显示学生大于1的数据)。
select age,count(stuName) from t_student group by age having count(stuName)>1;

mysql学生表统计男女生各多少人 mysql查询学生表_表名_27

5. 与 WITH ROLLUP 一起使用(最后加入一个总和行,使用较少)。

-- 根据年龄分组,显示每个年龄下的学生姓名
-- 最后将全部学生汇总到一行
select age,GROUP_CONCAT(stuName) from t_student group by age with rollup;

mysql学生表统计男女生各多少人 mysql查询学生表_mysql_28

1.13 LIMIT 分页查询

语法

1. select * from 表名 limit 初始位置,记录数;

演示

select * from t_student limit 0,5;

mysql学生表统计男女生各多少人 mysql查询学生表_字段_29


分页查询比较常用,简单重要。


结束

以上为全部内容,欢迎讨论,记录学习!