多表查询select语句顺序
存取时,为了方便分开存,取得时候需要连起来
连表操作实例:
# 插入数据
查看表:
此时发现,拼表方式不是我们想要的,这个拼表方式称为笛卡尔积形式

正确的拼表语句:

表的三种连接方式:
表连接有特有的语句表达,不要用where语句连表。
1、内连接: 只取两张表的共同部分
语法:
2、左连接, 在内连接的基础上保留左表的记录
3、右连接
4、全外连接
在内连接的基础上,保留没有对应关系的记录。
实例讲解 select操作顺序:
求平均年龄大于30岁的部门名
涉及到:拼接表、分组、聚合、刷选having

完整语法:
执行顺序: (重点)
1、FROM
第一步,执行FRON语句。我们首先需要知道最开始从哪个表开始的,这就是FROW告诉我们的。现在有了<Left_table>和right_table>两个表,我们到底从哪个表开始,还是从两个表进行某种联系以后再开始呢?它们之间如何产生联系呢?——笛卡尔积
2、执行ON过滤
连表依据,执行完笛卡尔积以后,接着就进行条件过滤,根捆指定的条件,去掉那些不符合条件的数据
3、添加外部行
这一步只有在连接类型为OUTER J0IN时才发生,如LEFT OUTER JOIN、RIGHT OUTER J0IN和FULL OUTER J0IN。在大多数的时候,我们都是会省略掉OUTER关键字的,但OUTER表示的就是外部行的概念。
4、执行WHERE过滤
对添加外部行得到的表进行WHERE过滤,只有符合<where_condition>的记录才会输出到新表中。
但是在使用where子句时,需要注意一下两点:
1)由于数据还没有分组,因此现在还不能在where过滤中使用where_condition=MIN(col)这类对分组统计的过滤;
2)由于还没有进行列的选取操作,因此在select中使用列的别名也是不被允许的,如:select city as c from t where c='shanghai'是不允许出现的。
5、执行GROUP BY分组
group by子句主要是对使用where子句得到的虚拟表进行分组操作。
6、执行HAVING过滤
HAVING子句主要和GROUP BY子句配合使用,对分组得到的虚拟表进行条件过滤。
7、SELECT列表
现在才回执行到SELECT子句,不要以为SELECT子句被写在第一行,就是第一个被执行的。
8、执行DISTINCT子句
如果在查询中指定DISTINCT子句,则会创建一张内存临时表,如果内存放不下,就需要存放在硬盘了。
9、执行ORDER BY 子句
对虚拟表的内容按照指定的列进行排序,然后返回一个新的虚拟表。
10、执行LIMIT子句
限制输出数据,很多时候,limit会与order by子句一起使用。