数据表的连接有:

1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现

2、外连接: 包括

(1)左外连接 (左边的表不加限制)

(2)右外连接(右边的表不加限制)

(3)全外连接(左右两表都不加限制)

3、自连接(连接发生在一 张基表内)

sql标准语法:

select table1.column,table2.column

from table1 [inner | left | right | full ] join table2 on table1.column1 = table2.column2;

inner join 表示内连接;left join表示左外连接;right join表示右外连接;full join表示完全外连接;

on子句用于指定连接条件。注意,如果使用from子句指定内、外连接,则必须要使用on子句指定连接条件;

如果使用(+)操作符指定外连接,则必须使用where子句指定连接条件。

如果主表的主键列和从表的外部键列名称相同,那么可以使用 natural join 关键字自动执行内连接操作。

select  dname,ename from dept natural join emp;

select a.studentno, a.studentname, b.classname

from students a, classes b

where a.classid(+) = b.classid;

STUDENTNO STUDENTNAM CLASSNAME

---------- ---------- ------------------------------

1 周虎     一年级一班

2 周林     一年级二班

一年级三班

以上语句是右连接:

即"(+)"所在位置的另一侧为连接的方向,右连接说明 等号右侧的所有

记录均会被显示,无论其在左侧是否得到匹配。也就是说上例中,无

论会不会出现某个班级没有一个学生的情况,这个班级的 名字都会在

查询结构中出现。

反之:

select a.studentno, a.studentname, b.classname

from students a, classes b

where a.classid = b.classid(+);

STUDENTNO STUDENTNAM CLASSNAME

---------- ---------- ------------------------------

1 周虎     一年级一班

2 周林     一年级二班

3 钟林达

则是左连接,无论这个学生有没有一个能在一个班级中得到匹配的部门号,

这 个学生的记录都会被显示。

select a.studentno, a.studentname, b.classname

from students a, classes b

where a.classid = b.classid;

这个则是通常 用到的内连接,显示两表都符合条件的记录

总之,

左连接显示左边全部的和右边与左边相同的

右连接显示右边全部的和左边与右边 相同的

内连接是只显示满足条件的! ......

----------------------------------------------------------------

补充:

使用(+)的注意事项:

1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。

2.当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。

3.(+)操作符只适用于列,而不能用在表达式上。

4.(+)操作符不能与or和in操作符一起使用。

5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

for example:

select a.dname,b.ename from dept a,emp b where a.deptno = b.deptno(+) and b.deptno(+) = 10;

===============================

以下的文章主要是通过代码的方式来引出的正确用法,其在实际中的应用比例还是占为多数的,如果你对这一新开发的技术,心存好奇的话,以下的文章将会揭开它的神秘面纱。希望你在浏览完之后会有所收获。8i:

create table dali.test1(a int,b int);

create table dali.test2(a int,b int);

insert into dali.test1 values(1,456);

insert into dali.test1 values(2,427);

insert into dali.test2 values(1,45456);

insert into dali.test2 values(3,45656);

内连接select * from dali.test1 a, dali.test2 b wherea.a=b.a;

左连接select * from dali.test1 a, dali.test2 b wherea.a=b.a(+);

右连接select * from dali.test1 a, dali.test2 b where a.a(+)=b.a;

完全连接select * from dali.test1 a, dali.test2 b wherea.a=b.a(+)

union

select * from dali.test1 a, dali.test2 b where a.a(+)=b.a;

迪卡尔select * from dali.test1, dali.test2;

'==================================================================

9i和sqlserver一样 left join,right join,full join

分为1. INNER JOIN 2. LEFT JOIN 3. RIGHT JOIN 4.LEFT OUTER JOIN

首先设定一个我们要用的两个表

表A 表B

ID NAME ID CLASS

1 IBM 1 C1

2 SONY 3 C3

3 BMW 4 C4

1 INNER JOIN: SELECT * FROM A INNER JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

3 BMW C3

对了 就是 两个表的ID都存在并相同 得到这两个表的组合表

2 LEFT JOIN : SELECT * FROM A LEFT JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

2 SONY null

3 BMW C3

没晕吧 如果还有方向感 就行 LEFT(左) 得到的是A(left语句的左边的表)的所有记录 而B表对应的记录没有的话也要补齐 (真霸道! 呵呵)

3 RIGHT JOIN : SELECT * FROM A RIGHT JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

3 BMW C3

4 null C4

对了RIGHT(右) 得到的是B(right语句的右边的表)的所有记录 而A表对应的记录没有的话也要补齐 (我也翻身了! 呵呵)

4 FULL OUTER JOIN: SELECT * FROM A FULL OUTER JOIN B ON A.ID=B.ID

得表 ID NAME CLASS

1 IBM C1

2 SONY null

3 BMW C3

4 null C4

上述的相关内容就是对Oracle join的用法的描述,希望会给你带来一些帮助在此方面。

oracle 多条件左连接,Oracle左连接,右连接相关推荐

  1. ORACLE中的全连接(Full Join)、内连接(JOIN/INNER JOIN)、左连接(Left Join)、右连接(Left Join)、(+)符号以及Theta连接

    测试表: A表:LS_TEMP1 B表:LS_TEMP2 左连接(左外连接)A LEFT JOIN B / (+)放在B表后边:左表为基础,显示所有左表数据,右表只显示能与左表关联上的数据 右连接(右 ...

  2. mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  3. mysql一图秒懂秒清晰 - join连接 ,left join左连接 ,right join右连接 ,inner join内连接

    前言:zuo表和you表短短五行涵盖了数据中所有可能遇见的情况: 1.左表有重复值(合同号=1134): 2.右表有重复值(合同号=1133): 3.左表存在右表没有的合同号(合同号=1188): 4 ...

  4. ORACLE WHER条件的执行顺序是不是自右向左

    突然在网上看到一种说法,ORACLE的WHERE条件执行顺序是自右向左的. 理由是,当ORACLE的WHERE条件中出现多个00904表示符无效错误时,错误是从右向左的顺序报的. 也有人提出解析顺序和 ...

  5. mysql right join实例_MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    LEFT JOIN 语法用法与实例MySQL LEFT JOIN 语法 SQL(MySQL) LEFT JOIN 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录.LEFT ...

  6. oracle有条件插入数据,Oracle有条件地插入数据

    方法一: declare iExists int; begin select count(*) into iExists from表 where 条件; if iExists=0 then inser ...

  7. oracle根据条件修改字段,Oracle数据库根据不同条件给同一字段修改相应的值

    Oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为ldquo;SALESMANrdquo;或者ldquo Oracle数据库根据不同条件给同一字段修改相应 ...

  8. oracle 分区条件加函数,oracle 分区表

    分区表的概念,简单来说就是:原来一个用户下表的数据是放在一个表空间里,使用了分区表后,表的数据是放在多个表空间中. PS:表空间是包括一个用户下所有文件的逻辑概念. 如果一个数据库中,某几个表(特别是 ...

  9. oracle in的用法_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法

    Oracle中的连接可分为,内连接(INNER JOIN).外连接(OUTER JOIN).全连接(FULL JOIN),不光是 Oracle,其他很多的数据库也都有这3种连接查询方式. Oracle ...

最新文章

  1. dex文件结构(一):dex文件结构
  2. [hls]m3u8视频如何处理成加密?
  3. python将列表中反序输出_python中sorted怎么反序排列
  4. 开发问题---数据库字段前出现“—”(保存留用,仅供参考)
  5. 搭建 OpenStack 实验环境 - 每天5分钟玩转 OpenStack(16)
  6. 计算机专业虽然好,但是也要有这些潜质才去选择
  7. 数据库事务日志已满的解决办法
  8. Java建造者模式(Builder模式)
  9. MATLAB | 比生命游戏更自由的生命游戏
  10. 电子工程师常用的单位转换
  11. 基于Spring+SpringMVC+Mybatis开发房屋租赁系统
  12. 物联网与嵌入式是什么关系
  13. IBM沃森对哈利波特各大主角的人格分析
  14. 后端程序员生产力工具合集
  15. hive 留存率 计算
  16. 操作系统概念v9 Abraham Silberschatz 全文笔记
  17. 二进制安全学习笔记(2)
  18. spring cloud服务发现组件Eureka详解
  19. 打包aab,从AAB文件生成Apk文件(Android应用程序捆绑包)
  20. Home Assistant 基于EZSP Zigbee Dongle创建Zigbee智能家居系统

热门文章

  1. linux如何查看tar的文件,虚拟机:Linux查看tar包文件内容的方法
  2. 动端开发者福利-免费收费api收藏
  3. 大数据学习——之探索中国米其林餐厅
  4. 测试右移:是什么,为什么,怎么办。
  5. Red Hat 服务配置实验day02
  6. 二维数组赋值给openCV Mat
  7. ubuntu 12.04 安装惠普打印机
  8. media query ios android,iPhone/Android浏览器是否支持CSS @media?
  9. 4700. 何以包邮?
  10. 漏洞挖掘 符号执行_基于符号执行的二进制代码漏洞发现