MySQL数据库(三)--排序,分页,关系搭建,逻辑/物理外键,(多表查询)嵌套/where关联/连接查询

一、排序

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占位。

一对多(学生宿舍)

查看每个学生的宿舍信息
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值