oracle 12c 等价结合(NATURE JOIN ,USING,ON)

oracle 12c 等价结合(NATURE JOIN ,USING,ON)

数据表结合,是数据库中非常重要的一个部分,等价结合为结合的两个表中特定的列相等的数据取出来结合的形式,也称为内部结合,或者单纯结合。

自然结合

自然结合为,结合的两个表共同存在的相同列名相同数据类型的列结合。

SELECT [表名.]列名[,[表名.]列名...]
FROM 表名1 NATURAL JOIN 表名2
[WHERE 结合条件以外的条件]
使用例子

数据表一 :员工信息表定义【empy】
员工信息表
数据表二:部门信息表定义
部门信息表定义-

select EMPLOYEE_ID,EMPLOYEE_NAME,DEPARTMENT_NAME from empy natural join depts;
/* 在这个中相同为 MANAGER_ID,DEPARTMENT_ID */
结果
EMPLOYEE_ID EMPLOYEE_NAME DEPARTMENT_NAME
----------- ------------- ------------------------
       1008 中山大輔       総務
       1009 星野健一       営業
       1010 斎藤京子       開発
       1011 吉田亜希       マーケティング
       1012 阿部伊吹       品質管理
特别注意的点
  1. 自然结合的结合列是自动判断的,不需要明确书写出来。
  2. 如果结合的两个数据表有复数列,全部相同的复数列使用。
    (以上例子为MANAGER_ID,DEPARTMENT_ID 结合)
  3. 自然结合,如果数据类型不相同但是同名的列发生错误
  4. 自然结合,如果其中的值为空,不发生结合。
    这里写图片描述
    5.结合列不可以加列的表接头词
/*错误的*/
select e.EMPLOYEE_ID,e.EMPLOYEE_NAME, e.department_id,d.DEPARTMENT_NAME 
from empy e 
natural join depts d;
------------------------------------------------
ORA-25155: NATURAL結合で使用される列は修飾子を持てません。
/*正确的*/
select e.EMPLOYEE_ID,e.EMPLOYEE_NAME, department_id,d.DEPARTMENT_NAME 
from empy e 
natural join depts d;

USING

上面的自然选择是oracle 自动选择出结合的列,而USING句需要明确指定结合的列,结合的列需要在【()】 指定。

SELECT [表名.]列名[,[表名.]列名...]
FROM 表名1 JOIN 表名2 USING(列名[,列名...]
[WHERE 结合条件以外的条件]
使用例子
select EMPLOYEE_ID,EMPLOYEE_NAME,DEPARTMENT_NAME 
from empy
join dept USING (DEPARTMENT_ID);

这里写图片描述

使用场合
  • 需要明确结合的列,自然结合不可以自己控制。
  • 结合的两个表相同的列村存在复数个。但是不想用全部的列结合时。可以指定自己想要结合的条件
  • 可以同于列名相同,但是列的类型不相同的情况。
特别注意的地方
  • USING 中指定的结合列不需要用表进行修饰,如果写了会发生错误。
SQL> select e.empno,e.name ,d.dname
  2  from employees e join departments d using (deptno)
  3  where e.deptno in (10,20);
  /* 错误信息*/
ORA-25154: USING句の列の部分には修飾子を持てません。
  • NATURAL JOIN 和 USING 不可以同时使用

on结合

USING 和自然结合都必须要求两个表有共同的数据列名。ON 可以用于不同的数据列名,但必须是同一种类型。

SELECT [表名.]列名[,[表名.]列名...]
FROM 表名1 NATURAL JOIN 表名2
ON [表名1.]列名 = [表单2.]列名
[WHERE 结合条件以外的条件]
使用例子
  SQL> select  EMPLOYEE_ID,EMPLOYEE_NAME,DEPARTMENT_NAME 
       from empy  e join dept d
       on e.DEPARTMENT_ID = d. DEPARTMENT_ID

选择

特别注意的地方
  • 两个列表中相同的列名必须使用表名修饰词

Oracle 自己结合

利用 where 语句实现结合。

SELECT [表名.]列名[,[表名.]列名...]
FROM 表名1,表名2
WHERE 结合条件
[AND 结合条件以外的条件]
使用例子
select  EMPLOYEE_ID,EMPLOYEE_NAME,DEPARTMENT_NAME 
from empy  e,dept d
where e.DEPARTMENT_ID = d. DEPARTMENT_ID

where 语句

特别注意的地方
  • 两个列表中相同的列名必须使用表名修饰词

比较

名称列名相同数据类型相同表头修饰
NATURAL JOIN相同结合相同结合不需要
USING相同结合不同也可以结合不需要
ON可以不同不同报错需要
WHERE可以不同不同报错需要
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值