Java39: 数据库三(Oracle)

Oracle 高级查询

1 集合运算

union 并集 把两张表合成一张表

intersect 交集 一样的留下,不一样的不要

minus 减去 前面的结果减去后面的结果

create table emp3 as 
select * from emp2 where deptno=20;
create table emp4 as 
select * from emp2 where deptno=30;

alter table emp3 rename to emp20;
alter table emp4 rename to emp30;

select * from emp20;
select * from emp30;

select * from emp20 union select * from emp30;

select * from emp30 intersect select * from emp2;

select * from emp2 minus select * from emp30;

2 connect by 和start with

依托于该语法,我们可以将一个表形结构的以树的顺序列出来

提供一个伪列 level

level

找到头
select ename from emp2 where mgr is null;
select empno,ename,mgr from emp start with ename=‘KING‘ connect by prior empno=mgr;

select level,empno,ename,mgr from emp start with ename=(select ename from emp2 where mgr is null) connect by prior empno=mgr;

select * from (select level lv,empno,ename,mgr from emp start with ename=(select ename from emp2 where mgr is null) connect by prior empno=mgr) where lv=2;

3高级分组函数

rollup 函数 小计

rollup 函数多一行 小计

对于分组的列为null

对于聚集函数为求 小计

select job,sum(sal) from emp GROUP BY rollup(job);

select job,sum(sal),round(avg(sal)),max(sal),count(empno)from emp group by rollup(job);

统计rollup(x,y) 统计第一个x 不统计y

select dname,job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job);

cube 统计所有的列

select dname,job,sum(sal) from emp inner join dept using(deptno) froup by cube(dname,job) order by dname;

rollup 和cube 就是汇总的结果

grouping 和grouping sets

select grouping(dname),dname ,grouping(job),job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job) order by dname;
select * from (select grouping(dname),dname ,grouping(job) N,job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job) order by dname) where dname=‘SALES‘ and N=1 ;
select grouping(dname),dname,grouping(job),job,sum(sal) from emp inner join dept using(deptno) group by cube(dname,job) order by dname;

只查询汇总的行 总的汇总也不要

select dname,job,sum(sal) from emp inner join dept using(deptno) group by grouping sets(dname,job);

如果需要查询的结果只有小计 可以用cube 和 grouping sets 用grouping sets 的效率高于cube 和rollup

排名函数

既能排序又能排名

rank() over( orader by xx)

重复就会削去下一个编号

select rank() over(order by sal desc),ename,sal from emp;

dense_rank() over(orader by xx)

重复不削去编号

select dense_rank() over(order by sal desc),ename,sal from emp;

先排序在rownum  比rownum 简单

select row_number() over(order by sal desc),ename from emp;
时间: 2024-10-13 03:25:05

Java39: 数据库三(Oracle)的相关文章

sqlplus连接oracle数据库三种方式

方式一:命令提示符下敲入sqlplus,然后键入用户名和口令,测试查询 方式二:命令提示符下 敲入sqlplus 用户名/口令@数据库实例 方式三:命令提示符下敲入sqlplus /nolog,然后连接数据库connect scott/[email protected] sqlplus连接oracle数据库三种方式

Oracle创建'数据库'三步走

--创建表空间 create tablespace waterboss datafile 'd:\waterboss.dbf' size 100m autoextend on next 10m; --创建用户 create user wateruser identified by 011220 default tablespace waterboss; --用户赋权 grant dba to wateruser; Oracle创建'数据库'三步走 原文地址:https://www.cnblogs

数据库之Oracle

数据库之Oracle 一. 用户的管理 1. 用户就是好比公司的某个人,而权限是这个人能在公司做什么,他的角色就是说明他的职位. 2. 用户的权限分为: 系统权限:对别的用户的管理操作. 对象权限:对保存的数据的管理操作. 3. 对用户的增删改查 增:例如我创建一个用户名为”atongmu“密码为“123”的用户:create user c##atongmu identified by 123; 删:不能自己删除自己,需要dba权限才可以,这样有了之后,删除用户:drop user  c##at

【数据库】Oracle 11g使用命令导入导出表,导出结果集

[数据库]Oracle 11g使用命令导入导出表,导出结果集 很久没敲命令进行Oracle数据库表的导入(imp),导出(exp)了,今天猛一敲,发现有些命令居然忘了,顺手写下这篇博文,记录一下! exp本地导出命令: 1 exp username/[email protected] file=d:\demo.dmpfull=y 2 exp username/[email protected] file=d:\demo.dmpowner=(xx) 3 exp username/[email pr

初识 数据库及Oracle数据库

一.数据库基本概念二.数据库举例三.Oracle特点四.Oracle版本五.安装Oracle注意事项六.SQL简介七.Select语句 一.数据库基本概念 数据库(Database,DB)数据库管理系统(Database Management System,DBMS)数据库管理员(Database Administrator,DBA)数据库系统(Database System) 二.数据库举例 Oracle(Oracle) DB2(IBM) SQL/Server(MS) SyBase(SyBas

DataTable数据批量写入数据库三种方法比较

DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename);3)   sqlbulkcopy.WriteToServer(datatable); 1.生成测试的datatable表,表结构如下:UniqueID(主键,自动增长)   |   CompanyName   |   CompanyCode   |   Address   |   Owner   |

戏谈数据库三范式

数据库三范式想必大家并不陌生,官方的解释很抽象,初学者比较难理解.对于这块知识,我是看了会,会了忘,忘了再看.每当别人问我的时候,必须先看看教材,回顾一段时间才能理清. 为什么当别人提问时不能立马把三范式的经典思想说出来呢?通过听米老师的"如何高效学习"这堂课,我发现原因是我自己没有融入到三范式中,三范式没有和自己发生关系.下面,我用三个有趣的小故事帮助大家快速.深刻的理解三范式的含义. 第一范式,官方解释:关系模式R的每个关系r的属性值都是不可分的原子值.这个官方解释还不算太难,比如

数据库三范式是什么?

第一范式(1NF):字段具有原子性,不可再分.所有关系型数据库系统都满足第一范式) 数据库表中的字段都是单一属性的,不可再分.例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段. 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF). 要求数据库表中的每个实例或行必须可以被惟一地区分.通常需要为表加上一个列,以存储各个实例的惟一标识.这个惟一属

oracle监听,数据库,oracle服务器的启动和停用

一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器,然后使用数据库管理员用户去启用和停用相关服务. 1.启动oracle监听:使用root用户登录后,使用命令:lsnrctl start   //启动监听 2.启动数据库:使用数据库管理员dba用户(sqlplus '/as sysdba')去启动和关闭数据库. 连接数据库:connect  /as