一、内连接INNER JOIN

  INNER JOIN是一种连接类型,用于将两个或多个表的行组合在一起,但仅限于那些在所有表中都具有匹配值的行。换句话说,只有当两个表在某个字段(通常是主键和外键)上具有相同的值时,才会返回这些表的记录。

2个表的内连接示例:

SELECT product.product_id,product.product_name,product.product_type FROM productINNER JOIN product2 ON product.product_id = product2.product_id;

5个表的内连接示例:

SELECT product.product_id, product.product_name, product.product_typeFROM productINNER JOIN product2 ON product.product_id = product2.product_idINNER JOIN product3 ON product2.product_id = product3.product_idINNER JOIN product4 ON product3.product_id = product4.product_idINNER JOIN product5 ON product4.product_id = product5.product_id


二、左连接LEFT JOIN

    在SQL中,左连接(LEFT JOIN)是一种连接类型,用于从两个表中返回匹配的行。当使用左连接时,结果集将包含左表(第一个表)的所有记录,即使右表(第二个表)中没有匹配的记录。对于右表中没有匹配的记录,结果集中的右表字段将显示为NULL。

SELECT product.product_id,product.product_name,product.product_type FROM productLEFT JOIN product3 ON product.product_id = product3.product_id;


三、右连接RIGHT JOIN

    在SQL中,右连接(RIGHT JOIN)是一种连接类型,它与左连接(LEFT JOIN)相似,但方向相反。右连接返回右表(第二个表)的所有记录,即使左表(第一个表)中没有匹配的记录。如果左表中没有匹配的记录,则结果集中的左表字段将显示为NULL。

SELECT product.product_id,product.product_name,product.product_type FROM productRIGHT JOIN product3 ON product.product_id = product3.product_id;

四、全连接FULL OUTER  JOIN

MySQL 不支持 FULL OUTER JOIN 语法

支持 FULL OUTER JOIN 的数据库系统:PostgreSQL 或 OracleMySQL 支持的连接类型包括:

  • INNER JOIN

  • LEFT JOIN (或 LEFT OUTER JOIN)

  • RIGHT JOIN (或 RIGHT OUTER JOIN)

  • CROSS JOIN

    在 MySQL 中实现全连接FULL OUTER JOIN 的效果,需要结合 LEFT JOIN 和 RIGHT JOIN 的组合,再加上 UNION 操作。以下为示例语句:

SELECT product.product_id, product.product_name, product.product_typeFROM productLEFT JOIN product3 ON product.product_id = product3.product_id
UNION
SELECT product3.product_id, product.product_name, product.product_typeFROM product3LEFT JOIN product ON product3.product_id = product.product_idWHERE product.product_id IS NULL;五、自连接SELF JOIN

    SELF JOIN是一种特殊的JOIN操作,用于将表与其自身连接起来。通常,在一个表中,我们有多个记录和字段,有时需要将表按照特定条件连接自身,以便获得更多数据和信息。SELF JOIN允许我们通过将表的副本与原表进行连接来实现这个目的,从而在同一个表中进行数据比较和分析。


六、交叉连接CROSS JOIN

CROSS JOIN 是 SQL 中的一种连接操作,主要有以下特点:

  1. CROSS JOIN 会产生两个表的笛卡尔积(Cartesian product),即将第一个表的每一行与第二个表的每一行进行组合。

  2. 结果集的行数等于两个表行数的乘积。例如,如果表 A 有 10 行,表 B 有 5 行,CROSS JOIN 的结果将有 50行。

  3. 使用 CROSS JOIN 时需要注意性能问题,因为它可能会产生非常大的结果集。

  4. 大多数关系型数据库支持 CROSS JOIN,包括 Oracle、MySQL、PostgreSQL 和 SQLite。

SELECT * FROM productCROSS JOIN product3;