一、排序
desc:降序排序
asc:升序排序,默认
1.查询所有学员信息,并按照年龄进行降序排序
select * from students order by age desc;
2.查询班级为python的男生信息,并按照年龄进行降序排序
select * from students where class='python' and gender='1' order by age desc;
二、分页获取数据
limit 1;
从前面获取第一条数据
limit 1,1;
跳过第一条数据,取一条数据
1.获取前三个学员的信息
select * from students limit 3;
2.获取第二个学员的信息
select * from students limit 1,1;
使用limit实现分页效果
要求:每两条数据为一页
第一页:select * from students limit 0,2;
第二页:select * from students limit 2,2;
第三页:select * from students limit 4,2;
*公式:(n-1)2,2
练习
1.获取python班级,年龄最大的两个学生
2.获取每个班级的平均年龄,并按照平均年龄进行降序排序
3.统计每个班级的人数,获取人数最多的两个班级
顺序问题
where、group by、order by、limit
三、嵌套子查询
将一条查询语句,嵌入到另一条查询语句当中去
1.可以作为数据源
2.可以作为查询条件
查询年龄大于18岁的男生
方法一
select * from students where age>18 and gender='1';
方法二
select * from (select * from students where age>18) as newtable where newtable.gender='1';
查询女生人数为0的班级
方法一
首先,查询有女生的班级
select class from student group by class,gender having gender!='1'
然后
select class,count(class) from students where class not in (select class from student group by class,gender having gender!='1') group by class;
方法二
select class,count(*) from students group by class having count(*) = sum(gender);
四、逻辑外键
一对一(用户信息)
一张表中的唯一一条数据,对应另一张表中唯一一条数据。
把一张表的数据分为两张表,并通过外键字段将两张表的数据进行关联。
一对多(父子)
一张表中的唯一一条数据,对应另一张表中的多条数据。
多对多(老师学生)
一张表中的多条数据,对应另一张表的多条数据。
需要通过第三张表(关系表),建立联系。
五、嵌套查询
一对一(用户信息)
通过用户去查询用户的详情
根据用户名老张,查询老张的详细信息
通过用户详情去查询用户
已知手机号为120,查询手机号对应的用户
查询年龄为28和38的用户信息
多对多(学生老师)
查询老刘教师带的女学生
1.查老刘教师id
select id from teacher where name='老刘';
2.根据老师id去关系表查找对应的学生id
select s_id from teacher_student where t_id=(select id from teacher where name='老刘');
3.根据学生id去查学生表
select * from students where id in(select s_id from teacher_student where t_id=(select id from teacher where name='老刘')) and gender='0';
查询老刘教师带的学生
查询小明被那些老师教
1.查询学生id
select id from students where name='小明';
2.根据学生id去关系表查询对应的老师id
select t_id from teacher_student where s_id=(select id from students where name='小明');
3.根据老师id查询老师表
select * from teacher where id in(select t_id from teacher_student where s_id=(select id from students where name='小明'));
六、物理外键
会增加表和表之间的复杂度,会降低查询的速度。
外键约束格式:foreign key(当前表的外键字段) references 关联的表名(关联表的字段)
外键,主要用来约束一对多的关系。
一般情况下,多表中的外键字段,关联一表中的主键字段。
一对多(学生宿舍)
多对多(专业课程)
!!!注意:
添加外键约束时,
1.要先有外键字段
2.外键字段的类型,必须和要关联的字段类型一致
七、where关联查询(效率较低)
只能查询到两张表都有对应数据的信息。
一对多(学生宿舍)
1.查看每个学生的宿舍信息
2.查询小红住在哪个宿舍
多对多(专业课程)
3.所有专业对应的课程
4.查询python都要学习哪些专业
5.查询毛概都有哪些专业在学
八、连接查询
inner join内连接(结果与where关联查询相同)
格式:select 字段 from 表1 inner join 表2 on 关联条件
一对多(学生宿舍)
1.查看每个学生的宿舍信息
2.查询小红住在哪个宿舍
多对多(学生老师)
3.所有专业对应的课程
4.查询python都要学习哪些专业
5.查询毛概都有哪些专业在学
left join左连接
以左表(关键字左边的表)为准,将左表中所有的数据查询出来,去右表(关键字右边的表)中匹配信息,如果没有以null占位。
一对多(学生宿舍)
1.查看每个学生的宿舍信息
2.哪些学员没有宿舍
3.哪些宿舍是空宿舍
4.统计每个宿舍住了多少人
right join右连接
以右表(关键字右边的表)为准,将右表中所有的数据查询出来,去左表(关键字左边的表)中匹配信息,如果没有以null占位。
一对多(学生宿舍)
查看每个学生的宿舍信息