关于inner join,left join,right join

各位大佬 我这个萌新实在不知道在什么情况下用内连接,左连接,右连接,但是原理我都很清楚,但是就是在写查询sql的时候 不知道到底该用哪个,各位大佬 求分享经验.

阅读 3.1k
3 个回答

image.png

A(左)、B(右)两表,都以key为关联条件(A.key = B.key),key存在null值。

1、内连接(将两表共有数据取出)

SELECT * FROM A INNER JOIN B ON A.key = B.key;

2、左连接(取出 右表独有数据 和 与左表能关联起来的数据)

SELECT * FROM A LEFT JOIN B ON A.key = B.key;

3、右连接(取出 左表独有数据 和 与右表能关联起来的数据)

SELECT * FROM A RIGHT JOIN B ON A.key = B.key;

4、只取左表(A)独有数据(通过where关联条件过滤,先保证左连接结果不变化,再使用where过滤左右两表能匹配的数据,即B.key IS NULL)

SELECT * FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL;

5、只取右表(B)独有数据(同上)

SELECT * FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL;

6、全连接(取出左右两表的所有数据)- MySQL不支持,可以通过union实现相同效果

SELECT * FROM A FULL OUTER JOIN B ON A.key = B.key ;

7、取出左右两表各自独有数据(即左右表的key为null时)

SELECT * 
    FROM A 
FULL OUTER JOIN B 
    ON A.key = B.key 
WHERE A.key IS NULL OR B.key IS NULL OR;

哪个扫描行数少用哪个啊。
a表1行,b表100w行。
请问是,a左连b,还是a右连b(b左连a)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题