连接条件和连接类型(内连接,等值连接,不等连接,外连接,左右全外连接)

连接条件和连接类型(内连接,等值连接,不等连接,外连接,左右全外连接),第1张

概述  本文使用的数据来自《精通Oracle Database 12c SQL & PL/SQL编程(第三版)》。这里用到了两张表,products和product_types,分别为产品表和产品类型表。   products的数据展示如下:      product_types的数据展示如下:      连接分为三中类型,即内连接,外连接和自连接。内连接根据连接条件不同,可以分为等值连接和不等连接。

  本文使用的数据来自《精通Oracle Database 12c sql & PL/sql编程(第三版)》。这里用到了两张表,products和product_types,分别为产品表和产品类型表。

  products的数据展示如下:

  

  product_types的数据展示如下:

  

  连接分为三中类型,即内连接,外连接和自连接。内连接根据连接条件不同,可以分为等值连接和不等连接。等值连接中使用的是等于 *** 作符(=),不等连接在连接中使用除等号外的 *** 作符(<,>,BETWEEN等);外连接根据保留数据的方向,分为左外连接、右外连接和全外连接。

  这里给出等值连接和内连接的比较:  

-- 内连接SELECT p.name,pt.nameFROM products p INNER JOIN product_types pt ON p.product_type_ID = pt.product_type_IDORDER BY p.name;
-- 等值连接SELECT p.name,pt.nameFROM products p,product_types pt WHERE p.product_type_ID = pt.product_type_ID ORDER BY p.name;

  两者查询的结果一样,查询的效率也一样,可以看出通常情况下,内连接是默认使用等值连接的。

  二者的查询结果如下:

  

  二者在时间和空间的效率如下:

  

   等值连接的一个特殊情况是自然连接。自然连接是根据两个表中同名的列进行连接的,因为在实际 *** 作中,经常需要明确指出根据哪些列连接,因此自然连接很少用。

  外连接分为左外连接、右外连接和全外连接。左外连接保留左表的所有行(如果右表没有匹配行,取空值),右外连接保留右表的所有行,全外连接保留左表和右表的所有行(取不到则另一侧留空)。

  其中左外连接可以通过left JOIN,或在右表加(+)实现;其中右外连接可以通过RIGHT JOIN,或在左表加(+)实现;(+)总是在被保留数据的另一侧出现。

  全外连接只能通过FulL JOIN实现,不存在两边(+)的写法。

-- 左外连接SELECT p.name,pt.nameFROM products p,product_types ptWHERE p.product_type_ID = pt.product_type_ID(+)ORDER BY p.name;-- 左外连接2SELECT p.name,pt.nameFROM products p left JOIN product_types pt ON p.product_type_ID = pt.product_type_IDORDER BY p.name;-- 右外连接SELECT p.name,product_types ptWHERE p.product_type_ID(+) = pt.product_type_IDORDER BY p.name;-- 右外连接2SELECT p.name,pt.nameFROM products p RIGHT JOIN product_types pt ON p.product_type_ID = pt.product_type_IDORDER BY p.name-- 全外连接SELECT p.name,pt.nameFROM products p FulL JOIN product_types pt ON p.product_type_ID = pt.product_type_IDORDER BY p.name

  自连接一般用于有层级结构的,如员工表(查询某员工的上级都有谁),BOM(物料清单)等。这里暂不举例,后面再填坑。

总结

以上是内存溢出为你收集整理的连接条件和连接类型(内连接,等值连接,不等连接,外连接,左/右/全外连接)全部内容,希望文章能够帮你解决连接条件和连接类型(内连接,等值连接,不等连接,外连接,左/右/全外连接)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存