GROUP BY和HAVING子句

GROUP BY子句

用于将信息划分为更小的组
每一组行返回针对该组的单个结果

--统计每个部门的人数:
Select count(*) from emp group by deptno; --根据部门分组,并统计
Select deptno, count(*) form emp group by deptno; select deptno, avg(sal) from emp group by deptno; --每个部门的平均工资

HAVING子句

用于指定 GROUP BY 子句检索行的条件

Select deptno, avg(sal) from emp group by deptno having avg(sal) >2000; --找出平均工资大于2000的部门;

数据排序

Order by 列名1 asc | desc, 列2 asc | desc; --默认为asc升序
Select * from emp order by sal; --根据工资升序排序
Select * from emp order by sal desc; --工资降序
Select * from emp order by sal desc, hiredate asc; --按工资降序排,如果工资一样,则按日期升序排;

查询语句的执行顺序

Where ,group by , having

先根据where条件将符合要求的数据筛选出来,

再根据group by来进行分组

最后将分组之后的数据用having进行约束,得到select的结果

多表查询

Select e.ename, t.tid from emp e, test t;  --笛卡尔集,交叉查询

连接查询

内连接: inner join返回多个表之间共同的数据

Select empno,ename,dname from emp,dept where emp.deptno = dept.deptno;
Select empno,ename,dname form emp inner join dept on emp.deptno = dept.deptno;

外连接:

左连接: left join  数据的结果以左表为主,右表如果在左表中不存在就显示是否为空!

select s.*, c.cid, c.grade from student s left join cs c on s.sid = c.sid

右连接: right join

全连接: full join

具体参看:IndexMan 文章 oracle连接查询详解

子查询

在一个查询中可以包含另一个查询,它可以出现在任何一个地方,外部查询得到结果,内部查询返回条件

--得到工资最高的人的信息
select * from emp where sal = (select max(sal) from emp);
--查询所有和SMITH在同一个部门的人
select ename from emp where deptno = (select deptno from emp where ename = 'SMITH');
--列出与smith在同一个部门的员工信息
Select * from emp where deptno = (select deptno form emp were ename = 'SMITH');
--与MARTIN是同一个领导的员工
Select * form emp where mrg = (select mgr from emp where ename = 'MARTIN');
--列出所有在New York办公的员工
--连接查询方式:
select * from emp inner join dept on emp.deptno = dept.deptno where LOC = 'NEW YORK';
--子查询方式:
select * from emp where deptno = (select deptno from dept where LOC = 'NEW YORK');
--列出所有在New York和DALLAS办公的员工
Select * from emp where deptno in (select deptno from dept where loc = 'NEW YORK' or loc = 'DALLAS');
Select * from emp where deptno = any (select deptno from dept where loc = 'NEW YORK' or loc = 'DALLAS');

数据的分页

--查询前5条
Select rownum, emp.* from emp where rownum <=5;
--查询第6条以后的数据
select * from emp where empno not in(select empno from emp where rownum <=5);
--查询第6-10条数据
○ Select * from (select * from emp where empno not in(select empno from emp where rownum <=5)) where rownum <=5;
○ select * from emp where empno not in(select empno from emp where rownum <=5) and rownum <= 5;
--总结
○ Select * from (select * from emp where empno not in(select empno from emp where rownum <= size * (page - 1))) where rownum <= size;
○ select * from emp where empno not in(select empno from emp where rownum <= size * (page - 1)) and rownum <= size; --排序后再分页查询
--将排序之后的数据编号(效率排第2)
select * from (select rownum rn, d.* from (select * from emp order by sal desc) d) where rn > 5 and rn < 11; --分页函数:row_number函数(效率排第1)
select row_number() over(order by sal desc) rn, emp.* from emp;
--分页
select * from (select row_number() over(order by sal desc) rn, emp.* from emp) where rn > 5 and rn < 11;

Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页的更多相关文章

  1. Oracle学习笔记四 SQL命令(二):SQL操作语言类别

    SQL分为下列语言类别 1.数据定义语言(DDL) Create.Alter.Drop 2.数据操纵语言(DML) Insert.Select.Delete.Update 3.事务控制语言(TCL) ...

  2. Oracle学习笔记六 SQL常用函数

    函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:

  3. Oracle学习笔记(五)

    七.查询 1.基本查询语句 select 列名字,列名字 from 表名字 例如 select user_a_id from userinfo; 2.在SQL*PLUS中设置格式 (1)设置新的字段名 ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  6. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  7. oracle学习笔记3:基本的SQL语句

    oracle基本的SQL语句和SQLSERVER基本一样,在这里只简单列出与SQLSERVER不一样的地方 1.select * from orderinfo where address = 'abc ...

  8. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  9. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

随机推荐

  1. Html5 希尔排序演示

    希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 如下图所示: 代码如下: <!DOCTYPE html> <html& ...

  2. redhat7 修改hostname

    修改linux redhat的 hostname 其实有好一些陷阱.. 通常 我们修改 /etc/sysconfig/network 的 HOSTNAME 变量即可 但是它不会立即生效, 需要执行下面 ...

  3. 游戏编程系列[2]--游戏编程中RPC与OpLog协议的结合--序

    在系列[1]中,我们展示了RPC调用协议的定义以及演示,通过方法定义以及协议约定,进行了协议约定以及调用过程的约定.然而,实际上在游戏中,调用过程之后,需要传输相对多的数据给服务端. 常用场景,客户端 ...

  4. Android 开发环境在 Windows7 下的部署安装

    Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...

  5. Git(最基本使用远程仓库:github)-V1.0

    所有操作的根目录是:D:/zqzGit文件夹,这个目录也是git仓库 git bash清屏  clear  1.安装(略)  2.安装后记得配置: $ git config --global user ...

  6. ElasticSearch 5学习(1)——安装Elasticsearch、Kibana和X-Pack

    安装准备: 安装Elasticsearch唯一的要求是安装官方新版的Java,包括对应的Jdk. 安装Elasticsearch 首先到官网下载最新版本的Elasticsearch压缩包. 可以使用命 ...

  7. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)

    今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 De ...

  8. 简单实用的进度条加载组件loader.js

    本文提供一个简单的方法实现一个流程的进度条加载效果,以便在页面中可以通过它来更好地反馈耗时任务的完成进度.要实现这个功能,首先要考虑怎样实现一个静态的进度条效果,类似下面这样的: 这个倒是比较简单,两 ...

  9. 运用css,对于下拉菜单的制作

    <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <met ...

  10. SpringMVC 入门

    MVC 简介 1.MVC 是一种架构模式 程序分层,分工合作,既相互独立,又协同工作,分为三层:模型层.视图层和控制层 2.MVC 是一种思考方式 View:视图层,为用户提供UI,重点关注数据的呈现 ...