测试环境:

create table bqh6 (xm varchar2(10),bmbh number(2),bmmc varchar2(15),gz int);
insert into bqh6 values ('张三',01,'技术支持',3500);
insert into bqh6 values ('李四',02,'研发',4500);
insert into bqh6 values ('王五',03,'外业测绘',5000);
insert into bqh6 values ('小崔',02,'研发',8000);
insert into bqh6 values ('钱六',01,'技术支持',5500);
insert into bqh6 values ('赵二',03,'外业测绘',4500);
select * from bqh6

create table bqh7 (xm varchar2(10),bmbh number(2),bmmc varchar2(15), gwjb varchar2(10));

insert into bqh7 values ('张三',01,'技术支持','C');
insert into bqh7 values ('李四',02,'研发','C');
insert into bqh7 values ('王五',03,'外业测绘','A');
insert into bqh7 values ('小崔',02,'研发','A');
insert into bqh7 values ('钱六',01,'技术支持','A');
insert into bqh7 values ('赵二',03,'外业测绘','B');
select * from bqh7

分组函数:max, min, avg, sum, count

查询工资最高和最低的人的姓名:

select '最高的:'||xm,gz from bqh6 where gz=(select max(gz)from bqh6) union all
select '最低的:'||xm,gz from bqh6 where gz=(select min(gz)from bqh6)

查询所有工资低于平均工资的人的信息:

select * from bqh6 where gz< (select avg(gz) from bqh6)

给所有低于平均工资的员工薪水上涨10%:

update bqh6 set gz=gz+(select avg(gz) from bqh6)*0.1 where gz< (select avg(gz) from bqh6);

commit;

select * from bqh6;

groupt by用于对查询结果分组统计

查询每个部门的平均工资和最高工资:

select avg(gz),max(gz),bmmc from bqh6 group by bmmc;

having子句用于限制分组结果显示

查询平均工资低于5000的部门名称和它的平均工资:

select bmmc,avg(gz) from bqh6 group by bmmc having avg(gz)<5000

注意:

分组函数(max,min,avg,count)只能出现在选择列表(select后),having和order by子句中;

如果select语句中同时包含group by,having和order by,他们的顺序必须是group by,having和order by (先分组→再抑制结果显示→最后分组);

在选择列中如果有列,表达式和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会报错。

----------------------------------------------------------------------------------

多表查询

查询雇员姓名及工资和所在部门的的岗位级别:

select a.xm,a.gz,b.gwjb from bqh6 a,bqh7 b where a.xm=b.xm

笛卡尔积,原则:多表查询的条件是至少不能少于表的个数-1

查询部门编号为10的部门名称、雇员姓名和工资:

select a.xm,b.bmbh,b.bmmc,a.gz from bqh6 a,bqh7 b where a.xm=b.xm and b.bmbh=2;

查询雇员姓名、工资以及所在部门名称并按部门排序

select a.xm,b.bmbh,b.bmmc,a.gz from bqh6 a,bqh7 b where a.xm=b.xm order by b.bmmc

order by 默认升序(asc),降序(desc)

子查询

.单行子查询

查询与张三同一部门的所有雇员姓名:

select a.xm from bqh6 a where a.bmmc=(select bmmc from bqh7 b where b.xm='张三')

 多行子查询

查询部门编号为3的雇员姓名、部门名称、工资:

all在多行子查询的使用:与每一个内容相匹配

查询工资比部门编号3的所有员工的工资高的雇员姓名、工资和部门名称:

>ALL:比子查询中返回的最大的记录还要大

<ALL:比子查询中返回的最小的记录还要小

①select xm,bmmc,gz from bqh6 where gz>all (select max(gz) from bqh6 where bmbh=3)

②select xm,bmmc,gz from bqh6 where gz>(select max(gz) from bqh6 where bmbh=3)

②的效率要高于①,因为①会逐条的对比,而②直接比较结果。

IN在子查询的使用:用于指定一个子查询的判断范围

查询部门编号为1的雇员姓名、部门名称及工资信息。

select * from bqh6 where gz in(select gz from bqh6 where bmbh=1);

any在多行子查询的使用:与每一个内容相匹配,有三种匹配形式

①=any:功能与IN操作符是完全一样的

②>any:比子查询中返回记录最小的还要大的数据

③<any:比子查询中返回记录最大的还要小的数据

FROM子句中使用子查询一般都是返回多行多列,可以将其当作一张数据表:

查询出每个部门的编号,名称,部门人数,平均工资

select a.xm,a.bmbh,a.bmmc,b.部门人数,b.平均工资 from bqh6 a,
(select bmbh bh,count(xm) 部门人数,avg(gz) 平均工资 from bqh6 group by bmbh) b
where a.bmbh=b.bh

注意:

当在from子句中使用子查询时,该子查询会被作为一个视图对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。给列取别名可以使用as,但是给表、视图、子查询起别名不可以用as

分页查询:ROWNUM为显示每一条记录动态自动生成行号。

为显示每一条记录动态自动生成行号

查询结果就会多出一列,rn,表示rownum,行号数,是Orcl分配的。

查询前条记录:

查询前3-6条记录:

Oracle的分页是最复杂的,要使用2次子查询,但效率也是最高的,因为内部使用了2分查找的原理。MySql的分页是最简单的,直接一个limit就实现了

orcl 复杂查询的更多相关文章

  1. orcl数据库查询重复数据及删除重复数据方法

    工作中,发现数据库表中有许多重复的数据,而这个时候老板需要统计表中有多少条数据时(不包含重复数据),只想说一句MMP,库中好几十万数据,肿么办,无奈只能自己在网上找语句,最终成功解救,下面是我一个实验 ...

  2. Orcl分页查询的语法示例

    Orcle分页查询SQL sql =  SELECT T.* FROM (SELECT X.*, ROWNUM AS RN FROM (SELECT * FROM +表名) X WHERE ROWNU ...

  3. 数据库---实验四 oracle的安全性和完整性控制

    实验内容: (一) 授权 . 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by &q ...

  4. Oracle 删除数据后释放数据文件所占磁盘空间

    测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办 ...

  5. DBlink 创建 删除 脚本

    --配置SQLSERVER数据库的DBLINK --删除dblink Exec sp_droplinkedsrvlogin test,Null Exec sp_dropserver test --创建 ...

  6. python 连接 oracle 统计指定表格所有字段的缺失值数

      python连接oracle -- qlalchemy import cx_Oracle as co import pandas as pd from sqlalchemy import crea ...

  7. 从零开始教你安装Oracle数据库

    1.数据库安装 1.1下载 根据自己的操作系统位数,到oracle官网下载(以oracle 11g 为例) 之后把两个压缩包解压到同一个文件夹内(需要注意的是,这个文件夹路径名称中最好不要出现中文.空 ...

  8. JDBC_part1_Oracle数据库连接JDBC以及查询语句

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! JDBC part1 JDBC概述 jdbc是一种用于 ...

  9. Mybatis框架的模糊查询(多种写法)、删除、添加(四)

    学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...

随机推荐

  1. 26-hadoop-hbase简介

    hadoop的生态系统 1, hbase简介 –HBase–HadoopDatabase,是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库 –利用HadoopHDFS作为其文件存储系统, ...

  2. AndroidStudio+ideasmali动态调试smali汇编

    0x00    前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了 ...

  3. nginx报错整理

    一. 1.线上有个域名出现一个访问报错: 413 Payload Too Large 这里贴一下关于这个报错的解释: The 413 (Payload Too Large) status code i ...

  4. MAMP 安装phpredis 扩展

    phpredis扩展包地址: https://github.com/nicolasff/phpredis 1.下载php源码 (http://php.net/releases/  选择php5.5.1 ...

  5. 对Java虚拟机理解

    深入理解Java虚拟机 Java技术体系 Java体系分为四个平台 Java card 运行在小内存上的 Java ME 运行在手机上 Java SE 完整Java 核心api JavaEE 支持使用 ...

  6. Python面向对象基础一

    公司可能过一两个月就要从深圳搬到东莞松山湖,项目组的现在有的在转Java或其他语言的,问我们要不要转java+hoodap+spark方向,我还是先不转,毕竟之前是从ios转回C#,这现在在转其他的那 ...

  7. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  8. 二叉搜索树(hdu3791)

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式

    问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进 ...

  10. 语音识别(ASR) 阿里云

    做语音识别这块的呢,国内领先的有科大讯飞,BAT这几家公司,鉴于使用科大讯飞的接口需要付费,腾讯云的语音识别申请了几天也没给通过,比较了一下阿里和百度的,个人觉得阿里云的好用一些,这篇博客来讲讲怎么讲 ...