##oracle查询操作

emp 员工表(empno 员工号/ename 员工姓名/job 工作/mgr 上级编号/hiredate 受雇日期/sal 薪金/comm 佣金/deptno 部门编号)
dept 部门表(deptno 部门编号/dname 部门名称/loc 地点)---------------SELECT语句的完整查询 ---------------
--1.列描述
DESC EMP;
--2.检索所有列
Select * from EMP;
--3.检索特定列:员工号, 员工姓名
SELECT EMPNO, ENAME, JOBFROM EMP T;
--5.distinct 取消重复的行 ,显示不重复的工作
Select distinct job from emp;
--6.计算列,显示员工姓名,12月薪金
select ename,sal*12 from emp;
--7.列别名 员工姓名 别名“员工”
select ename "员工" from emp
--8.使用空值
a.使用nvl和nvl2处理空值
select ename,sal+NVL(comm,0) from emp;
select ename,comm,sal,NVL2(comm,sal+comm,sal) from emp;
--NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,若E1不为null,则返回E2。
--9.使用连接字符串
select ename ||'工作是'||job from emp;
select concat(concat(ename, '工作是'),job) from emp--注意结果为甚么和实际不同
SELECT JOB, SUM(T.SAL + T.COMM) INCOMEFROM EMP TWHERE T.DEPTNO IN (2, 3)GROUP BY JOB;SELECT JOB, SUM(T.SAL + T.COMM) INCOMEFROM EMP TWHERE T.DEPTNO IN (2, 3)GROUP BY JOB HAVING SUM(T.SAL+T.COMM)>1000;---------------关于WHERE查询条件使用 ---------------
--1.子句查询为数值
select ename,sal from emp where sal > 2000
--2.子句查询为字符
select ename,sal from emp where ename = 'SCOTT';
--3.子句查询为日期:
select ename,sal from emp where hiredate= to_date(19801217,'yyyymmdd');
select ename,sal from emp where hiredate > to_date(19801217,'yyyymmdd');
--4.Between and 查询
Select ename,sal,hiredate from emp where sal between 2000 and 3000
--5.LIKE 查询(通配符 %,_)
select ename,sal,hiredate from emp where ename like 'S%'select ename,sal,hiredate from emp where ename like '___T%'
--6.IN的使用
select ename,sal,hiredate from emp where sal in (800,3000);
--7.NULL值的判断
select ename,sal,hiredate,mgr from emp where mgr is null;(注意这里不能使用=null)
--8.AND OR NOT 使用(顺序 NOT > OR > AND)
select ename,sal,deptno,job from emp where deptno = 20 and job = 'CLERK';
select ename,sal,deptno,job from emp where deptno = 20 or job = 'CLERK';
---------------统计分析 ---------------
--ORDER BY 排序:
1.默认按升序排序(ASC),这里NULL放最后
Select ename,sal,COMM from emp order by COMM;
Select ename,sal,COMM from emp order by COMM ASC;
2.降序排序 ,按佣金降序
Select ename,sal,COMM from emp order by COMM DESC;
3.多列排序,
Select ename,sal,COMM from emp order by COMM DESC,SAL;
4.非选择列排序
Select ename,sal  from emp order by COMM DESC ;
5.使用别名排序
Select ename,sal,COMM "奖金"  from emp order by "奖金" DESC ;
6.使用位置编号排序,
Select ename,sal,COMM "奖金"  from emp order by  2 DESC ;
--group by 数据分组
分组求最大,最小值
select max(sal),min(sal) from emp;
2.平均值,求和,数量
select max(sal),min(sal),sum(sal),avg(sal),count(sal) from emp
3.求总数
select count(comm) from emp;
Select count(distinct comm) from emp;
Select count(*) from emp;
--SELECT * FROM EMP FOR UPDATE
--having子句的使用
1.Group by 单列
select deptno,max(sal),avg(sal) from emp group by deptno;
2.Group by 多列
select deptno,job,max(sal),avg(sal) from emp group by deptno,job order by deptno,job;
3.Having 限制显示
select deptno,job,max(sal),avg(sal) from emp group by deptno,job having avg(sal) > 1000 order by deptno,job;
4.Order by 排序
select deptno,job,max(sal),avg(sal) from emp group by deptno,job having avg(sal) > 1000 order by avg(sal);
--报表排序
如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 1.Rollup 与 Cube 生成小计与总计:
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO, JOB);
SELECT DEPTNO, JOB, AVG(SAL)FROM EMPGROUP BY CUBE(DEPTNO, JOB)ORDER BY DEPTNO
---------------多表连接---------------
1.等值连接
--员工姓名,部门
SELECT ENAME, SAL, DNAMEFROM EMP E, DEPT DWHERE E.DEPTNO = D.DEPTNOORDER BY D.DEPTNO;
--1部门
SELECT ENAME, SAL, DNAMEFROM EMP E, DEPT DWHERE E.DEPTNO = D.DEPTNOAND D.DEPTNO = 103.自连接
SELECT A.*, B.ENAME MNAME FROM EMP A, EMP B WHERE A.MGR = B.EMPNO ORDER BY  A.EMPNO
--某员工,层级关系
SELECT a.*, LEVELFROM EMP A
CONNECT BY A.EMPNO = PRIOR MGRSTART WITH A.EMPNO = 79344.外连接
--公司员工信息 (左连接)
SELECT A.DNAME, B.ENAME, B.SAL FROM DEPT A LEFT JOIN EMP B ON A.Deptno = B.Deptno;--公司员工信息(右连接)
SELECT A.DNAME, B.ENAME, B.SAL FROM DEPT A RIGHT JOIN EMP B ON A.DEPTNO = B.DEPTNO  AND B.DEPTNO = 1;--公司员工信息(完全连接)
SELECT A.DNAME, B.ENAME, B.SAL FROM DEPT AFULL JOIN EMP B ON A.DEPTNO = B.DEPTNO AND A.DEPTNO = 1
5.子查询
--单行子查询
SELECT *FROM EMPWHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'SCOTT')AND ENAME != 'SCOTT'
--多行子查询
SELECT * FROM EMP WHERE JOB IN (SELECT JOB FROM EMP WHERE DEPTNO = 10);
SELECT * FROM EMP WHERE sal >= ALL(SELECT sal FROM EMP WHERE DEPTNO = 30);
SELECT * FROM EMP WHERE sal >= ANY(SELECT sal FROM EMP WHERE DEPTNO = 30);
--相关子查询
EXISTS与IN的效率对比
SELECT *FROM EMP AWHERE EXISTS (SELECT 1FROM DEPT BWHERE A.DEPTNO = B.DEPTNOAND B.DNAME =  'ACCOUNTING')SELECT *FROM EMP AWHERE a.DEPTNO in (SELECT B.DEPTNO FROM DEPT B WHERE B.DNAME = '技术部')--FROM子查询
SELECT ENAME, JOB, SALFROM EMP, (SELECT DEPTNO, AVG(SAL) AVGSAL FROM EMP GROUP BY DEPTNO) DEPTSTDWHERE DEPTSTD.DEPTNO = EMP.DEPTNOAND EMP.SAL > DEPTSTD.AVGSAL
--DML子查询
--insert中使用子查询
INSERT INTO employee
SELECT * FROM emp
--update中使用子查询
UPDATE emp SET (sal,comm) = (SELECT sal,comm FROM emp WHERE ename = 'SMITH')
WHERE job = (SELECT job  FROM emp WHERE ename = 'SMITH')
--delete 中使用子查询
DELETE FROM emp WHERE job = (SELECT job FROM emp WHERE ename='SMITH')
--DDL中使用子查询--其它查询
-- Case when
SELECT ENAME,SAL,CASEWHEN SAL > 1500 THEN1WHEN SAL = 1500 THEN2ELSE2END GRADEFROM EMP
--With 子句
WITH EMPL AS (SELECT DEPTNO,AVG(SAL) AVG_SAL  FROM EMP GROUP BY DEPTNO
)
SELECT * FROM EMPL A WHERE AVG_SAL> (SELECT SUM(AVG_SAL)/3 FROM EMPL B )

oracle查询操作相关推荐

  1. oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

    SQL查询操作:增删改查 一.SQL操作符 算术操作符 + - * / 比较操作符 = != < > <= >= BETWEEN--AND IN LINK IS NULL 逻辑 ...

  2. Oracle查询操作练习题

    目录 1.取前几条数据. 2.先根据部门编号升序,再根据薪水降序. 3.查询出雇员表(emp)中comm为null的记录. 4.查询出雇员表(emp)中员工的姓名,将名字中的'A'换为'1','B'换 ...

  3. 6、oracle数据库下查询操作

    ORACLE下查询操作 针对数据库操作最多的就是数据查询,这里分享一个我常用的方法,看到需求后,先确定查询范围,就是需要查询哪些表:之后确定查询条件:最后写出查询的字段. ORACLE中之前说过有两个 ...

  4. python查询oracle数据库_python针对Oracle常见查询操作实例分析

    本文实例讲述了python针对Oracle常见查询操作.分享给大家供大家参考,具体如下: 1.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: ...

  5. python如何实时查询oracle_python针对Oracle常见查询操作实例分析

    本文实例讲述了python针对Oracle常见查询操作.分享给大家供大家参考,具体如下: 1.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: ...

  6. oracle图书操作、sql语句查询+授权、视图、索引、表操作

    oracle图书操作.sql语句查询+授权.视图.索引.表操作 一.创建一张表book,表结构为(总编号,分类号,书名,作者,出版单位,单价),插入若干记录 二.创建一张表reader,表结构为(借书 ...

  7. Oracle数据库多表连接查询操作以及查询操作的补充

    文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...

  8. Oracle数据库-第一章:select语句,数据查询操作

    前言: 1.一个认知 认知什么是oracle? oracle:商业运用第一的关系型数据库 实质:关系型数据库 了解oracle数据库发展历史(文档) 2.二个概念 数据库:数据存储的仓库 关系型数据库 ...

  9. Oracle集合操作

    Oracle集合操作 · UNION:并集,所有的内容都查询,重复的显示一次 · UNION ALL:并集,所有的内容都显示,包括重复的 · INTERSECT:交集:只显示重复的 · MINUS:差 ...

最新文章

  1. 中国科学院院士张钹:人工智能目前只能在某些行为上尽量接近人
  2. hybriddb mysql移植_HybridDB for MySQL 实现在线与离线数据分离的实践
  3. php数组指针什么用,php数组指针用法详解
  4. c语言对浮点数的处理默认是double吗,C语言中浮点数float和double输出的问题
  5. 5G时代谁的天下???
  6. SAP Commerce(原Hybris)的订单处理框架和SAP CRM One Order框架
  7. config database.php,CodeIgniter配置之database.php用法实例分析
  8. php执行zip压缩,PHP执行zip与rar解压缩方法实现代码
  9. Web框架——Flask系列之蓝图Blueprint(二十一)
  10. JAVA中inputstring_java IO流 之 字节输入流 InputString()
  11. 基于C语言EOF与getchar()的使用详解
  12. 7 -- Spring的基本用法 -- 6... Spring 3.0 提供的Java配置管理
  13. SQL Serevr 2012 安装教程
  14. Mac OS下安装MangoDB及其使用配置
  15. Pix4D航测成图完整教程(空三,点云编辑DSM,正射,质量报告分析...)
  16. 半导体物理学——(一)半导体中的电子状态
  17. 计算机网络---网卡,交换机和路由器|CSDN创作打卡
  18. 子网掩码以及网络地址、主机地址、广播地址
  19. windows10LTSC下载与安装
  20. Oracle分析函数PERCENTILE_CONT

热门文章

  1. 输出星塔(奇数行输出星号,偶数行不输出)
  2. 科技巨头谷歌进军医疗行业,看皮肤病不再去专科医院,靠谱吗?
  3. MySQL数据库创建用户及授权操作
  4. Verdi的启动和设置
  5. 中科爱讯WiFi探针的功能用途与应用领域
  6. mybatis RowBounds 分页
  7. debian 的小软件。
  8. JAVA 面试题目总结
  9. 虚拟环境的作用及搭建
  10. 带你真正认识 Linux 系统结构