内连接的两种写法

embedded/2024/10/19 7:29:58/

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

   SELECT *FROM table1INNER JOIN table2ON table1.id = table2.table1_id;


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

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

  SELECT *FROM table1, table2WHERE 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 table1INNER JOIN table2ON table1.id = table2.table1_id;


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

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

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

     示例:

     SELECT *FROM table1LEFT OUTER JOIN table2ON table1.id = table2.table1_id;


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

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

     示例:

     SELECT *FROM table1RIGHT OUTER JOIN table2ON table1.id = table2.table1_id;


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

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

     示例:

     SELECT *FROM table1FULL OUTER JOIN table2ON table1.id = table2.table1_id;


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

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


http://www.ppmy.cn/embedded/120039.html

相关文章

CF1619D.New Year‘s Problem

CF1619D.New Year’s Problem 贪心 因为只能取到n-1个商店&#xff0c;因此当n-1 > m时一定会有两人在同一家商店买礼物 枚举哪一家商店&#xff0c;哪两个人买礼物&#xff0c;再与最优时候(不管n-1)的最小值取小代码附注释如下 #include<bits/stdc.h>using name…

HTML元素居中

⾏内元素⽔平垂直居中 设置⽗级标签。 ⽔平居中&#xff1a; text-align: center 垂直居中&#xff1a; line-height&#xff1a;盒⼦⾼度 ⽔平垂直都居中 <!DOCTYPE html> <html> <head><style>.container {position: relative;width: 200px;height: …

SpringBoot集成阿里easyexcel(二)Excel监听以及常用工具类

EasyExcel中非常重要的AnalysisEventListener类使用&#xff0c;继承该类并重写invoke、doAfterAllAnalysed&#xff0c;必要时重写onException方法。 Listener 中方法的执行顺序 首先先执行 invokeHeadMap() 读取表头&#xff0c;每一行都读完后&#xff0c;执行 invoke()方法…

2024 Fortinet OT工业安全高峰论坛成功举办

9月10日&#xff0c;“2024年Fortinet OT工业安全高峰论坛”于广州圆满闭幕。盛会紧扣“工业安全新行动&#xff0c;智驭AI新时代”主题&#xff0c;汇聚全球OT领域精英、技术先锋及安全领域翘楚&#xff0c;共谋OT现代化浪潮下的安全新篇章。通过多维度视角、深层次对话、鲜活…

C++中string的使用

文章目录 string类对象的常见构造string类对象的容量操作size() / length()&#xff1a;返回字符串的长度&#xff08;字符数&#xff09;。capacity()&#xff1a;返回当前字符串分配的容量&#xff08;即在重新分配内存前可以保存的字符数&#xff09;。检查是否为空&#xf…

基本控制结构2

顺序结构 程序按照语句的书写次序顺序执行。 选择结构 判断选择结构又称条件分支结构&#xff0c;是一种基本的程序结构类型。 在程序设计中&#xff0c;当需要进行选择、判断和处理的时候&#xff0c;就要用到条件分支结构。 条件分支结构的语句一般包括if语句、if–else…

git clone或repo init 时报错:fatal: 协议错误:错误的行长度 xxx

执行repo init或git clone时报错:protocol error: bad line length 或协议错误:错误的行长度 系统版本:Ubuntu20.04 repo version v2.47 repo launcher version 2.45 git version 2.25.1 报错信息 fatal: 协议错误:错误的行长度 948 fatal: 远端意外挂断了 repo: err…

从0学习React(4)---更新组件状态setState

在上篇文章中&#xff0c;我们讲了React中的一些基础&#xff0c;包括组件的种类以及state的使用。上篇文章的结尾&#xff0c;我们讲到了如何更新组件的状态&#xff08;使用setState&#xff09;。但是我没有讲的很详细&#xff0c;这篇文章我们详细的讲一下React中如何更新组…