MySQL查询学习笔记
数据的准备
- 创建一个数据库
1
create database data_test charset=utf8;
创建数据表
students表
1
2
3
4
5
6
7
8
9create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0
);classes表
1
2
3
4create table classes (
id int unsigned auto_increment primary key not null,
name varchar(30) not null
);准备数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19-- 向students表中插入数据
insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',18,180.00,2,2,1),
(0,'彭于晏',29,185.00,1,1,0),
(0,'刘德华',59,175.00,1,2,1),
(0,'黄蓉',38,160.00,2,1,0),
(0,'凤姐',28,150.00,4,2,1),
(0,'王祖贤',18,172.00,2,1,1),
(0,'周杰伦',36,NULL,1,1,0),
(0,'程坤',27,181.00,1,2,0),
(0,'刘亦菲',25,166.00,2,2,0),
(0,'金星',33,162.00,3,3,1),
(0,'静香',12,180.00,2,4,0),
(0,'郭靖',12,170.00,1,4,0),
(0,'周杰',34,176.00,2,5,0);
-- 向classes表中插入数据
insert into classes values (0, "python_01期"), (0, "python_02期");
查询语句的使用
查询所有字段
- select * from 表名;
1
select * from students;
查询指定字段
- select 列1,列2,… from 表名;
1
select name,age from students;
使用as给字段起别名
select 字段 as 名字 … from 表名;
1
select name as 姓名,age as 年龄 from students;
select 表名.字段 … from 表名
1
select students.name,students.age from students;
可以通过as给表起别名
select 别名.字段 … from 表名 as 别名;
1
selecct s.name,s.age from students as s;
消除重复行
- distinct 字段
1
select distinct gender from students;
条件查询
- 比较运算符
select … from 表名 where …;
1
2
3
4
5
6
7
8--查询大于18岁的信息
select * from students where age>18;
--查询小于18岁的信息
select * from students where age<18;
--查询小于或者等于18岁的信息
select * from students where age<=18;
--查询年龄为18岁的所有学生的信息
select * from students where age=18;逻辑运算符
and
1
2
3
4--18到28之间的所有学生信息
select * from students where age>18 and age<28;
--18岁以上的女性
select * from students where age>18 and gender="女";or
1
2--18岁以上或者身高超过180以上
select * from students where age>18 or height>180;not
1
2
3
4--不在18岁以上的女性
select * from students where not (age>18 and gender="女");
--年龄不是小于或者等于18 并且是女性
select * from students where (not age<=18) and gender="女";
模糊查询
- like
- %替换0个或者多个
_替换1个
1
2
3
4
5
6
7
8
9
10--查询姓名中以 “小” 开始的名字
select name from students where name like "小%";
--查询姓名中有 “小” 所有名字
select name from students where name like "%小%";
--查询有两个字的名字
select name from students where name like "__";
--查询有三个字的名字
select name from students where name like "___";
--查询至少有两个字的名字
select name from students where name like "__%";rlike 正则表达式
1
2
3
4--查询以“周”开始的姓名
select name from students where name rlike "^周.*";
--查询以“周”开始 “伦”结尾的姓名
select name from students where name rlike "^周.*伦$";
范围查询
in (1,3,8)表示在一个非连续的范围内
1
2--查询年龄为18,34的姓名
select name,age from students where age in (18,34);not in 不在此非连续范围内
1
2--查询年龄不是18,34岁的名字
select name,age from students where age not in (18,34);not between … and …表示不在一个连续的范围内
1
2--查询年龄不在18到34岁之间的信息
select * from students where age not between 18 and 34;空判断
is null
1
2--查询身高为空的信息
select * from students where height is null;is not null
1
2--查询身高不为空的信息
select * from students where height is not null;
排序
- order by 字段
- asc从小到大排序,即升序
- desc从大到小排序,即降序
1
2
3
4--查询年龄在18到34岁之间的男性,按照年龄从小到大排序
select * from students where age between 18 and 34 order by age asc;
--按照年龄从小到大,身高从高到矮的排序
select * from students order by age asc,height desc;
聚合函数
count 总数
1
2
3--查询男性有多少人,女性有多少人
select count(*) from students where gender="男";
select count(*) from students where gender="女";max 最大值
1
2--查询最大年龄
select max(age) from students;min 最小值
sum 求和
1
2--计算所有人的年龄总和
select sum(age) from stundets;avg 平均值
1
2--计算平均年龄
select avg(age) from students;round 四舍五入 round(123.12,1)保留一位小数123.1
1
2--计算所有人的平均年龄,保留2位小数
select round(avg(age),2) from students;
分组
group by
1
2
3
4
5
6--按照性别分组,查询所有的性别
select gender from students group by gender;
--计算每种性别的人数
select gender,count(*) from students group by gender;
--计算男性的人数
select gender,count(*) from students where gender="男" group by gender;group_concat(…)
1
2--查询同种性别中的姓名,年龄,身高
select gender,group_concat(name,",",age,",",height) from students group by gender;having
1
2
3
4--查询平均年龄超过30岁的性别,以及姓名
select gender,group_concat(name) from students group by gender having avg(age)>30;
--查询每种性别中的人数多于2个的信息
select gender,group_concat(name) from students group by gender having count(*)>2;
分页
- limit start,count
1
2
3
4
5
6
7
8--限制查询出来的数据个数
select * from students limit 5;
--查询前5个数据
select * from students limit 5;
--查询id6-10的数据
select * from students limit 5,5;
--每页显示2个,显示第六页的信息,按照年龄从小到大排序
select * from students order by age asc limit 10,2;