前言
整理复习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;
1.2 查询指定字段
语法:
1. select 字段1,字段2,字段 3… from 表名;
注:上面的查询所有,与此处相同语法,是将表中所有的字段罗列,指定字段只需将需要的字段写出即可。
演示:
select id,stuName from t_student;
1.3 WHERE条件查询
语法:
1. select 字段1,字段2,字段 3… from 表名 where 条件表达式;
2. select * from 表名 where 条件表达式;
第一种可查询指定字段或者全部字段带条件
第二种查询全部带条件
演示:
select * from t_student where id = 1;
select id,stuName,age from t_student where id = 2;
注:查询指定字段的语法只要是查询语句都可用,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);
select * from t_student where id not in (1,2,3);
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;
select * from t_student where id not between 1 and 5;
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 "张三"
select * from t_student where stuName like "%张三"
select * from t_student where stuName like "张三%"
select * from t_student where stuName like "%张三%"
select * from t_student where stuName like "_张三"
select * from t_student where stuName like "张三_"
select * from t_student where stuName like "_张三_"
该条件下无数据
1.7 空值查询
语法:
1. select * from 表名 where 字段 is null;
1. select * from 表名 where 字段 is not null;
演示:
select * from t_student where sex is null;
select * from t_student where sex is not null;
1.8 带 AND 的多条件查询
语法:
1. select * from 表名 where 条件表达式1 and 条件表达式2 [and 条件表达式n]
用and连接多个条件,条件全部满足即可
演示:
select * from t_student where id >5 and stuName like "%张三%";
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 "%张三%";
1.10 DISTINCT 去重复查询
语法:
1. select distinct 字段名 from 表名
演示:
select distinct gradeName from t_student;
1.11 对查询结果排序
语法:
1. select * from 表名 order by 字段名 asc [ desc ];
order by 排序关键字,asc升序,desc降序,默认升序
演示:
select * from t_student order by age asc;
select * from t_student order by age desc;
1.12 GROUP BY分组查询(重点)
语法:
1. group by 字段名 [ having 条件表达式 / with rollup ] ;
注意:
1. 单独使用(毫无意义)。例如:select * from 表名group by 字段名;
select * from t_student group by age;
可以看到虽然根据年龄分组,但是每个年龄只有一条数据,与实际所有的数据不符合(可回到顶部查看所有数据),也与实际需求不符合,所以单独使用无意义。
2. 与 GROUP_CONCAT() 函数一起使用。
-- 根据年龄分组,显示每个年龄下的学生姓名
select age,GROUP_CONCAT(stuName) from t_student group by age;
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;
4. 与 HAVING 一起使用(限制、筛选输出的结果)。
-- 根据年龄分组,显示每个年龄下的学生人数(加 HAVING 限制条件,显示学生大于1的数据)。
select age,count(stuName) from t_student group by age having count(stuName)>1;
5. 与 WITH ROLLUP 一起使用(最后加入一个总和行,使用较少)。
-- 根据年龄分组,显示每个年龄下的学生姓名
-- 最后将全部学生汇总到一行
select age,GROUP_CONCAT(stuName) from t_student group by age with rollup;
1.13 LIMIT 分页查询
语法:
1. select * from 表名 limit 初始位置,记录数;
演示:
select * from t_student limit 0,5;
分页查询比较常用,简单重要。
结束
以上为全部内容,欢迎讨论,记录学习!