MySQL数据库_数据的查询_分页、链接查询

MySQL数据库

分页

获取部分行

  • 当数据量过大时,在一页中查看数据是一件非常麻烦的事情

语法

select * from 表名 limit start,count

说明

  • 从start开始,获取count条数据
--限制查询出来的个数
select * from students where gender=1 limit 2;

--查询前5个数据
select * from students limit 0, 5;

--查询6-10(包含)的数据
select * from students limit 5, 5;



--每页显示2个,第1个页面
select * from students limit 0, 2;

--每页显示2个,第2个页面
select * from students limit 2, 2;

--每页显示2个,第3个页面
select * from students limit 4, 2;

--每页显示2个,第4个页面
select * from students limit 6, 2;    -- ---> limit (第n页-1)*每个的个数,每一页的个数;

--每页显示2个,显示第6也的信息,按照年龄从小到大排序
--错误的查询方法1:select * from students limit 2*(6-1), 2;
--错误的查询方法2:select * from students limit 10, 2 order by age asc;

select * from students order by age asc limit 10, 2;

select * from students where gender=2 order by height desc limit 0, 2;

链接查询

  • 当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
  • 一般在多表查询的时候使用,单表查询的时候,几乎没有用。

mysql支持三种类型的连接查询,分别为:

  • 内连接查询:查询的结果为两个表匹配到的数据

innerjoin

  • 外链接分为“左链接与右链接”

    • 左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充

    leftjoin

    • 右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充

    rightjoin

语法

select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列

内链接查询示例:

  • 交集
--查询 有能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id=classes.id;

--按照要求显示姓名、班级
select students.*,classes.name from students inner join classes on students.cls_id=classes.id;

select students.name,classes.name from students inner join classes on students.cls_id=classes.id;

--给数据表起名字
select s.name,c.name from students as s. inner join classes as c on s.cls_id = c.id;

--查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称
select s.*,c.name from student as s inner join classes as c on s.cls_id=c.id;

--在以上的查询中,将班级姓名显示在第1列
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id;

--查询 有能够对应班级的学生以及班级信息,按照班级进行排序
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name;

--当是同一个班的时候,按照学生的id进行从小到大排序
select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;

左链接查询示例:

  • 在左边的表,以该表为基准去取数据,取不到的,默认为NULL
--查询每位学生对应的班级信息
select * from students as s left join classes as c on s.cls_id=c.id;

--查询没有对应班级信息的学生
select * from students as s left join classes as c on s.cls_id=c.id having c.id is null;

select * from students as s left join classes as c on s.cls_id=c.id where c.id is null;
  • 使用 havingwhere都可以实现,但是两者的区别在哪里呢?
    • 如果是从原表里判断结果,那么就使用 where
    • 如果是从查到的新的结果当作一个结果集的话,在结果集中判断结果,那么就使用 having

右链接查询示例:

  • 在右边的表,以该表为基准去取数据,取不到的,默认为NULL
  • 一般情况下不常用,因为将两个表名字互换一下位置,用left join 亦可完成

猜你喜欢

转载自blog.csdn.net/weixin_42250835/article/details/90423457