表名:student
字段信息
年龄age
性别gender:enum(‘男’,‘女’)
身高height:
查询表格样式
主要有两张表,表络的情况如下
比较运算符
>
>=
<
<=
=
!= 或者 <>
》查询年龄大于18岁的信息
select * from students where age > 18
》查询年龄小于18岁的信息
select * from student where age < 18
逻辑运算符
and
or
not
》查询18到20岁之间的学生,全部字段信息
select * from students where age>18 and age<20;
》查询18岁以上的女性
select * from students where age>18 and gender='女';
select * from students where age>18 and gender=2;
》查找18岁以上或者身高超过180(包含)以上的
select * from students where age>18 or height>=180;
》查找不是(18岁以上的女性)
select * from students where not(age>18 and gender=2);
》查年龄不是小于或等于18的,要找女的
select * from students where (not age<=18) and gender=2;
模糊查询
方式一
like
%
_
方式二
rlike 正则
》查询姓名以’小’开始的名字
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 "___";
》查询至少有2个字名字的信息
select name from students where name like "__%";
》查询以李开始的姓名
select name from students where name rlike "^李.*";
》查询以‘郭’开头,以‘城’结尾
select name from students where name rlike "^郭.*城$";
范围查询
in 元组
not in 元组
between ... and...
not between ... and ...
》查询年龄为18,34岁的信息
select * from students where age in (18, 34);
select * from students where age=18 or age=34;
》查询年龄不是12,18,34岁的信息
select * from students where age not in (12,18,34);
》查询年龄在18岁到34岁之间的信息
select * from students where age between 18 and 34;
查询结果包含18和34
》查询年龄不在18到34岁之间的信息
select * from students where age not between 18 and 34;
空判断
is null
is not null
》查出身高记录为空的数据
select * from students where height is null;
》 查询身高记录不为空的数据
select * from students where height is not null;
排序
order by 字段 排序
排序有
asc,由小到大
desc,由大到小
》查询年龄在18岁到34岁之间的男性,按照年龄从小到大的顺序排
select * from students where (age between 18 and 34) and gender=1 order by age;
select * from students where (age between 18 and 34) and gender=1 order by age asc;
》查询年龄在18到34岁之间的女性,身高由高到矮排序
select * from students where (age between 18 and 34) and gender=2 order by desc;
》查询年龄在18到34岁之间的女性,身高由高到矮排序,如果身高也一样的话,按照id由大到小排
select * from students where (age between 18 and 34) and gender=2 order by desc, id desc;
》查询年龄在18到34岁的女性,按照身高由大到小排,如果身高一样就按照年龄由小到大排,如果年龄也一样按照id从大到小排
select * from students where (age between 18 and 34) and gender=2 order by height desc, age asc, id desc;
》 按照年龄从小到大,如果年龄一样大,就按照身高从高到矮排
select * from students order by age asc, height desc;
聚合函数
帮我们计算某个值
count
max
min
avg
sum
》查询男性有多少人,显示出来,并且让表头名称为‘男性人数’
select count(*) as 男性人数 from students where gender = 1;
》查询班里的最大的年龄
select max(age) from students;
》查询女性的最高身高
select max(height) from students where gender=2;
》计算所有人的年龄总和
select sum(age) from students;
》计算班上平均年龄
select sum(age)/count(*) from students;
》计算班上平均年龄,结果保留三位小数
select round(sum(age)/count(*)),3) from students;
round(数字,保留位数)
》计算男性的平均身高,保留2位小数
select round(avg(height),2) from students where gender=1;
round(数据,位数) ===》 round(3.1415,2) -----> 3.14
分组
一般与聚合函数一起使用
group by 字段
group_concat(...)
having
先分组,再从组里取数据
》显示班里每一个性别的学生有多少个
select gender, count(*) from students group by gender;
》按照性别分组,并显示每一组中的成员名称
group_concat(字段)
select gender, group_concat(name) from students group by gender;
》计算男性的人数
select gender, count(*) from students where gender=1 group by gender;
》将男性分组,并显示组中男性的姓名年龄和id
select gender, group_concat(name,"_",age,"_",id) from students where gender=1 group by gender;
》查询平均年龄超过30岁的性别,以及姓名
select gender, group_concat(name), avg(age) from students group by gender ;
select gender, group_concat(name), avg(age) from students group by gender having avg(age) >30 ;
》 where 与 having的区别
where 是对最终查询的结果进行一次过滤
having 是对分组后的组进行过滤,过滤后再进行其它操作,比如聚合等等。。
所有能用where的地方,都可以使用having来代替。。 而且having支持聚合查询 having avg(age)
分页
限制查询出来的数据个数
limit
用法一
limit 数字m
效果, 只出m个数据
用法二
limit 起始下标,显示个数
》查询学生表中前五个数据
select * from students limit 5;
》limit带两个参数的例子
》分页的公式
limit(第N页-1)*每页显示个数, 每页显示个数
》查询学生信息按照年龄升序排序,在结果中从第11条数据开始取,取两个出来
select * from students order by age asc limit 10,2;
链接查询
多个表格间的关联查询
》查询学生表与老师表能够对的上号的信息
学生表的cls_id与班级表的id一致的
select * from students inner join classes on students.cls_id = classes.id
select * from 表1 inner join 表2 on 条件
》查询学生表与老师表能够对的上号的信息,字段要求显示学生表全部字段,班级表只显示name字段
select student.*, classes.name from students inner join classes on students.cls_id=classes.id;
》表名太长,表名以别名方式完成上面的查询。 students别名s, classes别名c
from 表名 as 别名
》上述查询中,把班级的名称放在第一列
》查询学生表与老师表能够对的上号的信息,字段要求显示学生姓名和班级名称
select students.name, classes.name from students inner join classes on students.cls_id = classes.id;
》查询能对的上号的学生与班级信息,显示班级表的班级名称,学生表的全部信息。按照班级名称由小到大排序,班级名称一样的时候,就按照学生ID由小到大来排序
》查询学生表并显示学生对应的班级,有班级的显示班级名称,没班级的让它空着
》根据上表的查询结果,把没有班级的学生信息找出来