关于SQL中的Join查询有哪些?

格桑2021-10-20 15:44

    讲Join之前,我们先来回顾下SQL的执行顺序是怎么样的。

SELECT * FROM Table A ... WHERE...GROUP BY... (LIMIT)...;

    上面这个查询语句,一般就是我们书写的规范,然而实际上,机器去执行我们写的SQL语句,并不是从左到右开始执行的。

    机器去解析SQL语句时,是以from为开始,然后再执行where之后的条件,最后才是执行select中的字段。如下图:

关于SQL中的Join查询有哪些?

    了解机器如何解析SQL顺序之后,其实对我们未来优化查询是非常有帮助的。这里就先不往优化查询,建立索引方向上开展讲了。

    七种JOIN连接

    1)左链接:LEFTJOIN。即A表与B表,想要提取所有A表中的数据。如下图:

关于SQL中的Join查询有哪些?

    标准的结构是:LEFTJOIN...ON...

    对应的SQL语句是:

SELECT <select_list> FROM Table A LEFT JOIN Table B ON A.key=B.key;

    2)右链接:RIGHTJOIN。与左连接相反,右链接是想提取所有B表中的数据。如下图:

关于SQL中的Join查询有哪些?

    标准的结构是:RIGHTJOIN...ON...

    对应的SQL语句是:

SELECT <select_list> FROM Table A RIGHT JOIN Table B ON A.key=B.key;

    3)内链接:INNERJOIN。内链接是想提取A表与B表共有的数据,如下图:

关于SQL中的Join查询有哪些?

    标准的结构是:INNERJOIN...ON...

    对应的SQL语句是:

SELECT <select_list> FROM Table A INNER JOIN Table B ON A.key=B.key;

    上面三种是最常用的连接查询语句。那接下来,难度升级,继续往下看。

    4)有条件的左链接。旨在返回左表有但右表没有关联数据的记录集,如图:

关于SQL中的Join查询有哪些?

    标准的结构是:LEFTJOIN...WHERE...

    对应的SQL语句是:

SELECT <select_list> FROM Table A INNER JOIN Table B 
ON A.key=B.key WHERE B.Key IS NULL;

    5)有条件的右链接。返回左表没有但右表有关联数据的记录集,如图: