一、SQL 执行顺序
熟悉SQL的执行顺序才能写出效率高的SQL语句(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>
其中UNION ALL在ORDER BY之前
二、UNION和UNION ALL
1.使用准则a)所有查询中的列数和列的顺序必须相同。
b)数据类型必须兼容。
UNION:会删除相同的记录并按照查询字段的先后进行排序。如(SELECT name,age from test_data,会以name为标准优先排序)
UNION ALL:保留重复记录,不进行排序。
三、LEFT JOIN、RIGHT JOIN和INNER JOIN
(为方便描述,把三个JOIN 左边的表叫左表,右边的表叫右表)
1.LEFT JOIN 是以左表为基准,把左表的每一条数据遍历右表的每一条数据,ON为条件,只要ON条件成立则连接成功。ON条件不成立的保留左表内容,以null填补空缺字段。2.RIGHT JOIN 与 1 相反
3.INNER JOIN 也是遍历每一条数据,然后保留左表和右表共同存在的数据。
4.LEFT JOIN、RIGHT JOIN和INNER JOIN使用的一些注意事项
a)当进行关联操作时,关注其中一张表的关联条件字段是否会造成影响(ON条件关联字段)。如进行数据统计等会造成数据偏大,不准确。见下图
b)关联时应该使数据量尽量小,因为他们要比对(左表行数*右表行数)次
c)进行过滤时针对实际情况进行条件选择(如过滤条件:on后面用and进行连接或者on后面用where进行过滤,on后面跟 and 过滤效率更高,但是要考虑使用情况,如left join等等。on后面跟where进行条件过滤会在左表和右表关联完成以后再次进行过滤,效率较低。具体问题具体分析,根据实际需要选择and和where)
四、一些函数的使用时候的注意事项
1.SUM() 当字段不存在数据时,返回的是null,需要在java程序中进行null判断处理2.count()当表为空时返回是0,不用处理。
五、一些常用的命令
1.查看表结构的三种方式a)desc tablename;
b)show create table tablename;
c)use information_schema;select * from columns where table_name='tablename';
2.查看执行状态
show processlist;