Oracle详解(Ⅱ):世界上目前已知最好的关系型数据库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: Oracle多表查询多表连接基本查询使用一张以上的表做查询就是多表查询select * from tab1,tab2这样会出现的结果就是:笛卡儿积连接查询的时候一般在需要连接的表中会出现相同名称的字段,按照之前表与表之间的设模式来讲,都会设置主外键关联,但是这种关联现在不太推荐使用。
img_def575c871bd924c1bdbef1535d2cd46.png
Oracle

多表查询

多表连接基本查询

使用一张以上的表做查询就是多表查询

select * from tab1,tab2

这样会出现的结果就是:笛卡儿积
连接查询的时候一般在需要连接的表中会出现相同名称的字段,按照之前表与表之间的设模式来讲,都会设置主外键关联,但是这种关联现在不太推荐使用。

select * from tab1,tab2 where tab1.field=tab2.field
这样就避免了产生 笛卡儿积

多表查询的时候我们也可以为每一张表起别名

select * from tab1 t1,tab2 t2 where t1.field= t2.field

指定查询结果要显示的字段

select t1.name,t1.age,t2.field from tab1 t1,tab2 t2 where t1.field= t2.field
自关联查询

顾名思义,自关联查询就是自己关联自己。我们在安装Oracle之后,scoot用户下有一张员工表可以供我们练习查询。
需求: 查询每个员工的上级领导
分析: emp 这张表中 mgr字段是当前员工的上级领导的编号,所以该字段就对emp表产生了关联 。这个时候我们就要用到自关联查询。

select  e1.empno, e1.ename,e2.empno,e2.ename from emp e1,emp e2 where e1.mgr = e2.empno

外连接查询

包含右表中所有数据,以及左表的关联数据

select e.empno,e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno

使用(+)表示左连接或者是右连接
但是由于(+)是Oracle独有的书写方法,个人推荐使用left join 与 right join

子查询

子查询(内查询):在主查询之前一次执行完成
子查询的结果被主查询使用
子查询的类型:
单行子查询:只返回一条记录

# 单行子查询示例1
select ename,job,sal from emp where
job = (select job from emp where empno = 7566)
and sal >(select sal from emp where empno = 7782)
img_1f4045826ef64c7eaf6101fd1d172a35.png
单行子查询示例1
# 单行子查询实例2 
select ename,job,sal from emp where sal = (select min(sal) from emp);
img_2098ee6bda2b08576c6a4763a296f604.png
单行子查询示例2

多行子查询:
返回了多条记录
多行操作符

单行子查询中的null值问题

select ename,job,sal from emp where
job = (select job from emp where ename = 'Mike')
img_98ea728bc79c8aebf71b0a6b0f45f062.png
image

多行子查询中Null值的问题

# 查询不是老板的员工
select * from emp where empno not in(select mgr from emp);

Exists用法

语法 exists(sql查询语句)
一: 判断exists后面的sql语句是否为真
sql语句查询为空 返回值是false
slq查询语句有值 返回值就是true

select * from dept;
img_3fd8667a6eb523ad78696e86a29b4bd2.png
dept
select * from dept where 1 = 1;
select * from emp where exists(select * from dept where 1 = 1)
select * from emp where exists(select * from dept where deptno = 10)

二:判断一个表中是否含有另一张表中外键的记录

# 查询有员工的部门
select * from dept d where exists (select * from emp e where e.deptno = d.deptno)
img_847e563f55856d9354fed15606b8e700.png
image

Oracle中的分页查询

ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现
ROWID:表中没行数据指向磁盘上的物理地址

集合运算

并集 :union / union all 返回两个集合中所有的记录 包括重复的

# 工资大于1500 或者是20号部门下的员工
select * from emp where sal > 1500 union select * from emp where deptno = 20
img_fd26472bf167deb756f95e812ccfe711.png
并集

交集:intersect 返回同时属于两个集合的记录

#工资大于1500 并且是20号部门下的员工
select * from emp where sal > 1500 intersect select * from emp where deptno = 20
img_861f2f15abb0144124af0b52cb92f590.png
交集

差集:minus 返回属于第一个集合但是不属于第二个集合的记录

# 查询1981年入职的普通员工 (不包含总裁和经理)
select * from emp where to_char(hiredate,'yyyy')='1981'
minus 
select * from emp where job = 'PRESIDENT'or job='MANAGER'
img_ad9411324fb68ead50b402e58bcae68a.png
差集
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
5天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
39 7
|
22天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
15 2
|
5天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
27 4
|
22天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
13 1
|
5天前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
30 7
|
22天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(1)
Oracle数据库基本概念理解(1)
11 1
|
22天前
|
Oracle 关系型数据库 MySQL
Seata常见问题之oracle 数据库 报 just support mysql如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
53 0
|
1月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
1月前
|
存储 Oracle 关系型数据库
Oracle系列十六:数据库备份
Oracle系列十六:数据库备份
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库启动时:ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
Oracle数据库启动时:ORA-00119: invalid specification for system parameter LOCAL_LISTENER;

热门文章

最新文章

推荐镜像

更多