关于Mysql的认识

本文主要是关于mysql的一些个人理解,如果文中用词或者理解方面出现问题,欢迎指出。此文旨在分享我对于mysql的整一些个人理解,对于细节方面不会去深究,若有名词或者理解方面的问题,欢迎指出

Mysql

须知:在此是默认读者熟悉了sql的一些概念,在此只是记录平时经常用到的一些sql以及背后的原理

mysql的执行顺序

select[distinct]

from

join(如left join)

on

where

group by

having

union

order by

limit

Mysql的执行顺序是

  1. from
  2. on
  3. join
  4. where
  5. group by
  6. having
  7. select
  8. distinct
  9. union
  10. order by
  11. limit

让我们一步一步去认识执行顺序

  1. 首先from,拿到某个表,如果from这里有多个表,它会做一个表之间的笛卡尔积。

  2. 通过on的条件去join一个表,这里假设我的on条件是两个表的某个字段相等,这时相当于将字段相等的两条记录拼接在一起

  3. where在上述操作得到的临时表后筛选符合条件的记录,得到一个临时表

  4. group by是将字段进行分组,就是将重复的字段合并成一个字段,分开来去展示,可以将已经分好的字段执行聚合函数。

    MySql从5.7版本开始默认开启only_full_group_by规则,规则核心原则如下,没有遵循原则的sql会被认为是不合法的sql

    1. group by后面的字段必须是select后面所有的字段,having和order by的字段根据执行顺序,它们后面的字段也必须是select里面的字段,但不像group by要求全部,它们可以选择单个字段。
    2. 如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组
  5. having:过滤分组,having在group by的基础上继续筛选,所以也叫组级筛选,而与之相对的where是对from的表进行行级过滤

    HAVING非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是,WHERE过滤行,而HAVING过滤分组。不过通常having是和group by成对出现的

  6. select,将所要展示的字段从临时结果集中展示出来

  7. distinct :去除重复的字段

  8. union:将union前后得到的表组合起来,这里要求两张表的字段是一样的,否则mysql中会将第二个表的记录组合进第一个表,而字段显示第一张表的字段。

  9. order by:对上述操作产生的临时表针对某字段进行排序操作。

  10. limit: 取出临时表中的前几条记录

补充:

  1. join是内连接还是外连接,无非就是记录连接的方式不同。内连接inner join相当于where,相当于将条件满足的记录拼接到一起。而外连接又分为left outer join(left join)和right outer join(right join),左外连接:A LEFT JOIN B,保持左表不变,而右表根据on的条件将满足符合的记录拼接到左表中去。右外连接反之亦然。
  2. where :由于where的执行顺序在from on join之后,条件里是不允许用临时表不存在的字段,像聚合函数、其他表的字段是不允许用的。
  3. group by:group by后面的字段要用select中的所有字段

mysql函数使用

数字型函数

ABS求绝对值
SQRT求二次方根
MOD求余数
CEIL 和 CEILING两个函数功能相同,都是返回不小于参数的最小整数,即向上取整
FLOOR向下取整,返回值转化为一个BIGINT
RAND生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列
ROUND对所传参数进行四舍五入
SIGN返回参数的符号
POW 和 POWER两个函数的功能相同,都是所传参数的次方的结


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部