MySQL 06 - SQL语句三

SQL语句三

1. 分组与分组之后的筛选

1.1 分组

在这里插入图片描述
在数据库中 ,通过group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组。

select  ...from  table  group by 需要分组字段;

练习:

  • 计算男生和女生中的人数
    在这里插入图片描述
    在这里插入图片描述
  • 男生最大年龄与女生最大年龄
    在这里插入图片描述
    在这里插入图片描述
  • 如果分组后 还想查看总人数 with rollup
    在这里插入图片描述
    在这里插入图片描述

group_concat(…)
我们通过group_concat(…)查看每组的详细信息
在这里插入图片描述
练习:

  • 查询同种性别(分组后)的姓名
    在这里插入图片描述
    在这里插入图片描述

  • 查询组内年龄,姓名
    在这里插入图片描述
    在这里插入图片描述

1.2 分组后的筛选

在这里插入图片描述

练习:

  • 查询男生女生总数大于2
    在这里插入图片描述
    在这里插入图片描述
  • 查询男生女生总数大于2的姓名
    在这里插入图片描述
    在这里插入图片描述
  • 查询男生女生平均年龄超过18岁的性别,以及姓名
    在这里插入图片描述
    在这里插入图片描述

2.排序

order by 字段 默认升序
order by asc 字段 指定升序
order by desc 字段 指定降序

练习:

  • 查询年龄在18到26之间的男同学,按照年龄从小到大排序
    在这里插入图片描述
    在这里插入图片描述

  • 查询年龄在18到20岁之间的女同学,id从高到低排序
    在这里插入图片描述
    在这里插入图片描述

  • 查询年龄在18-23岁之间的女性,年龄从高到低降序,当年龄相同时,按照id从低到高升序。

在这里插入图片描述
在这里插入图片描述

3. 限制

limit start,count

  • start 为偏移量,默认起始0
  • count为 条数
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. 表连接

当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql。这时我们就需要使用表连接。

分类

  • 内连接
  • 外连接
    • 左连接
    • 右连接
4.1 内连接

内连接仅选出两张表中互相匹配的记录
select * from 表1 inner join 表2 on 表1.列 = 表2.列
在这里插入图片描述

students 表
在这里插入图片描述
classes表
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

练习:

  • 显示学生的所有信息,但只显示班级名称

在这里插入图片描述
在这里插入图片描述

  • 将班级名称显示在第一列
    在这里插入图片描述
    在这里插入图片描述
  • 查询 有能够对应班级的学生以及班级信息,按照班级进行排序

在这里插入图片描述
在这里插入图片描述

  • 当同一个班级时,按照学生的id进行从大到小排序
    在这里插入图片描述
    在这里插入图片描述
4.2 左连接

查询的结果为两个表匹配到的数据 ,左表持有的数据,对于右表中不存在的数据使用null填充
以左表为主

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
练习:

  • students表左连接classes表 并查看班级为null的数据
    在这里插入图片描述
    在这里插入图片描述

  • 左连接 并且 查询 s.is_del=1 并且 s.name=“amy” 的数据
    在这里插入图片描述
    在这里插入图片描述

4.3 右连接

查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使用null填充。
select * from 表1 right join 表2 on 表1.列 = 表2.列;
在这里插入图片描述

5. 子查询

某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。

  • 查询年龄最大的男同学 所对应的名字
    在这里插入图片描述

在这里插入图片描述

  • 查询出大于平均年龄的女性学生信息
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值