D4-查询2
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
4.1 分页
语法:limit start, count
限制查询出来的数据个数
查询前5个数据

每页显示2个,第1个页面

每页显示2个,第2个页面

每页显示2个,第3个页面

每页显示2个,第4个页面

start=(页数-1)每页的个数*
每页显示2个,显示第4页的信息, 按照年龄从大到小排序
错误写法1:
select * from students limit 6,2 order by age asc;
正确写法:
注意:limit 放在最后面

错误的写法2:
select * from students limit 2*(6-1),2;
4.2 连接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回。mysql支持三种类型的连接查询,分别为:
-
内连接查询:查询的结果为两个表匹配到的数据
-
右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
-
左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
4.2.1 内连接
语法:
inner join ... on
select ... from 表A inner join 表B;
查询对应班级的学生以及班级信息

按照要求显示姓名、班级

给数据表起名字

查询 有能够对应班级的学生以及班级信息,显示学生的所有信息 students.*,只显示班级名称 classes.name.

在以上的查询中,将班级姓名显示在第1列

查询 有能够对应班级的学生以及班级信息, 按照班级进行排序

当时同一个班级的时候,按照学生的id进行从小到大排序

4.2.2 左关联
left join
查询每位学生对应的班级信息

查询没有对应班级信息的学生

不建议使用 select * from students left join classes on students.cls_id=classes.id having classes.id is null;
注意:建议having的筛选条件多用在group by中的子表筛选,其余地方建议用where进行筛选。
right join on

注意:右连接转换一下顺序就是左关联,所以我们常用左连接,即,将数据表名字互换位置,用left join完成。

4.3 子查询
定义:在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
简单来讲就是:查询套查询
补充:
主查询定义:主要查询的对象,第一条 select 语句。
主查询和子查询的关系
- 子查询是嵌入到主查询中
- 子查询是辅助主查询的,要么充当条件,要么充当数据源
- 子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类
- 标量子查询: 子查询返回的结果是一个数据(一行一列)
- 列子查询: 返回的结果是一列(一列多行)
- 行子查询: 返回的结果是一行(一行多列)
4.3.1 标量子查询(一个值)
查询出高于平均身高的信息(height)

4.3.2 行级子查询
查询最高的男生信息(一行值)


4.3.3 列级子查询(一列值)
查询学生的班级号能够对应的 学生名字

注意:"in"和“=”的用法