员工表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 学习之基础篇(四):多表查询相关推荐

  1. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android基础篇)...

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. A awesome android expert interview questions a ...

  2. 计算机视觉面试宝典--深度学习机器学习基础篇(四)

    计算机视觉面试宝典–深度学习机器学习基础篇(四) 本篇主要包含SVM支持向量机.K-Means均值以及机器学习相关常考内容等相关面试经验. SVM-支持向量机 支持向量机(support vector ...

  3. 机器学习(四):剪枝技术(基础篇)

    机器学习(四):剪枝技术(基础篇) 相关的决策树文章: 机器学习(四)ID3决策树 机器学习(四)C4.5决策树 机器学习(四)CART分类树 机器学习(四)CART回归树 机器学习(四)决策树绘图 ...

  4. 交叉表 列字段排序_Tableau学习系列(8):表计算

    Tableau表计算,是针对多行数据进行计算的方式,创建表计算后,在"标卡/行/列"功能区的该计算字段,其右侧会出现正三角形符号.表计算能较好解决日常分析中的许多计算问题. 对同一 ...

  5. oracle导出BOM文件,ORACLE ERP导数据(BOM清单)-备份恢复-Oracle频道-中国IT实验室

    方法:把数据导入BOM清单的方法是,把数据导入接口表中,让其自动运行既可.上传文件的时候,要注意使      用ASCII字符模式. 1.自己建立一中转表 drop table cux_bill_te ...

  6. mysql查询bom清单,ORACLE ERP导数据(BOM清单)-数据库专栏,ORACLE

    方法:把数据导入bom清单的方法是,把数据导入接口表中,让其自动运行既可.上传文件的时候,要注意使      用ascii字符模式. 1.自己建立一中转表 drop table cux_bill_te ...

  7. ifix oracle,IFIX实时数据通过ODBC转存到Oracle

    <IFIX实时数据通过ODBC转存到Oracle>由会员分享,可在线阅读,更多相关<IFIX实时数据通过ODBC转存到Oracle(7页珍藏版)>请在人人文库网上搜索. 1.一 ...

  8. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)

    Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...

  9. 【数据分析师---数据可视化】第二章:plotly绘图基础篇

    plotly绘图基础篇 1 Plotly简介与安装 2 Plotly简单绘图入门 3 Plotly绘制散点图和饼图 4 Plotly绘图流程详细梳理 5 Plotly绘制密度图和三维散点图 5.1 绘 ...

最新文章

  1. windows服务器安全设置之提权篇
  2. MySQL主从压_mysql主从配置
  3. 如何做一场高质量的分享?
  4. SaaS服务创投:场景多元化 平台建设稳中有序
  5. EA强大的画图工具---设计数据库表格
  6. pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程
  7. OpenGL进阶演示样例1——动态画线(虚线、实线、颜色、速度等)
  8. Linux用户程序的编译链接与加载启动过程
  9. SQLite-database disk image is malformed问题的解决
  10. Koa2 和 Express 中间件对比
  11. python词云可视化方法总结记录【简单词云+背景图片词云+自定义字体颜色词云】
  12. fastjson 序列化 不包括转义字符_fastjson漏洞复现
  13. Failed to instantiate [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans]: F
  14. javaEE之----------java代码发送邮件
  15. 小程序 房租水电费记录管理_一点通房租物业收据打印软件下载
  16. Typora文档添加水印
  17. linpack测试软件,linpack
  18. Mysql 分组查询top n(多种方法)
  19. 提取Windows主题中的图片
  20. 单片机中断系统(部分以AT89S52为例)

热门文章

  1. Tracup丨先进的工作流程管理如何为你节省巨额花销?
  2. 苹果删除照片不释放内存_别再胡乱清理垃圾了,只要删除这6个文件夹,瞬间释放20GB内存...
  3. OPCode详解及汇编与反汇编原理
  4. 10 系统建模语言SysML——参数图
  5. 怎么将PDF翻译成中文?这篇文章教会你
  6. bmob php支付,GitHub - bmob/bmob-php-sdk: PHP SDK相关源码
  7. 理解什么叫“自然拼读”
  8. 分析的意义:数据背后的故事(1)
  9. Alibaba Code代码索引技术实践:为Code Review提供本地IDE的阅读体验
  10. 送小公主——哆啦A梦(Python代码实现)