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