内连接的两种写法

1. **使用`INNER JOIN`的写法**:

   SELECT *
   FROM table1
   INNER JOIN table2
   ON table1.id = table2.table1_id;


   - 这是现代SQL的标准写法,更清晰、更易于理解。
   - `JOIN`关键字明确表示了连接操作,`ON`子句指定了连接条件。
   - 支持多种类型的连接(如左连接、右连接、全连接等)。
   - 可以链式连接多个表(例如`table1 INNER JOIN table2 ON ... INNER JOIN table3 ON ...`)。

2. **使用逗号分隔表名的写法**:

  SELECT *
   FROM table1, table2
   WHERE table1.id = table2.table1_id;


   - 这是较老的SQL语法,也被称为隐式内连接。
   - `WHERE`子句用于指定连接条件,这可能会与过滤条件混淆。
   - 不支持左连接、右连接或全连接。
   - 链式连接多个表时,需要使用额外的`WHERE`子句来指定每对表之间的连接条件,这可能会导致查询难以阅读和维护。

**哪个更好?**

- **可读性**:`INNER JOIN`的写法更清晰,更易于理解,尤其是对于复杂的查询和多表连接。
- **灵活性**:`INNER JOIN`的写法更灵活,支持多种类型的连接,并且可以轻松地链式连接多个表。
- **维护性**:使用`INNER JOIN`的写法更容易维护,因为它将连接条件和过滤条件分开,使得查询逻辑更清晰。

总的来说,推荐使用`INNER JOIN`的写法,因为它是现代SQL的标准,更清晰、更灵活,也更易于维护。尽管老的写法仍然有效,但它在可读性和维护性方面不如`INNER JOIN`写法。

 

内连接(INNER JOIN)和外连接(OUTER JOIN,包括左外连接LEFT OUTER JOIN、右外连接RIGHT OUTER JOIN和全外连接FULL OUTER JOIN)在SQL查询中用于连接多个表,但它们返回的结果集有所不同:

1. **内连接(INNER JOIN)**:
   - 只返回两个表中联接条件相匹配的行。
   - 如果一行在其中一个表中没有匹配的行,则这行不会被包含在结果集中。
   - 结果集只包含两个表中都有的记录。

   示例:

   SELECT *
   FROM table1
   INNER JOIN table2
   ON table1.id = table2.table1_id;


   这个查询只会返回`table1`和`table2`中`id`字段相匹配的记录。

2. **外连接(OUTER JOIN)**:
   - 返回至少在一个表中满足联接条件的所有行。
   - 如果一行在其中一个表中有匹配的行,而在另一个表中没有匹配的行,则结果集中该行的另一个表的字段将为NULL。

   - **左外连接(LEFT OUTER JOIN)**:
     - 返回左表(FROM子句中指定的表)的所有行,即使右表中没有匹配的行。
     - 右表中没有匹配的行将用NULL填充。

     示例:

     SELECT *
     FROM table1
     LEFT OUTER JOIN table2
     ON table1.id = table2.table1_id;


     这个查询会返回`table1`的所有记录,如果`table2`中有匹配的记录,则一并返回;如果没有,则`table2`的字段将为NULL。

   - **右外连接(RIGHT OUTER JOIN)**:
     - 返回右表(JOIN子句中第二个表)的所有行,即使左表中没有匹配的行。
     - 左表中没有匹配的行将用NULL填充。

     示例:

     SELECT *
     FROM table1
     RIGHT OUTER JOIN table2
     ON table1.id = table2.table1_id;


     这个查询会返回`table2`的所有记录,如果`table1`中有匹配的记录,则一并返回;如果没有,则`table1`的字段将为NULL。

   - **全外连接(FULL OUTER JOIN)**:
     - 返回两个表中所有的行,无论它们是否匹配。
     - 如果一行在其中一个表中有匹配的行,而在另一个表中没有匹配的行,则结果集中该行的另一个表的字段将为NULL。

     示例:

     SELECT *
     FROM table1
     FULL OUTER JOIN table2
     ON table1.id = table2.table1_id;


     这个查询会返回`table1`和`table2`的所有记录,无论是否有匹配的记录。如果某一边没有匹配的记录,则该边的字段将为NULL。

总结来说,内连接只返回两个表中都有匹配的记录,而外连接会返回至少在一个表中满足条件的所有行,未匹配的字段用NULL填充。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值