自然连接(NATURAL JOIN)

自然连接(NATURAL JOIN)是SQL中的一种特殊的等值连接,它会自动匹配两个表中具有相同名称的列进行连接。本文通过实例详细解释了如何使用自然连接,包括数据类型不一致时的隐式转换,以及自然连接的限制,如不能使用别名修饰列,并与内连接进行比较,展示了它们在数据查询中的差异和灵活性。
摘要由CSDN通过智能技术生成
      自然连接(NATURAL JOIN)是一种特殊的等值连接,将表中具有相同名称的列自动进行匹配。

1.自然连接不必指定任何连接条件。

SQL> desc emp
 
 Name               Null?    Type
 ----------------- -------- ------------------
 EMPNO              NOT NULL NUMBER(4)
 ENAME                       VARCHAR2(10)
 JOB                         VARCHAR2(9)
 MGR                         NUMBER(4)
 HIREDATE                    DATE
 SAL                         NUMBER(7,2)
 COMM                        NUMBER(7,2)
 DEPTNO                      NUMBER(2)

SQL> desc dept

 Name               Null?    Type
 ------------------ -------- ------------------
 DEPTNO             NOT NULL NUMBER(2)
 DNAME                       VARCHAR2(14)
 LOC                         VARCHAR2(13)

      以上两张表中,有deptno这列名字相同,而且数据类型一致。


SQL> select *
  2  from emp natural join  dept;  
 
DEPTNO      EMPNO ENAME      JOB               MGR HIREDATE            SAL       COMM DNAME      LOC
---------- ---------- ---------- ---------- ---------- ------------ ---------- ---------- ---------- ---------
        10       7782 CLARK      MANAGER          7839 09-JUN-81          2450            ACCOUNTING NEW YORK
        10       7839 KING       PRESIDENT             17-NOV-81          5000            ACCOUNTING NEW YORK
        10       7934 MILLER     CLERK            7782 23-JAN-82          1300            ACCOUNTING NEW YORK
        20       7566 JONES      MANAGER          7839 02-APR-81          2975            RESEARCH   DALLAS
        20       7902 FORD       ANALYST          7566 03-DEC-81          3000            RESEARCH   DALLAS
        20       7876 ADAMS      CLERK            7788 23-MAY-87          1100            RESEARCH   DALLAS
        20       7369 SMITH      CLERK            7902 17-DEC-80           800            RESEARCH   DALLAS
        20       7788 SCOTT      ANALYST          7566 19-APR-87          3000            RESEARCH   DALLAS
        30       7521 WARD       SALESMAN         7698 22-FEB-81          1250        500 SALES      CHICAGO
        30       7844 TURNER     SALESMAN         7698 08-SEP-81          1500          0 SALES      CHICAGO
        30       7499 ALLEN      SALESMAN         7698 20-FEB-81          1600        300 SALES      CHICAGO
        30       7900 JAMES      CLERK            7698 03-DEC-81           950            SALES      CHICAGO
        30       7698 BLAKE      MANAGER          7839 01-MAY-81          2850            SALES      CHICAGO
        30       7654 MARTIN     SALESMAN         7698 28-SEP-81          1250       1400 SALES      CHICAGO

14 rows selected.

       自然连接之后,两张表等值连接,DEPTNO这列自动合并成一列。

2.如果两张表中有相同名字的列,但是数据类型不一致,如果能隐式转换,则能正常连接,但如果隐式转换不成功,则报错。

SQL>  create table emp2 as select * from emp;

Table created.

SQL> create table dept2 as select * from dept;

Table created.

SQL> alter table emp2 modify deptno number(10);

Table altered.

SQL> select * from emp2 natural join  dept2;

    DEPTNO      EMPNO ENAME      JOB               MGR HIREDATE            SAL       COMM DNAME      LOC
---------- ---------- ---------- ---------- ---------- ------------ ---------- ---------- ---------- ---------
        20       7369 SMITH      CLERK            7902 17-DEC-80           800            RESEARCH   DALLAS
        30       7499 ALLEN      SALESMAN         7698 20-FEB-81          1600        300 SALES      CHICAGO
        30       7521 WARD       SALESMAN         7698 22-FEB-81          1250        500 SALES      CHICAGO
        20       7566 JONES      MANAGER          7839 02-APR-81          2975            RESEARCH   DALLAS
        30       7654 MARTIN 
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值