MySQL写脚本的思考

1. 需要考虑多个表格连接的时候,一条有用的思路:

常使用左连接,  table1 LEFT JOIN table2 ON table1.expr1 = table2.expr2;

首要考虑的就是连接生成的表格要是自己所需要的主键,因此table1.expr1要是生成表的主键,而且这个主键要是我们整个SQL文想得到的表的最长的那一列。

eg.一张所有学生在不同课程的成绩表,所有学生id为主键,每门课是一张表,而且选的学生不一样;

要得到以上的这张总表,就需要使用连接,以包含所有学生id的表为table1,然后去连接其他课程的成绩表,条件是 table1.学生id = table课程.学生id

因为是左链接,所以table1中的学生id永远都存在,而其他表格中有成绩的就显示成绩,没有成绩的就是null。

总而言之,写多个表连接的sql文时,基本按照这个连接思路。

2. 子查询与连接的联系与区别

查询的时候经常要使用到连接与子查询,这两者相同点在于:都会生成新表,但是他们之间的区别更大。

子查询还是查询,只不过是在嵌套之中的查询,得到一个新表,这是一张独立的表,需要有别名(AS)来标识;

连接是查询中的一个动作,相比于查询低一个层次,连接得到的新表是相当于在原表的基础上做修改,或者就是说拼接两张表,列(column)依然可以直接被原来的表名调用,不需要新建别名。

***************************************************************************************************************************************************************************************************************************************************************************************

当要筛选去掉null值的时候,使用:IS NOT NULL (记住 IS 的用法) 

SELECT user_id FROM kz_order_info WHERE user_id IS NOT NULL AND status = 50 GROUP BY user_id
原文地址:https://www.cnblogs.com/xuhaojun/p/9149791.html