JOIN关键字

一、前置条件

有如下两张表:用户表和用户详情表

SELECT * FROM `user`

SELECT * FROM `user_info`


二、INNER JOIN 关键字

内连接,又叫等值连接,只返回两个表中连接字段相等的行。

注释:INNER JOIN 与 JOIN 是相同的。在 INNER JOIN 中条件放在 on 中和 where 中,返回的结果集是相同的。

内连接查询示例

SELECT * FROM `user` u JOIN `user_info` i ON u.id = i.idSELECT * FROM `user` u JOIN `user_info` i WHERE u.id = i.id

总结

只返回匹配的行,没有匹配的行则不返回。没有主表的概念。


三、LEFT/RIGHT JOIN 关键字

  • LEFT JOIN 即使右表中没有匹配,也从左表返回所有的行。
  • RIGHT JOIN 则是即使左表中没有匹配,也从右表返回所有的行

注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。而 RIGHT JOIN 称为 RIGHT OUTER JOIN。

 

左连接查询示例【user为主表】

SELECT * FROM `user` u LEFT JOIN `user_info` i ON u.id = i.id

右连接查询示例

  • 将上述的左连接转换为右连接【user为主表】:

SELECT * FROM `user_info` i RIGHT JOIN `user` u ON u.id = i.id

  • 右连接查询【user_info为主表】

SELECT * FROM `user` u RIGHT JOIN `user_info` i ON u.id = i.id

总结

  1. 左连接查询是以左表为主表,查询该表所有的数据。其次是查右表,如果右表中没有匹配,则结果用NULL来填充;
  2. 外连接条件只能放在 on 中;
  3. 左连接和右连接可以互相转换。

四、ON 和 Where关键字的区别 

数据库在通过连接 (join) 两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用 left join 时,格式:【表1 left jion 表2  on  连接条件  where 过滤条件】,on 和 where 条件的区别如下:

1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。

2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

记住:所有的外连接条件都必需要放在ON后面,不然前面的所有LEFT,和RIGHT关联将作为摆设,而不起任何作用。(会报语法错误)

posted @ 2022-01-05 15:28  danielzzz  阅读(384)  评论(0编辑  收藏  举报