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 可以不同 不同报错 需要

猜你喜欢

转载自blog.csdn.net/qq1301709072/article/details/80677671