解析:内联,左外联,右外联,全连接,交叉连接的区别

时间:2024-01-22 05:26:46 

连接分为:内连接、外连接、交叉连接
一、内连接——最常用
定义:
仅将两个表中满足连接条件的行组合起来作为结果集。
在内连接中,只有在两个表中匹配的行才能在结果集中出现
关键词:INNER JOIN
格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ON或WHERE 条件表达式
说明:
(1)列名表中的列名可以出自后面的两个表,但如果两个表中有同名列,应在列名前标明出处,格式为:表名.列名
(2)若连接的两个表名字太长,可以为它们起个别名。 格式为:表名 AS 别名
(3)INNER是默认方式,可以省略
eg:
select *
from   t_institution i
inner join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
其中inner可以省略。
等价于早期的连接语法
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"

二、外连接
1、左(外)连接
定义:在内连接的基础上,还包含左表中所有不符合条件的数据行,并在其中的右表列填写NULL
关键字:LEFT JOIN
eg:
select *
from   t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
其中outer可以省略。
注意:
当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句 中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
条件在join子句
select *
from   t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”

结果是:
inst_no     inst_name             inst_no     teller_no   teller_name
5801        天河区                5801        0001        tom
5801        天河区                5801        0002        david
5802        越秀区
5803        白云区

条件在where子句
select *
from   t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”

结果是:
inst_no     inst_name             inst_no     teller_no   teller_name
5801           天河区                    5801          0001               tom
5801           天河区                    5801          0002              david

2、右(外)连接
定义:
在内连接的基础上,还包含右表中所有不符合条件的数据行,并在其中的左表列填写NULL
关键字:RIGHT JOIN
3、完全连接
定义:
在内连接的基础上,还包含两个表中所有不符合条件的数据行,并在其中的左表、和右表列填写NULL
关键字:FULL JOIN

三、交叉连接
定义:
将两个表的所有行进行组合,连接后的行数为两个表的乘积数。(笛卡尔积)
关键词:CROSS JOIN
格式:FROM 表名1 CROSS JOIN 表名2

四, 自身连接
自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。
下面例子是在机构表中查找本机构和上级机构的信息。
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no

结果是:
superior_inst sup_inst_name         inst_no     inst_name
800                             广州市                5801        天河区
800                             广州市                5802        越秀区
800                             广州市                5803        白云区

标签:内联,左外联,右外联
0
投稿

猜你喜欢

  • Python实现矩阵转置的方法分析

    2023-07-03 21:56:46
  • Python中if __name__ == '__main__'作用解析

    2021-04-14 09:02:42
  • vue-music关于Player播放器组件详解

    2024-04-28 09:26:11
  • iframe框架用JavaScript子页面控制父页面

    2009-01-19 13:43:00
  • golang中包无法引入问题解决

    2023-09-03 12:34:58
  • SQL数据库实例名称找不到或远程连接失败并显示错误error40的原因及解决办法

    2024-01-27 11:40:18
  • python人工智能深度学习算法优化

    2023-04-21 15:46:40
  • python小程序基于Jupyter实现天气查询的方法

    2021-05-30 10:39:40
  • 浅谈Python协程asyncio

    2021-01-12 21:30:32
  • python图形界面tkinter的使用技巧

    2022-04-24 01:34:22
  • [Oracle] Data Guard CPU/PSU补丁安装详细教程

    2024-01-26 05:48:21
  • SpringMVC4+MyBatis+SQL Server2014实现数据库读写分离

    2024-01-23 05:07:22
  • Python中的wordcloud库安装问题及解决方法

    2022-04-14 21:38:43
  • Python3实现打格点算法的GPU加速实例详解

    2022-05-26 23:20:30
  • jquery实现不同大小浏览器使用不同的css样式表的方法

    2024-04-10 10:34:53
  • 用Dreamweaver实现Real与网页结合

    2010-07-13 12:11:00
  • tensorflow使用range_input_producer多线程读取数据实例

    2022-10-19 16:43:21
  • PHP implode()函数用法讲解

    2023-06-19 22:54:34
  • Python图片验证码降噪和8邻域降噪

    2023-09-16 10:05:49
  • Python split() 函数拆分字符串将字符串转化为列的方法

    2022-02-12 00:14:19
  • asp之家 网络编程 m.aspxhome.com