Exploring
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
首页
  • Java

    • 面向对象的思想OOP
    • 浅谈Java反射原理
    • endorsed覆盖JDK中的类
  • 认证与授权

    • LDAP概念和原理介绍
    • OAuth2介绍
  • Impala

    • Impala 介绍
  • MySQL

    • 关于MySQL的一些面试题
    • 解决MySQL不到中文数据
    • 数据库之事务与实现原理
  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
    • plsql简单入门
  • Redis

    • 数据类型详解
    • 跳越表
    • 数据持久化的两种方式
  • 共识算法

    • gossip
  • RPC

    • GRPC初识与快速入门
    • ProtocolBuffer基本语法
  • RabbitMQ

    • RabbitMQ入门程序之HelloWorld
    • RabbitMQ之工作模式
  • Zookeeper

    • Zookeeper一文入门
  • Docker

    • Docker入门初体验
  • Maven

    • 把自己的包到Maven中央仓库
    • Maven之自定义插件
  • Nginx

    • nginx的安装
    • nginx的配置文件
    • nignx 的变量
  • Tomcat

    • Servlet3通过SPI进行注册组件
  • Vagrant

    • vagrant 初始化
    • vagrant 常用配置
    • vagrant 自己制作 box
  • Linux

    • 启动方式 Systemd
    • 后台服务
    • 防火墙与 Iptables
  • 设计模式

    • 设计模式-代理
    • 设计模式-单例模式
    • 设计模式-迭代器
  • 分布式

    • CAP 理论
  • 数据结构

    • 数据结构之堆Heap
    • 数据结构之哈希表
    • 数据结构之队列
  • 计算机网络

    • HTTP与HTTPS详解
    • 浅谈DNS协议
    • ISP中的网络层
  • 算法

    • 常用查找算法及Java实现
    • 常用排序算法及Java实现
    • 迪杰斯特拉算法
  • 操作系统

    • 操作系统之进程调度算法
    • 操作系统之进程通讯IPC
    • 操作系统之内存管理
  • 抓包

    • 生成安卓系统证书
  • 加解密

    • 常见加密算法
    • 公开秘钥基础知识
    • RSA 解析
  • Windows

    • scoop 包管理
    • windows-terminal 配置
    • 增强 PowerShell
归档
Github (opens new window)
  • MySQL

  • Oracle

    • oracle的表空间,用户管理,表操作,函数
    • oracle的查询、视图、索引
      • 一、查询
      • 二、视图
      • 三、索引
    • plsql简单入门
  • Redis

  • 数据库
  • Oracle
unclezs
2019-04-07
0
目录

oracle的查询、视图、索引

所有表来自oracle的scott用户的默认表

# 一、查询

# 1.1分组查询

查询平均工资大于2000的部门 t.deptno 部门 t.sal 工资

select t.deptno ,avg(t.sal)
from emp t
group by t.deptno
having avg(t.sal)>2000;
1
2
3
4

# 1.2多表查询

# 1.2.1 内连接
select * from emp e,dept d where e.deptno=d.deptno;
select * from emp e inner join dept d on e.deptno=d.deptno;
1
2
# 1.2.2 外连接
--左外连接
select * from emp e left join dept d on e.deptno=d.deptno;
select * from emp e, dept d where e.deptno(+)=d.deptno;
--右外连接
select * from emp e right join dept d on e.deptno=d.deptno;
select * from emp e, dept d where e.deptno=d.deptno(+);
1
2
3
4
5
6
# 1.2.3 自连接
select e1.ename as 员工,e2.ename as 上级
from emp e1,emp e2
where e1.mgr=e2.empno;
1
2
3
# 1.2.4子查询

1.如果返回一个值则使用where ?=(sql) 2.返回一个列表则使用 where ? in (sql) 3.返回一张表

-- 查询部分最低工资,最低工资员工姓名,所在部门名字
select t.msal,e.ename,d.dname
from (select deptno,min(sal) msal
      from emp
      group by deptno) t,emp e,dept d
where t.msal=e.sal
and t.deptno=d.deptno;
1
2
3
4
5
6
7
# 1.2.5分页查询

oracle的分页查询依靠rownum, select每查询一条记录就会加个rownum, rownum初始为1,依次递增,不能跳着走; 当查询时加入order by的时候就可能导致rownum错乱 比如:

select rownum,e.* from emp e order by sal desc;
1

结果集: select 先执行完了再排序的,所以,rownum乱了

分页查询模板:

select * from
      (select rownum rn,e1.* from
             (select e.* from emp e order by sal desc) e1 
      where rownum <10)
where rn>5;
1
2
3
4
5

# 二、视图

# 2.1创建视图

create view v_emp as select  ename,sal from emp;
--只读视图
create view v_emp as select  ename,sal from emp with read only;
1
2
3

# 2.2查询视图

select * from v_emp;
1

# 2.3修改视图内容

修改后对应表的值也会变

update v_emp set sal=1000.00 where ename='SMITH'
1

# 三、索引

索引就是在表的列上构建一个二叉树,达到大幅度提高查询效率的目的,但是索引影响增删改的效率

# 3.1单列索引

# 3.1.1创建单列索引
create index index_ename on emp(ename);
1
# 3.1.2触发单列索引

触发规则是,查询条件必须是索引中的原始值,比如模糊查询和单行函数都会影响索引触发; 而且在or语句中,如果不包含触发原始值的条件则不触发索引;

select * from emp where ename='SCOTT'; ---触发 表中有ename=SCOTT
select * from emp where ename='abc'; ---不触发 表中无ename=abc
select * from emp where ename='SCOTT' or sal=1000; ---不触发
1
2
3

# 3.2多列索引

# 3.2.1创建多列索引
create index index_ename_sal on emp(ename,job);
1
# 3.2.1触发多列索引

优先检索列:索引的第一列 触发规则:查询条件必须包含优先检索列中的原始值

select * from emp where ename='SCOTT' and sal=1234; --触发多列索引
select * from emp where ename='abc' and sal='asx'; --不触发多列索引  表中无ename=abc
--表中既有单列索引又有多列索引时
select * from emp where ename='SCOTT';  --触发单列索引
1
2
3
4
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11
oracle的表空间,用户管理,表操作,函数
plsql简单入门

← oracle的表空间,用户管理,表操作,函数 plsql简单入门→

Theme by Vdoing | Copyright © 2018-2024 unclezs
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式