oracle职工工资数据表四表联动,oracle 学习之基础篇(四):多表查询
员工表emp和部门表dept的笛卡尔集(笛卡尔集表=列数之和,行数之积,笛卡尔集表内中有些数据是不符合要求的)select emp.ename,dept.dname
from emp,dept;
使用等值连接/内连接(只能使用=号),显示员工的编号,姓名,部门名,使用表别名简化select emp.empno,emp.ename,dept.dname,dept.deptno
from emp,dept
where emp.deptno = dept.deptno;
使用非等值连接(不能使用=号,其它符号可以,例如:>=,<=,<>,betwen and等),显示员工的编号,姓名,月薪,工资级别select e.empno,e.ename,e.sal,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal;内连接查询:只能查询出符合条件的记录外连接查询:既能查询出符合条件的记录,也能根据一方强行将另一个方查询出来
使用外连接,按部门10,20,30,40号,统计各部门员工人数,要求显示部门号,部门名,人数部门号 部门名 人数
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
40 OPERATIONS 0
左外连接[是oracle专用的,不是SQL99规则]:
select dept.deptno "部门号",dept.dname "部门名",count(emp.empno) "人数"
from dept,emp
where dept.deptno = emp.deptno(+)
group by dept.deptno,dept.dname;
右外连接:
select dept.deptno "部门号",dept.dname "部门名",count(emp.empno) "人数"
from dept,emp
where emp.deptno(+) = dept.deptno
group by dept.deptno,dept.dname;等值连接/非等值连接/内连接:只会查询出多张表中,根据某个字段匹配,符合条件的记录,不符合条件的记录是不会存在的
使用左外连接,按部门10,20,30,40号,统计各部门员工人数,要求显示部门号,部门名,人数,且按人数降序排列select dept.deptno "部门号",dept.dname "部门名",count(emp.empno) "人数"
from dept,emp
where dept.deptno = emp.deptno(+)
group by dept.deptno,dept.dname
order by 3 desc;
使用自连接,显示”SMITH的上级是FORD”这种格式select users.ename || '的上级是' ||boss.ename
from emp users,emp boss
where users.mgr = boss.empno;
--只有13条记录,不含有KING
基于上述问题,将KING的上级是“”显示出来select users.ename || '的上级是' ||boss.ename
from emp users,emp boss
where users.mgr = boss.empno(+);
14条记录
--注意:自连接也用到内连接和外连接
oracle 子查询
查询工资比WARD高的员工信息
第一:查询WARD的工资?select sal from emp where ename = 'WARD';
第二:查询工资比1250高的员工信息?select * from emp where sal > 1250;
子查询:select *
from emp
where sal > (
select sal
from emp
where ename = 'WARD'
);
查询部门名为’SALES’的员工信息(方式一:子查询)
第一:查询部门名为’SALES’的编号?select deptno from dept where dname = 'SALES';
第二:查询部门号为30的员工信息? select * from emp where deptno = 30;
子查询:select *
from emp
where deptno = (
select deptno
from dept
where dname = 'SALES'
);
查询部门名为’SALES’的员工信息(方式二:多表查询)select emp.*
from dept,emp
where (dept.deptno=emp.deptno) and (dept.dname='SALES');
查询每个员工编号,姓名,部门名,工资等级(三表查询,这三张表并无外健关联)select e.empno,e.ename,d.dname,s.grade
from emp e,dept d,salgrade s
where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);
查询工资最低的员工信息(单行子查询,使用=号)
第一:查询出工资最低是多少?select min(sal) from emp;
第二:查询工资为800的员工信息?select * from emp where sal = 800;
子查询:select *
from emp
where sal = (
select min(sal)
from emp
);
查询部门名为’ACCOUNTING’或’SALES’的员工信息(多行子查询,使用in关键字)
第一:查询部门名为’ACCOUNTING’或’SALES’的部门编号?select deptno from dept where dname in ('ACCOUNTING','SALES');
第二:查询部门号为10或30号的员工信息?select * from emp where deptno in (10,30);
子查询:select *
from emp
where deptno in (
select deptno
from dept
where dname in ('ACCOUNTING','SALES')
);
查询工资比20号部门【任意any】一个员工工资【低
第一:查询20号部门的所有工资?select sal from emp where deptno = 20;
第二:查询工资比(800,2975,3000,1100,3000)任意一个低的员工信息?select * from emp where sal < any (800,2975,3000,1100,3000);在oracle看来,
子查询:select *
from emp
where sal
select sal
from emp
where deptno = 20
);
查询工资比30号部门【所有all】员工【低
第一:查询出30部门所有员工的工资?select sal from emp where deptno = 30;
第二:查询工资比(1600,1250,1250,2850,1500,950)中所有的工资都低的员工信息?select * from emp where sal
子查询:select *
from emp
where sal
select sal
from emp
where deptno = 30
);
oracle 集合查询
使用并集运算,查询20号部门或30号部门的员工信息select * from emp where deptno = 20
union
select * from emp where deptno = 30;
注意:
union:二个集合中,如果都有相同的,取其一
union all:二个集合中,如果都有相同的,都取
使用set time/timing on,打开时间的开关set time on;
set time off;
使用set tim/timing off,关闭时间的开关set timing on;
set timint off;
使用交集运算[intersect],查询工资在1000-2000和1500-2500之间的员工信息(方式一)select * from emp where sal between 1000 and 2000
intersect
select * from emp where sal between 1500 and 2500;
用where行过滤,查询工资在1000-2000和1500-2500之间的员工信息(方式二)select *
from emp
where (sal between 1000 and 2000) and (sal between 1500 and 2500);
使用差集运算[minus],查询工资在1000-2000,但不在1500-2500之间的员工信息(方式一)select * from emp where sal between 1000 and 2000
minus
select * from emp where sal between 1500 and 2500;
使用where行过滤,查询工资在1000-2000,但不在1500-2500之间的员工信息(方式二)select *
from emp
where (sal between 1000 and 2000) and (sal not between 1500 and 2500);
集合查询的细节:
1)集合操作时,必须确保集合列数是相等select empno,ename,sal,comm from emp where deptno = 20
union
select empno,ename,sal from emp where deptno = 30;错
2)集合操作时,必须确保集合列类型对应相同select empno,ename,sal,comm from emp where deptno = 20
union
select empno,ename,sal,hiredate from emp where deptno = 30;错
3)A union B union C = C union B union Aselect * from emp where deptno = 10
union
select * from emp where deptno = 20
union
select * from emp where deptno = 30;
4)当多个集合操作时,结果的列名由第一个集合列名决定select empno "编号",ename "姓名",sal "薪水" from emp where deptno = 20
union
select empno,ename,sal from emp where deptno = 10;当多表查询,子查询,集合查询都能完成同样任务时,按如下优化方案选择:多表查询->子查询->集合查询
hogen
2017-09-09
oracle职工工资数据表四表联动,oracle 学习之基础篇(四):多表查询相关推荐
- 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...
前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...
- 计算机视觉面试宝典--深度学习机器学习基础篇(四)
计算机视觉面试宝典–深度学习机器学习基础篇(四) 本篇主要包含SVM支持向量机.K-Means均值以及机器学习相关常考内容等相关面试经验. SVM-支持向量机 支持向量机(support vector ...
- 机器学习(四):剪枝技术(基础篇)
机器学习(四):剪枝技术(基础篇) 相关的决策树文章: 机器学习(四)ID3决策树 机器学习(四)C4.5决策树 机器学习(四)CART分类树 机器学习(四)CART回归树 机器学习(四)决策树绘图 ...
- 交叉表 列字段排序_Tableau学习系列(8):表计算
Tableau表计算,是针对多行数据进行计算的方式,创建表计算后,在"标卡/行/列"功能区的该计算字段,其右侧会出现正三角形符号.表计算能较好解决日常分析中的许多计算问题. 对同一 ...
- oracle导出BOM文件,ORACLE ERP导数据(BOM清单)-备份恢复-Oracle频道-中国IT实验室
方法:把数据导入BOM清单的方法是,把数据导入接口表中,让其自动运行既可.上传文件的时候,要注意使 用ASCII字符模式. 1.自己建立一中转表 drop table cux_bill_te ...
- mysql查询bom清单,ORACLE ERP导数据(BOM清单)-数据库专栏,ORACLE
方法:把数据导入bom清单的方法是,把数据导入接口表中,让其自动运行既可.上传文件的时候,要注意使 用ascii字符模式. 1.自己建立一中转表 drop table cux_bill_te ...
- ifix oracle,IFIX实时数据通过ODBC转存到Oracle
<IFIX实时数据通过ODBC转存到Oracle>由会员分享,可在线阅读,更多相关<IFIX实时数据通过ODBC转存到Oracle(7页珍藏版)>请在人人文库网上搜索. 1.一 ...
- Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)
Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...
- 【数据分析师---数据可视化】第二章:plotly绘图基础篇
plotly绘图基础篇 1 Plotly简介与安装 2 Plotly简单绘图入门 3 Plotly绘制散点图和饼图 4 Plotly绘图流程详细梳理 5 Plotly绘制密度图和三维散点图 5.1 绘 ...
最新文章
- windows服务器安全设置之提权篇
- MySQL主从压_mysql主从配置
- 如何做一场高质量的分享?
- SaaS服务创投:场景多元化 平台建设稳中有序
- EA强大的画图工具---设计数据库表格
- pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程
- OpenGL进阶演示样例1——动态画线(虚线、实线、颜色、速度等)
- Linux用户程序的编译链接与加载启动过程
- SQLite-database disk image is malformed问题的解决
- Koa2 和 Express 中间件对比
- python词云可视化方法总结记录【简单词云+背景图片词云+自定义字体颜色词云】
- fastjson 序列化 不包括转义字符_fastjson漏洞复现
- Failed to instantiate [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans]: F
- javaEE之----------java代码发送邮件
- 小程序 房租水电费记录管理_一点通房租物业收据打印软件下载
- Typora文档添加水印
- linpack测试软件,linpack
- Mysql 分组查询top n(多种方法)
- 提取Windows主题中的图片
- 单片机中断系统(部分以AT89S52为例)
热门文章
- Tracup丨先进的工作流程管理如何为你节省巨额花销?
- 苹果删除照片不释放内存_别再胡乱清理垃圾了,只要删除这6个文件夹,瞬间释放20GB内存...
- OPCode详解及汇编与反汇编原理
- 10 系统建模语言SysML——参数图
- 怎么将PDF翻译成中文?这篇文章教会你
- bmob php支付,GitHub - bmob/bmob-php-sdk: PHP SDK相关源码
- 理解什么叫“自然拼读”
- 分析的意义:数据背后的故事(1)
- Alibaba Code代码索引技术实践:为Code Review提供本地IDE的阅读体验
- 送小公主——哆啦A梦(Python代码实现)