当前位置: 首页 > news >正文

Oracle表连接方式之等值连接、外部连接

ORACLE 8i,9i 表连接方法。

 

一般的相等连接:
select * from a, b where a.id = b.id;
这个就属于内连接。

对于外连接:
Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

LEFT OUTER JOIN:左外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+)
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。

RIGHT OUTER JOIN:右外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。

FULL OUTER JOIN:全外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

ORACLE8i是不直接支持完全外连接的语法,也就是说不能在左右两个表上同时加上(+),下面是在ORACLE8i可以参考的完全外连接语法
select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
union
select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id

连接类型定义图示例子
内连接只连接匹配的行select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外连接包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外连接包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外连接包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)连接使用等值以外的条件来匹配左、右两个表中的行select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉连接生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配 select A.c1,B.c2 from A,B;

相关文章:

  • eclipse环境下,java操作MySQL的简单演示
  • 牛人博客链接
  • oracle执行计划相关概念
  • 日常(委屈到爆炸)
  • oracle SQL表执行路径(表扫描方式)
  • 并发编程(四):ThreadLocal从源码分析总结到内存泄漏
  • 表之间的连接
  • 【剑指Offer面试题】九度OJ1384:二维数组中的查找
  • 查看执行计划
  • oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  • 如何改变oracle的执行计划(HINT)
  • 【Java线程】SwingWorker的用法
  • 如何分析执行计划
  • ipconfig提示不是内部或外部命令
  • ETL模型设计
  • [Vue CLI 3] 配置解析之 css.extract
  • 《深入 React 技术栈》
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • conda常用的命令
  • CSS实用技巧
  • CSS中外联样式表代表的含义
  • mysql中InnoDB引擎中页的概念
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Yii源码解读-服务定位器(Service Locator)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 多线程事务回滚
  • 深度学习在携程攻略社区的应用
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 我从编程教室毕业
  • 一起参Ember.js讨论、问答社区。
  • 在Unity中实现一个简单的消息管理器
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #QT(智能家居界面-界面切换)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (python)数据结构---字典
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (第二周)效能测试
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十三)Flask之特殊装饰器详解
  • (四)事件系统
  • (一)Dubbo快速入门、介绍、使用
  • (转)程序员技术练级攻略
  • .NET 8.0 中有哪些新的变化?
  • .Net 应用中使用dot trace进行性能诊断
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET学习全景图
  • .NET与java的MVC模式(2):struts2核心工作流程与原理