我们先来看看两张表:
student表:
article表:
一: 多表连接类型:
(1) 内连接:
在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','
SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2
(2) 外连接 = 左连接和右连接:
SELECT article.id,student.name FROM article LEFT JOIN student ON article.id=student.id
二: 表的约束条件:
(1) where 条件:
mysql>SELECT * FROM table1,table2 WHERE table1.id=table2.id;
(2) on:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
(3)基本的join用法:
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
首先我们假设有2个表A和B,他们的表结构和字段分别为:
表A:
ID Name
1 Tim
2 Jimmy
3 John
4 Tom
表B:
ID Hobby
1 Football
2 Basketball
2 Tennis
4 Soccer
(3.1)内连接:
SELECT A.name,B.`hobby` FROM A,B WHERE A.`id`=B.`id`
(2)外左连接:
SELECT A.Name FROM A LEFT JOIN B ON A.id = B.id
(3)联合查询:
SELECT t1.id,t2.id,t3.id FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id;
###################################插曲#############################################
总结:
当我们在对表进行JOIN关联操作时,对于ON和WHERE后面的条件,不清楚大家有没有注意过,有什么区别,可能有的朋友会认为跟在它们后面的条件是一样的,你可以跟在ON后面,如果愿意,也可以跟在WHERE后面。
这对于有的情况来讲,可能会是正确的,不过那种正确纯属于运气好,给撞上了。对于JOIN后面所跟条件,它们在ON和WHERE后面究竟有一个什么样的区别呢?
回答:
对于JOIN参与的表的关联操作,如果需要不满足连接条件的行也在我们的查询范围内的话,我们就必需把连接条件放在ON后面,而不能放在WHERE后面,如果我们把连接条件放在了WHERE后面,那么所有的LEFT,RIGHT,等这些操作将不起任何作用,对于这种情况,它的效果就完全等同于INNER连接。对于那些不影响选择行的条件,放在ON或者WHERE后面就可以。
记住:所有的连接条件都必需要放在ON后面,不然前面的所有LEFT,和RIGHT关联将作为摆设,而不起任何作用。
#####################################插曲##############################################
另外需要注意的地方:
在MySQL中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。