透析sql语法

透析sql语法

sql的执行顺序

from
on
join
where
group by(开始使用select中的别名,后面的语句中都可以使用)
avg,sum….
having
select
distinct
order by
limit

/*
	mysql时从from开始执行,再执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,下一步骤操作虚拟表
*/

连接

join连接

join连接可以简单理解为按连接条件将多张表的字段横向拼接成一张表,具体实现是拿着一张表的一条记录去和另一张表的每一条数据做对比,如果两个数据满足连接条件,则进行横向拼接成一条记录放入新表,直至第一张表的每一条记录都和第二张表的每一条记录做过对比。

内连接只拼接满足条件的记录

  • user表
    在这里插入图片描述

  • 两个user表join不写on或on的条件是与字段无关的且结果为true的表达式

  • 两个user表join写on条件

    在这里插入图片描述

left join 在join连接的基础上,对左表中未匹配的记录和null进行横向拼接

right join 在join连接的基础上,对右表中未匹配的记录和null进行横向拼接

union all连接

union all连接可以简单理解为将多张表(字段的数量必须一致)纵向拼接成一张表**(最终表的字段名为第一张表的字段名)**

union连接是将union all连接的结果去重

  • user表

在这里插入图片描述

  • 两个user表union all连接

  • 两个user表union连接

group by 分组字段1,分组字段2,… having 筛选条件表达式

group by 是将表中分组字段数据相同的记录合并为一条记录,可以使用分组函数对非分组字段的数据进行处理(求和,求平均…)

在使用group by的时候需注意,select结果字段中只能出现分组字段和一些聚合函数(sum,avg,max,min,count,group_concat)的结果

having是在分组的基础上再次筛选数据,保留having后的表达式为true的记录

在使用having的时候需注意,having后的字段必须是分组字段

  • user表数据

    在这里插入图片描述

  • 按name分组

  • 分组后筛选数据

在这里插入图片描述

order by 排序字段1 排序方式,排序字段2 排序方式,…

order by是一个sql倒数第二个执行的操作,主要功能是将查询结果按照排序字段进行排序,排序方式缺省值为生序(asc),多个排序字段按照从左到右的优先级进行先后排序

  • user表数据

在这里插入图片描述

  • user表按照name生序排序

  • 上图会发现有很多name相同的记录,那么就可以再按照第二个字段排序,例如再按照age降序排序

    在这里插入图片描述

limit m,n

limit 是一个sql最后执行的一个操作,主要的功能是略过m条记录之后取n条记录

m可省略不写,缺省值为0

  • user表数据

在这里插入图片描述

  • user表略过0条取两条数据(即取前两条数据)

    在这里插入图片描述

  • user表略过前两条后取两条数据

    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值