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 行。

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

相关推荐
难以触及的高度2 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)16 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
莫叫石榴姐1 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
小技与小术2 小时前
数据库表设计范式
数据库·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer2 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体2 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪3 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis