Oracle学习笔记五 --- 表查询



下面使用scott用户,用到的表见底部

1、查看表结构

desc [表名]

desc emp

2、distinct命令,去除重复行

3、练习

查找SMITH的工作,薪水等

select deptno,job,sal from emp where ename ='SMITH';

4、函数nvl

如果值为null,即以0代替

查找员工年工资

select sal*13+comm*13 "年工资" from emp;

在comm没有值时,结果将没有值,所以使用函数nvl

select sal*13+nvl(comm,0)*13 "年工资" from emp;

5、条件并列:and

select sal, empno, ename from emp where sal>=2000 and sal<2500;

6、like操作符

%    表示多个任意字符

_     表示单个任意字符

首字母为S的员工姓名和工资

select ename, sal where ename like 'S%';

第三个字符为大写O得所有员工姓名和工资

select ename,sal from emp where ename like '__O%';

7、在where条件使用in

select * from emp where empno in(7844,7998,3222);

8、逻辑操作符

工资高于500或岗位为MANAGER  同事还要满足姓名首字母为大写J

select * from emp where (sal>500 or job='MANAGER') and ename like 'J%';

9、order by [字段] [规则:asc、desc]

工资从第低到高排序

select * from emp order by sal;            //asc默认

select * from emp order by sal desc;        //从高到低

按照部门号升序而雇员工资降序排列

select * from emp order by deptno , sal desc;

10、使用列的别名排序 as

select ename, (sal+nvl(comm,0))*13 as "年薪" from emp order by "年薪";

select ename, (sal+nvl(comm,0))*13 as nianxin from emp order by nianxin;

select ename, (sal+nvl(comm,0))*13  "年薪" from emp order by "年薪";

select ename, (sal+nvl(comm,0))*13  nianxin from emp order by nianxin;

as可以省略,中文别名需要加双引号

注意:给表起别名不能加as,见下面 19

------8

复杂查询

------8

11、数据分组

max        min        sum        count    avg

显示所有员工中最高工资和最低工资

select  max(sal), min(sal) from emp;

显示最高工资的员工姓名及其工资

select ename,sal from emp where sal= (select max(sal) from emp);

注意:这样写是错误的:select ename,sal from emp where sal

= max(sal);ORA-00934: 此处不允许使用分组函数

显示比平均工资高的员工

select * from emp where sal > (select avg(sal)

from emp);

显示所有员工平均工资和工资总和

计算总共有多少员工

12、group by

用于对查询的结果分组统计

select avg(sal), max(sal), deptno from emp group by deptno;

select avg(sal), max(sal), deptno from emp group by deptno, job;

13、筛选having

分组             select avg(sal), max(sal), deptno from emp where  group by deptno

分组后筛选     select avg(sal), max(sal), deptno from emp where  group by deptno having avg(sal) > 2000;

14、数据分组小结

14.1   分组函数只能出现在选择列表、having 、order by 子句中

14.2   如果select 语句中同时包含group by,     having,    order by    那么他们的顺序是

从左至右  group by ,  having , order by

--------8

多表查询

--------8

15、笛卡尔集 多表查询

多表查询的条件是 至少不能少于表的个数-1

显示雇员名字、工资、及其部门名字

select a.ename,a.sal, b.dname  from emp a, dept b where a.deptno = b.deptno;

这里两个表 dept和emp,一个条件 emp.deptno = dept.deptno;

显示雇员名称,工资,部门名字,按部门排序

select a.deptno, a.ename,a.sal, b.dname  from emp a, dept b where a.deptno = b.deptno order by a.deptno

16、自连接

select   a.ename "小弟", b.ename BOSS from emp a, emp b  where a.mgr = b.empno and a.ename = 'FORD'

17、子查询

17.1、单行子查询 ‘=’ 等于号

题目:查找和SMITH同一部门的员工

查找出SMITH的部门号(结果仅一行数据)

select deptno from emp where ename='SMITH';

显示

select * from emp where deptno=

(select deptno from emp where ename='SMITH');

17.2、单列多行子查询 in 、 all、any

题目:查找和部门10的工作相同的雇员的名字

查找出10号部门所有的岗位(结果是多行数据)

select distinct job from emp where deptno=10;

显示

select  * from emp where jobin

(select

distinct job from emp where deptno=10)

显示工资比部门30的所有员工的工资高的员工姓名工资和部门号

select ename,sal,deptno from emp where sal >

all(select sal from emp where deptno=30);

根据oracle的执行顺序,下面这个单行子查询效率更高

select ename,sal,deptno from emp where sal >

(select max(sal) from emp where deptno=30);

显示工资比部门30的任意员工的工资高的员工姓名工资和部门号

select ename,sal,deptno from emp where sal >

any(select sal from emp where deptno=30);

下面这个单行子查询效率更高

select ename,sal,deptno from emp where sal >

(select min(sal) from emp where deptno=30);

18、多行多列

select  * from emp where ( job, deptno) = (select job, deptno from emp where ename = 'SMITH');

19、练习

显示各部门高于该部门平均工资的员工姓名、工资、部门号

select a2.ename, a2.sal, a2.deptno, a1.mysal

from emp a2, (select deptno, avg(sal) mysal from emp group by deptno) a1

where a2.deptno=a1.deptno and a2.sal > a1.mysal;

上面子查询得到的表a1叫内嵌视图

from子查询必须指定别名,这里指定为a1,另外给表取别名时不能加as

20、分页查询

一共三种

20.1、根据rownum来分,效率还不错,可读性也行

select a1.* , rownum rn from (select * from emp) a1;

这里a1.* a1表的所有列

select a1.* , rownum rn from (select * from emp) a1 where rownum

select * from (select a1.* , rownum rn from (select * from emp) a1 where rownum  5;

这里,rn不能修改为rownum,子查询的rownum也不能修改为rn

20.2、根据ROWID来分,效率最高,但可读性差

20.3、根据分析函数来分,效率很差,

21、用查询结果创建新表

create table mytable(id,name,sal,job,deptno) as select empno, ename,sal,job,deptno from emp;

表将创建,数据可以拷贝过来了

22、合并查询

为了合并多个select语句的结果,可以使用集合操作符:union、union all、intersect、minus

22.1、union 【并集】会去掉重复的记录

select ename,sal,job from emp where job='MANAGER' union

select ename,sal,job from emp where sal>2500;

22.2、union all【并集】不会去掉重复的记录

22.3、intersect 【交集】

22.4、minus    【差集】

23、创建新的数据库

23.1、通过oracle提供的向导工具 dbca :数据库配置助手   Database Configuration Assistant

emp表

dept表

oracle 5表关联查询,Oracle学习笔记5 - 表查询相关推荐

  1. Oracle中用system存数据,【学习笔记】Oracle表空间 数据存放system表空间影响数据库性能...

    天萃荷净 分享一篇,关于Oracle数据库system表空间研究,不能将用户数据存放在system表空间的原因 为什么不建议客户把业务数据存放到SYSTEM表空间中,一直想通过试验的数据来说明问题,今 ...

  2. oracle 表复制 long,【学习笔记】Oracle数据库使用copy实现long类型转移表空间案例 ORA-00997...

    天萃荷净 使用copy实现long类型转移表空间,表空间的数据文件损坏,在转移该表空间相关表时,遇到让人郁闷的long类型.不能使用ctas和move来实现转移,最后通过古老的copy来实现该项工作. ...

  3. oracle复制另一个字段,【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中...

    天萃荷净 分享一篇关于Oracle存储过程实现表之间数据复制功能.两表中列不同,动态的将一表中的数据复制到另一个表中案例 因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复 ...

  4. oracle停止job任务视图,【学习笔记】Oracle dba_datapump_jobs中not running作业的清除方法...

    天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库JOBS作业控制的文章.关于dba_datapump_jobs中的not running的作业的清除的方法. not runnin ...

  5. oracle dg 增加redo组,【学习笔记】Oracle Data Guard 修改dataguard主库redo组数和大小

    天萃荷净 运维DBA反映检查到Oracle DataGuard环境redo日志较小,总结一下修改dataguard主库redo组数和大小方法 在一个dg环境中,配置的是实时同步,需要增加主库的redo ...

  6. oracle数据库修改写入状态,【学习笔记】Oracle oradebug 使用oradebug修改数据库SCN方法案例...

    天萃荷净 使用oradebug修改数据库scn,使用oradebug修改数据库scn的案例. 这里也做了两个测试,发现该功能确实很巧妙,通过修改内存中的scn值,然后写入控制文件和数据文件,实现修改s ...

  7. oracle rac添加监听,【学习笔记】Oracle 10G RAC增加节点时手动注册监听服务的案例步骤...

    [学习笔记]Oracle 10G RAC增加节点时手动注册监听服务的案例步骤 时间:2016-10-22 22:53   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Ora ...

  8. oracle 下bdump占用大,【学习笔记】Oracle oradebug 利用oradebug释放被删除文件空间的案例...

    天萃荷净 利用oradebug释放被删除文件空间,运维DBA反映系统空间不足,由于trace跟踪文件占用,删除后不能释放空间,分析原因为oracle进程句柄占用 在很多时候,检查系统时候发现,由于某个 ...

  9. oracle中如何格式化输出,【学习笔记】数据库日期时间格式化输出案例

    天萃荷净 分享一篇关于开发DBA在工作中常用到的日期时间格式化输出方法案例,含:mysql.sql server.oracle 3种数据库日期时间格式化输出 1.mysql数据库时间格式化输出 DAT ...

  10. oracle rac 仲裁盘_【学习笔记】深入研究Oracle RAC节点驱逐的条件和案例

    天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库RAC环境中节点间管理的文章,详细介绍了RAC节点驱逐条件和管理方法. 本站文章除注明转载外,均为本站原创: 转载自loveOra ...

最新文章

  1. WindowsAzurePack Updata1VMM12R2SPF
  2. linux下文件的压缩和解压缩
  3. 软件测试相关概念与分类
  4. Quick BI电子表格: 新手亦可表格自由
  5. Gartner:2020年全球IaaS公有云服务市场增长40.7%
  6. python计算最大回撤_最大回撤线性算法实现
  7. as3 primitives
  8. 报表中去除字符中的空格
  9. 计算机体系结构及其硬件构成
  10. 聚合影视源码搭建教程
  11. c语言仿宋gb2312字体,【仿宋gb2312字体下载】仿宋gb2312字体官方下载 免费版-七喜软件园...
  12. sipp工具的使用--简单的呼叫测试
  13. 海康威视摄像头-chrome谷歌浏览器高版本局域网下海康摄像头web网页实时播放
  14. CentOS7如何设置屏幕不休眠
  15. 有趣的概率:三门问题
  16. qq群 发言统计for tc
  17. python思维导图
  18. 《心流》| 写作反熵
  19. Kaggle实战:随机森林预测泰坦尼克生存率
  20. 用python画图需要什么插件_PIL(Python Imaging Library)-用Python画图

热门文章

  1. 无法安装 计算机缺失,还原安装程序Windows缺失的文件 - Windows Client | Microsoft Docs...
  2. properties类_受不了springboot的yml和properties配置,我扩展出了groovy配置
  3. python多行语句_python多行语句
  4. c++ 字符串连接_C语言字符串操作总结大全(超详细)
  5. python持久化数据_Python数据持久化-mysql篇
  6. android json字符串转成json对象_C++ 两行代码实现json与类对象互转
  7. markdown 代码块背景色_markdown 绘图利器之graphviz
  8. android蓝牙聊天设备,Android蓝牙开发——实现蓝牙聊天
  9. python 装机配置_Python实现自动装机功能案例分析
  10. 在Struts结构中,JSP页面的元件命名最好别用大写字母开头