MySql关键字的一般组成顺序如下:
(7)SELECT (8)DISTINCT <select_list>
(1)FROM [left_table]
(3)<join_type> JOIN [right_table]
(2)[ON|USING] <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)HAVING <having_condition>
(9)ORDER BY <order_by_list>
(10)LIMIT <start_line,total_line>
其中,小括号内的数字表示MySql的执行顺序。要知道,Sql并不是哪个关键字在前就执行哪个。基本上,SELECT总是第一个写但却是较后执行,Sql都是先执行FROM语句,每一个步骤都生成一张虚拟表作为下一个步骤的输入。
<join_type>分为三步:
第一步,是否是natural自然连接:如果加上natural,则数据库会自动连接两张表的同名字段,连接完成后同名字段合并,当然后面就不能使用ON关键字,但可以使用USING关键字,表示如果两张表中的同名字段超过一个,但只使用USING指定的字段进行连接。
第二步,左left右right全full连接:只有在连接类型为outer才能使用,见第三步。
第三步,内连接inner外连接outer:内连接是默认的,即只写一个join默认为inner join,inner根据ON指定的字段进行连接,但指定的两个字段不会像natural一样进行合并。outer连接分为三种,left、right和full,left outer指保留左边的表中所有的行即使右边的表没有匹配的连接行。
然而,SELECT虽然是最后执行,但<select_list>中定义的别名却可以在其他先执行的语句使用。
参考资料:qanholas的博文