Mysql多表连接查询实例详解

我们先来看看两张表:

 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 条件:

扫描二维码关注公众号,回复: 8608825 查看本文章
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中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。

发布了56 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/knight_zhou/article/details/103733555