SQL语句三

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

1.1 分组

mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据


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

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

练习:

  • 计算男生和女生中的人数
  • 男生最大年龄与女生最大年龄
  • 如果分组后 还想查看总人数 with rollup

group_concat(…)

我们通过group_concat(…)查看每组的详细信息

mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_02


练习:

  • 查询同种性别(分组后)的姓名
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_升序_03


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_04

  • 查询组内年龄,姓名
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_05


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_06

1.2 分组后的筛选

mysql查询男生人数和女生人数 sql语句查询男生女生人数_升序_07

练习:

  • 查询男生女生总数大于2
  • 查询男生女生总数大于2的姓名
  • 查询男生女生平均年龄超过18岁的性别,以及姓名

2.排序

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

练习:

  • 查询年龄在18到26之间的男同学,按照年龄从小到大排序
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_08


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_09

  • 查询年龄在18到20岁之间的女同学,id从高到低排序
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_10


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_升序_11

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

mysql查询男生人数和女生人数 sql语句查询男生女生人数_字段_12


mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_13

3. 限制

limit start,count

  • start 为偏移量,默认起始0
  • count为 条数

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_14


mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_15

4. 表连接

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

分类

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

内连接仅选出两张表中互相匹配的记录

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

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_16

students 表

mysql查询男生人数和女生人数 sql语句查询男生女生人数_字段_17


classes表

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_18


mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_19

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_20

练习:

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

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_21


mysql查询男生人数和女生人数 sql语句查询男生女生人数_字段_22

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

mysql查询男生人数和女生人数 sql语句查询男生女生人数_升序_23


mysql查询男生人数和女生人数 sql语句查询男生女生人数_字段_24

  • 当同一个班级时,按照学生的id进行从大到小排序
4.2 左连接

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

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

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_25


mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_26


mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_27


练习:

  • students表左连接classes表 并查看班级为null的数据
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_数据_28


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql_29

  • 左连接 并且 查询 s.is_del=1 并且 s.name=“amy” 的数据
  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_字段_30


  • mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_31

4.3 右连接

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

select * from 表1 right join 表2 on 表1.列 = 表2.列;

mysql查询男生人数和女生人数 sql语句查询男生女生人数_升序_32

5. 子查询

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

  • 查询年龄最大的男同学 所对应的名字

mysql查询男生人数和女生人数 sql语句查询男生女生人数_mysql查询男生人数和女生人数_33

  • 查询出大于平均年龄的女性学生信息