Oracle-----SQL-1999语法&数据集合操作

上一篇👉:Oracle-----小心议议内连接和外连接



🚴大家好!我是近视的脚踏实地,这篇文章主要是来学习SQL-1999语法内外连接的通用语法格式,以及数据集合的操作
     唯有行动  才能解除你所有的不安

上一篇介绍了内连接和外连接,其中外连接又分为左外连接、右外连接和全外连接。使用的"(+)"是Oracle的语法,在其他数据库可能就行不通,在实际的工作中,对于数据库的选择,基本上大部分是Oracle为主,小的就有MySQL。如果不使用Oracle的时候,那么这个外连接就需要用到另一套语法了

1、SQL-1999语法

对于数据表的连接操作,从实际使用来讲各个数据库都是有所支持的,所以对于所以的数据库,进行表连接最好的做法是利用以下的语法完成👇:

select [DISTINCT] * |[别名],[别名],...
from 表1 [别名] [CROSS JOIN]2 [别名]]
				[NATURAL JOIN 表2 [别名]]
				[JOIN 表2 [别名] ON(条件) | USING(关联字段)]
				[LEFT | RIGHT | FULL OUTER JOIN ON(条件)2];

个人在进行表连接的时候,如果是内连接一定使用等值判断。如果是外连接才会使用LEFT、RIGHT、FULL等操作。

1、交叉连接:目的是产生笛卡尔积
语法:

select [DISTINCT] * |[别名],[别名],...
from 表1 [别名] [CROSS JOIN]2 [别名]];

1.1 范例1:实现交叉连接

范例1: 实现交叉连接

select *
from emp cross join dept;

在这里插入图片描述

2、自然连接:利用关联字段自己进行笛卡尔积的消除(只要字段名称相同自己匹配),语法👇:

select [DISTINCT] * |[别名],[别名],...
from 表1 [别名] [NATURAL JOIN]2 [别名]];

1.2 范例2:实现自然连接(内连接)

范例2: 实现自然连接(内连接)

select *
from emp natural join dept;

在这里插入图片描述
3、使用自然连接是要求两张表的字段名称相同,但是如果说有一天不相同了呢?或者两张表中有两组字段都是重名的。所以这种时候利用ON子句指定关联条件,而利用using子句设置关联字段

1.3 范例3:利用using子句设置关联字段实现自然连接

范例3: 利用using子句设置关联字段实现自然连接

select *
from emp join dept using(deptno);

在这里插入图片描述

1.4 范例4:利用ON子句设置关联条件

范例4: 利用using子句设置关联字段实现自然连接

select *
from emp e join dept d on(e.deptno=d.deptno);

在这里插入图片描述
以上三个例子都是属于内连接,前边两个都把关联字段(deptno)提到前面,然后关联字段只会让他显示一次,这是这个语法的好处,但是就为了好处要写一堆代码,所以这个几个操作了解就好

4、外连接,语法👇:

select [DISTINCT] * |[别名],[别名],...
from 表1 [别名] [LEFT | RIGHT | FULL OUTER JOIN ON(条件)2];

1.5 范例5:观察左外连接

范例5: 观察左外连接

select *
from emp e left outer join dept d on(e.deptno=d.deptno);

在这里插入图片描述

1.6 范例6:观察右外连接

范例6: 观察右外连接

select *
from emp e right outer join dept d on(e.deptno=d.deptno);

在这里插入图片描述

1.7 范例7:全外连接

范例7: 全外连接

select *
from emp e full outer join dept d on(e.deptno=d.deptno);

在这里插入图片描述

2、数据集合操作

数学集合:交集、并集、差集、补集。
每一次查询实际上都会返回数据集合,所以返回的结果上可以使用union、union all、minus、intsect实现集合操作,此时的语法为以下形式👇:

select [distinct] * |[别名],[别名],[别名]…
from 表名称 [别名],表名称 [别名][where 限定条件(s)]
[order by 排序字段 [ASC | DESC],排序字段 [ASC | DESC],]
		union | union all | intersect | minus		
select [distinct] * |[别名],[别名],[别名]…
from 表名称 [别名],表名称 [别名][where 限定条件(s)]
[order by 排序字段 [ASC | DESC],排序字段 [ASC | DESC],]
		union | union all | intersect | minus
select [distinct] * |[别名],[别名],[别名]…
from 表名称 [别名],表名称 [别名][where 限定条件(s)]
[order by 排序字段 [ASC | DESC],排序字段 [ASC | DESC],]

2.1 范例1:验证union

范例1: 验证union

select * from emp
		union
select * from emp where deptno = 10;

在这里插入图片描述
此时查询的结果已经连接在一起了,但是union的处理过程是属于取消重复元素。可以知道第一个查询得到的集合是14条,第二个查询有规定是10部门的,所以应该是3条

2.2 范例2:验证union all 操作

范例2: 验证union all 操作

select * from emp
		union all
select * from emp where deptno = 10;

在这里插入图片描述

2.3 范例3:验证intersect 操作(交集)

范例3: 验证intersect 操作(交集)

select * from emp
		intersect
select * from emp where deptno = 10;

在这里插入图片描述

2.4 范例4:返回差集

范例4: 返回差集

select * from emp
		minus
select * from emp where deptno = 10;

在这里插入图片描述
可是在使用集合操作之中有一件非常重要的注意事项,由于集合的操作最终是需要将若干个查询结果合并为一个查询结果,所以要求这若干个查询结果所返回的数据的结构必须相同。

2.5 范例5:错误的操作

范例4: 错误的操作

select empno,sal from emp
		intersect
select ename,job from emp where deptno = 10;

在这里插入图片描述

本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀

发布了317 篇原创文章 · 获赞 221 · 访问量 50万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 撸撸猫 设计师: 设计师小姐姐

分享到微信朋友圈

×

扫一扫,手机浏览