Oracle 多表查询基本语法实例


Posted in Oracle onApril 18, 2022

多表查询基本语法

笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合。

-- 笛卡尔积 
select * from emp, dept;

oracle多表查询

Oracle 多表查询基本语法实例

Oracle 多表查询基本语法实例

prompt Importing table dept...
set feedback off
set define off
insert into dept (DEPTNO, DNAME, LOC)
values (1, '01事业部', '324');
 
insert into dept (DEPTNO, DNAME, LOC)
values (2, '02事业部', '234');
 
insert into dept (DEPTNO, DNAME, LOC)
values (3, '03事业部', '234');
 
insert into dept (DEPTNO, DNAME, LOC)
values (4, '04事业部', '3244');
 
prompt Done.
prompt Importing table emp...
set feedback off
set define off
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小明', '运维', '9000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '1');
 
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小刚', 'hr', '7000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '1');
 
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小花', 'vue开发', '6000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '1');
 
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小贝', '软件工程师', '9000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '2');
 
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小涛', '数据中台', '11000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '2');
 
insert into emp (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values ('001', '小胜', '设计', '9000', to_date('26-09-2021', 'dd-mm-yyyy'), 900, 800, '2');
 
prompt Done.
prompt
 
prompt Creating table DEPT
prompt ===================
prompt
 
create table USERNAME.DEPT
(
  deptno NUMBER not null,
  dname  VARCHAR2(10) not null,
  loc    VARCHAR2(10) not null
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
 
prompt
 
prompt Creating table EMP
prompt ==================
prompt
 
create table USERNAME.EMP
(
  empno    NVARCHAR2(20),
  ename    NVARCHAR2(20),
  job      NVARCHAR2(20),
  mgr      NVARCHAR2(20),
  hiredate DATE,
  sal      BINARY_DOUBLE,
  comm     BINARY_DOUBLE,
  deptno   NVARCHAR2(20)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
 
 
prompt Done
spool off
set define on

多表查询

多表查询:多表查询是指基于两个或两个以上的表或者视图的查询。

--查询员工名,工资,以及员工所在部门的名称
select   e.ename,e.sal,d.dname   from   emp e,dept d  where e.deptno=d.deptno                    
--查询部门编号为10的部门名称,员工名称,工资
select  d.dname,e.ename,e.sal  from   emp e,dept d  where e.deptno=d.deptno   and d.deptno='1' 
--查询员工名称,工资,部门名称,并且按照部门名称升序排列
select   e.ename,e.sal,d.dname  from   emp e,dept d  where e.deptno=d.deptno   order by d.dname 

--2.自连接

-- 自连接:自连接是指在同一张表上的连接查询

--查询员工的姓名以及员工所对应老板的姓名

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

3.子查询(单行子查询)

子查询:子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

--查询与SMITH在同一部门的员工
select * from (select   e.deptno from emp e,dept t where  e.deptno=t.deptno and  e.ename='SMITH') s1,emp e
where e.deptno =s1.deptno
 
 
select * from emp where deptno=(select deptno from emp where ename='SMITH');

多行子查询

多行子查询是指返回多行数据的查询。

在多行子查询中使用all操作符

--查询与10号部门工作相同的员工名称,工作,工资,部门编号
select ename,job,sal,deptno from emp where job in (select job from emp where deptno=1);
 
--查询比30号部门所有人工资高的员工姓名,职位,工资,部门编号
select ename,sal,job,deptno from emp where sal>all(select sal from emp where deptno=1);
 
--在多行子查询中使用any操作符
--查询比1号部门任意人工资高的员工姓名,职位,工资,部门编号
select ename,sal,job,deptno from emp where sal>any(select sal from emp where deptno=1);

多列子查询

单行子查询是指子查询返回单行,单列的数据

多行子查询是指子查询返回多行,单列的数据

多列子查询是指子查询返回多列数据的查询

--查询与SMITH的部门和职位完全相同的员工信息
 
select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

在from子句中使用子查询

在from子句中使用子查询时,该子查询会被当做一个视图来对待,因此也就叫做内嵌图,当在from子句中使用子查询时,必须给子查询起别名。(换句话说就是把子查询查出来的数据作为一张新表,在进行查询)

总结

到此这篇关于oracle多表简单查询的文章就介绍到这了!

Oracle 相关文章推荐
oracle通过存储过程上传list保存功能
May 12 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
Oracle 死锁的检测查询及处理
Sep 25 Oracle
详解Oracle数据库中自带的所有表结构(sql代码)
Nov 20 Oracle
Oracle中update和select 关联操作
Jan 18 Oracle
Oracle使用别名的好处
Apr 19 Oracle
分析SQL窗口函数之取值窗口函数
Apr 21 Oracle
Oracle中DBLink的详细介绍
Apr 29 Oracle
oracle数据库去除重复数据
May 20 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Lakehouse数据湖并发控制陷阱分析
Oracle数据库中通用的函数实例详解
详细聊聊Oracle表碎片对性能有多大的影响
Mar 19 #Oracle
oracle删除超过N天数据脚本的方法
Feb 28 #Oracle
oracle重置序列从0开始递增1
Feb 28 #Oracle
Oracle 触发器trigger使用案例
Feb 24 #Oracle
Oracle中update和select 关联操作
Jan 18 #Oracle
You might like
ADODB类使用
2006/11/25 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
解读python如何实现决策树算法
2018/10/11 Python
Python实现Dijkstra算法
2018/10/17 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
线程同步的方法
2016/11/23 面试题
爱岗敬业演讲稿范文
2014/01/14 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
矛盾论读书笔记
2015/06/29 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis