SQL的1999语法

目录

交叉连接

实现交叉连接

自然连接

实现自然连接(实际上就是内连接)

ON和USING

[使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句设置关联字段](#使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句设置关联字段)

[利用 USiNG 子句设置关联字段实现自然连接](#利用 USiNG 子句设置关联字段实现自然连接)

[利用 ON 子句设置关联条件](#利用 ON 子句设置关联条件)

外连接

左外连接

全外连接


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

对于数据表的连接操作,从实际使用来说,各个数据库都是支持的,但是外连接使 用" (+) "是 Oracle 自带的,其他数据库是不支持的。所以对所有的数据库,进行表连接最好的做法是利用以下的语法完成

sql 复制代码
select [distinct] * | 列 [ 别名 ] , 列 [ 别名 ] , ...
from 表 1 [ 别名 ] 
  [cross join 表 2 [ 别名 ]] 
  [natural join 表 2 [ 别名 ]] 
  [join 表 2 [ 别名 ] on ( 条件 ) | using( 关联字段 )] 
  [left | right | full outer join 表 2  [ 别名 ] on( 条件 )] ;

在进行表连接的时候,如果是内连接,则使用等值判断;

如果是外连接,则使用 left、outer、full等操作。

而上面语法中的 cross join、natural join、join很少使用。

不过我们也简单看 一下如何操作它们

交叉连接

目的是产生笛卡尔积

语法如下

sql 复制代码
select [distinct] * | 列 [ 别名 ] , 列 [ 别名 ] , ...
from 表 1 [ 别名 ] cross join 表 2 [ 别名 ] ;

实现交叉连接

sql 复制代码
select *
from emp cross join dept;

执行有很多行,这里我就不示范了,等同于

sql 复制代码
select *
from emp,dept;

大家可以试试

自然连接

利用关联字段,自己进行笛卡尔积的消除(只要字段名称相同即可,系统会自动匹配)

sql 复制代码
select [distinct] * | 列 [ 别名 ] , 列 [ 别名 ] , ...
from 表 1 [ 别名 ] natural join 表 2 [ 别名 ] ;

实现自然连接(实际上就是内连接)

sql 复制代码
select *
from emp natural join dept;

上面代码等同于前面所介绍的查询语句

sql 复制代码
select *
from emp,dept
where emp.deptno=dept.deptno;

大家可以自己试试

ON和USING

使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句设置关联字段

利用 USiNG 子句设置关联字段实现自然连接

sql 复制代码
SQL> select *
  2  from emp join dept using(deptno);

    DEPTNO      EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM DNAME
           LOC
---------- ---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------------------------- --------------------------
        10       7839 KING                 PRESIDENT                     17-11月-81           5000            ACCOUNTING
           NEW YORK
        10       7782 CLARK                MANAGER                  7839 09-6月 -81           2450            ACCOUNTING
           NEW YORK
        10       7934 MILLER               CLERK                    7782 23-1月 -82           1300            ACCOUNTING
           NEW YORK
        20       7902 FORD                 ANALYST                  7566 03-12月-81           3000            RESEARCH
           DALLAS
        20       7369 SMITH                CLERK                    7902 17-12月-80            800            RESEARCH
           DALLAS
        20       7566 JONES                MANAGER                  7839 02-4月 -81           2975            RESEARCH
           DALLAS
        30       7900 JAMES                CLERK                    7698 03-12月-81            950            SALES
           CHICAGO
        30       7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0 SALES
           CHICAGO
        30       7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400 SALES
           CHICAGO
        30       7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500 SALES
           CHICAGO
        30       7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300 SALES
           CHICAGO

    DEPTNO      EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM DNAME
           LOC
---------- ---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------------------------- --------------------------
        30       7698 BLAKE                MANAGER                  7839 01-5月 -81           2850            SALES
           CHICAGO

已选择 12 行。

利用 ON 子句设置关联条件

sql 复制代码
SQL> select *
  2  from emp e join dept d on(e.deptno=d.deptno);

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAME
                      LOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10         10 ACCOUNTING
                      NEW YORK
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         10 ACCOUNTING
                      NEW YORK
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         10 ACCOUNTING
                      NEW YORK
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         20 RESEARCH
                      DALLAS
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20         20 RESEARCH
                      DALLAS
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         20 RESEARCH
                      DALLAS
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30         30 SALES
                      CHICAGO
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         30 SALES
                      CHICAGO
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         30 SALES
                      CHICAGO
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         30 SALES
                      CHICAGO
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         30 SALES
                      CHICAGO

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAME
                      LOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         30 SALES
                      CHICAGO

已选择 12 行。

同样,上面代码效果等同于前面所介绍的查询语句

sql 复制代码
select *
from emp,dept
where emp.deptno=dept.deptno;

不过显示结果的时候,deptno 字段只显示一次,而前面介绍的方法会显示两次

外连接

sql 复制代码
select [distinct] * | 列 [ 别名 ] , 列 [ 别名 ] , ...
from 表 1 [ 别名 ] left | right | full outer join 表 2 ;

左外连接

sql 复制代码
select *
from emp e left outer join dept d on(e.deptno=d.deptno);

上面代码等同于前面所介绍的查询语句

sql 复制代码
select *
from emp e,dept d
where e.deptno=d.deptno(+);

全外连接

sql 复制代码
SQL> select *
  2  from emp e full outer join dept d on(e.deptno=d.deptno);

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAME
                      LOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20         20 RESEARCH
                      DALLAS
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30         30 SALES
                      CHICAGO
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30         30 SALES
                      CHICAGO
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20         20 RESEARCH
                      DALLAS
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30         30 SALES
                      CHICAGO
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30         30 SALES
                      CHICAGO
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10         10 ACCOUNTING
                      NEW YORK
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10         10 ACCOUNTING
                      NEW YORK
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30         30 SALES
                      CHICAGO
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30         30 SALES
                      CHICAGO
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20         20 RESEARCH
                      DALLAS

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO     DEPTNO DNAME
                      LOC
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ---------- ---------- ---------------------------- --------------------------
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10         10 ACCOUNTING
                      NEW YORK
      8989 HELLO
                                                                                                                      40 OPERATIONS
                      BOSTON

已选择 14 行。

此时把没有员工的部门和没有部门的员工的信息都显示出来了

相关推荐
时序数据说1 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.4 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)4 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺5 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX5 小时前
MySQL的事务日志:
数据库·mysql
YA3336 小时前
java基础(九)sql基础及索引
java·开发语言·sql
weixin_419658317 小时前
MySQL数据库备份与恢复
数据库·mysql
专注API从业者8 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink
小猿姐9 小时前
KubeBlocks for Milvus 揭秘
数据库·云原生
码出未来8579 小时前
浅谈DDL、DSL、DCL、DML、DQL
sql