查询是一个基本需求,但具体需求是千变万化的,所以查询同时又是复杂的。

曾经历过一个项目,几十号人,辛苦加班搞了两三个月,只是为了实现一个主要功能:保单查询。

不过,因为是新人新客户,还有环境搭建(开发、测试)、接口联调、需求变更等问题会拖慢开发进度。

以下查询看似繁多,其实比较有条理,对于初学者,还是很有参考价值的。

--9.1.5使用Where限制返回的行
--查询员工工资大于2000的人员列表
SELECT empno, ename, sal, hiredate FROM emp WHERE sal > 2000;--查询当前的日期格式
SELECT value FROM v$nls_parameters WHERE parameter='NLS_DATE_FORMAT';--查询雇佣日期大于1981-12-01的员工信息。
SELECT empno,ename,hiredate FROM emp WHERE hiredate>'1981-12-01';--9.1.6 Between, in和like范围查询
--BETWEEN..AND的示例
SELECT empno, ename, sal FROM emp WHERE sal BETWEEN 2000 AND 3000;--NOT BETWEEN..AND示例
SELECT empno, ename, hiredateFROM empWHERE hiredate NOT BETWEEN '1981-01-01' AND '1981-06-30';--使用IN查询示例SELECT empno,ename,deptno FROM emp WHERE deptno IN (30,40,50,60);--IN语句被转换成了如下的语句:
SELECT empno,ename,deptno FROM emp WHERE deptno=30 OR deptno=40 OR deptno=50 OR deptno=60;  --NOT IN 语句使用示例
SELECT empno, ename, job, salFROM empWHERE job NOT IN ('职员', '分析人员', '销售人员');--与NOT IN 相匹配的SQL语句
SELECT empno, ename, job, salFROM empWHERE (job <> '职员')AND (job <> '分析人员')AND (job <> '销售人员');--NULL在NOT IN中的示例
SELECT empno, ename, job, salFROM empWHERE job NOT IN ('职员', '分析人员', '销售人员', NULL);--设置空值
update emp set job=null where empno=8092;
select * from emp;--NOT IN转换为NULL后的结查
--当列与Null进行比较运算时,就会产生未知的结果Unknown或False,使得整个查询条件都不成立,因此无法返回任何数据
SELECT empno, ename, job, salFROM empWHERE (job <> '职员')AND (job <> '分析人员')AND (job <> '销售人员')AND (job <> NULL);--LIKE查询语句使用示例
SELECT empno,ename,job,sal FROM emp WHERE ename LIKE '张%';    --更新ename
update emp set ename='张三疯6' where empno=7999;  --通配符_和%的使用示例
SELECT table_name AS 表名, status AS 状态FROM user_tablesWHERE table_name LIKE '_M%';--使用转义字符
SELECT table_name AS 表名, status AS 状态FROM user_tablesWHERE table_name LIKE '%\_%' ESCAPE '\';--使用IS NULL判断NULL值
SELECT empno,ename,sal FROM emp WHERE mgr IS NULL;--如果使用等于符号,则无法取回任何记录
SELECT empno,ename,sal FROM emp WHERE mgr= NULL;--9.1.8 And, or, not逻辑运算符
--使用AND操作符(全运算符)
SELECT empno,ename,sal,deptno FROM emp WHERE deptno=20 AND sal>3000;--使用OR操作符(半运算符)
SELECT empno,ename,sal,deptno FROM emp WHERE deptno=20 OR deptno=10;--使用NOT操作符(取反运算符)
SELECT empno, ename, sal, deptnoFROM empWHERE NOT (deptno = 20 OR deptno = 30);--运算符优先级
--算数运算符->连接运算符->比较运算符->null/like/in->between->not->and->or
SELECT empno, ename, sal, jobFROM empWHERE job = '经理'OR job = '分析人员'AND sal > 3000;--使用order by排序
--从低到高进行排序(升序排序)
SELECT empno,ename,sal FROM emp WHERE deptno=20 ORDER BY sal;--从高到低进行排序(降序排序)
SELECT empno,ename,sal FROM emp WHERE deptno=20 ORDER BY sal DESC;--按列别名进行排序
SELECT empno,ename,sal AS 工资 FROM emp WHERE deptno=20 ORDER BY 工资 DESC;--按选择列表的索引顺序进行排序
SELECT empno,ename,sal FROM emp WHERE deptno=20 ORDER BY 3 DESC;--多列排序示例(这个挺实用,而且Excel也是支持多列排序的)
SELECT empno, ename, sal, hiredateFROM empWHERE deptno = 20ORDER BY sal ASC, hiredate DESC, ename asc;--9.1.10 Rownum伪列
--伪列是指物理上并不存在的列,rownum伪列返回查询结果集的行号
--使用ROWNUM伪列
SELECT ROWNUM,empno,ename FROM emp WHERE deptno=20;--在伪列中应用了ORDER BY
SELECT ROWNUM, empno, ename, sal FROM emp WHERE deptno = 20 ORDER BY sal;--使用子查询实现ROWNUM列的按特定的字段进行排序(子查询就是强!)
SELECT ROWNUM, empno, ename, salFROM (SELECT empno, ename, sal FROM emp WHERE deptno = 20 ORDER BY sal);--查询员工表中的前5条记录
SELECT ROWNUM seq,empno,ename,sal FROM emp WHERE ROWNUM<=5;--区间查询的错误的用法
SELECT ROWNUM seq, empno, ename, salFROM empWHERE ROWNUM >= 2AND ROWNUM <= 5;--正确的ROWNUM区间查询的用法
SELECT seq, empno, ename, salFROM (SELECT ROWNUM seq, empno, ename, sal FROM emp)WHERE seq >= 2AND seq <= 5;--使用ROWID伪列
--Rowid伪列用来返回行的地址
SELECT ROWID, empno, ename FROM emp WHERE deptno = 20;--查询物理地址信息
SELECT ROWID,SUBSTR(ROWID, 1, 6) "对象编号",SUBSTR(ROWID, 7, 3) "数据文件编号",SUBSTR(ROWID, 10, 6) "数据块编号",SUBSTR(ROWID, 16, 3) "行号"from empWHERE deptno = 20;--使用DBMS_ROWID获取ROWID的详细信息
SELECT DBMS_ROWID.rowid_object (ROWID) object_id,DBMS_ROWID.rowid_relative_fno (ROWID) file_id,DBMS_ROWID.rowid_block_number (ROWID) block_id,DBMS_ROWID.rowid_row_number (ROWID) numFROM empWHERE ROWNUM < 5;--使用rowid信息关联dba_data_file(可使用dba权限运行)
--可通过记录查询记录所在文件的信息
SELECT *
FROM   dba_data_files
WHERE  file_id IN (SELECT DISTINCT DBMS_ROWID.rowid_relative_fno(ROWID) file_idFROM   scott.empWHERE  rownum < 5);--**************************************************************************
--使用ROWID的一个示例
--1.创建一个与emp表具有相同结构和相同数据的表emp_rowid,这种创建方式没有主键列
CREATE TABLE emp_rowid2 AS SELECT * FROM emp;
--2.向这个表中再次插入重复的记录
INSERT INTO emp_rowidSELECT * FROM emp WHERE deptno = 20;
--3.通过ROWID来查询重复的记录
SELECT empno,ename,sal,deptnoFROM emp_rowidWHERE ROWID NOT IN (SELECT MIN(ROWID) FROM emp_rowid GROUP BY empno);
--**************************************************************************

源码-Oracle数据库管理-第九章-SQL查询-Part 2(基本查询)相关推荐

  1. Oracle调用接口(OCI)源码剖析(2):执行SQL语句并获取结果

    概述 接着上一篇文章<Oracle调用接口(OCI)源码剖析(1):创建数据库连接>,我们继续对OCI中执行SQL语句并获取结果的源码进行剖析.该操作主要是由两个函数完成的:CDbExec ...

  2. 第九章 SQL查询数据库(二)

    文章目录 第九章 SQL查询数据库(二) 调用用户定义函数的查询 查询串行对象属性 查询集合 使用说明和限制 调用文本搜索的查询 伪字段 查询元数据 快速查询 查询和企业缓存协议Enterprise ...

  3. 第九章 SQL查询数据库(一)

    文章目录 第九章 SQL查询数据库 查询类型 使用SELECT语句 SELECT子句的执行顺序 选择字段 JOIN操作 选择大量字段的查询 定义和执行命名查询 创建查询和调用 类查询 第九章 SQL查 ...

  4. 第九章 SQL Server的简单应用

    第九章 SQL Server的简单应用 9.1 数据库的创建与管理 一.数据库的创建 CREATE DATABASE 教师库 --逻辑名 ON (NAME ='教师库_Data', --物理名 FIL ...

  5. 第九章 SQL聚合函数 MIN

    文章目录 第九章 SQL聚合函数 MIN 大纲 参数 描述 数据值 在当前事务期间所做的更改 示例 第九章 SQL聚合函数 MIN 返回指定列中的最小数据值的聚合函数. 大纲 MIN([ALL | D ...

  6. Netty源码分析第6章(解码器)----第4节: 分隔符解码器

    Netty源码分析第6章(解码器)---->第4节: 分隔符解码器 Netty源码分析第六章: 解码器 第四节: 分隔符解码器 基于分隔符解码器DelimiterBasedFrameDecode ...

  7. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用

    Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程   第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...

  8. Netty源码分析第7章(编码器和写数据)----第2节: MessageToByteEncoder

    Netty源码分析第7章(编码器和写数据)---->第2节: MessageToByteEncoder Netty源码分析第七章: Netty源码分析 第二节: MessageToByteEnc ...

  9. Netty源码分析第5章(ByteBuf)----第5节: directArena分配缓冲区概述

    Netty源码分析第5章(ByteBuf)---->第5节: directArena分配缓冲区概述 Netty源码分析第五章: ByteBuf 第五节: directArena分配缓冲区概述 上 ...

最新文章

  1. Pascal 错误代码及含义
  2. python async await报错_Python 3.7.7 发布 支持async并await现在为保留关键字
  3. 18.2 keepalived介绍
  4. Android学习笔记之自定义Toast
  5. 最新的 PageValidate 类
  6. python爬虫网络数据包_Python爬虫之多线程图虫网数据爬取(十六)
  7. 推荐一个 React 技术揭秘的项目,自顶向下的 React 源码分析
  8. android工作注意事项
  9. git: command not found
  10. LeetCode 2185. 统计包含给定前缀的字符串
  11. nginx缓存HtmL文件,Nginx在缓存的html文件上返回404
  12. Docker实战 (docker swarm的应用,docker集群的构建,在docker集群中部署服务)
  13. c语言和c 编程的区别吗,C语言和C有什么区别呀?
  14. 只安装oracle服务端连plsql,Oracle 不安装Oracle客户端,使用PLSQL连接Oracle服务器
  15. html音乐播放器如何添加暂停按钮,HotKey播放/暂停HTML5音乐播放器
  16. 【Proteus仿真8086】并行接口芯片8255
  17. vscode 不能运行h5c3代码_Golang安装与环境搭建并在VSCode里面输出HelloWord
  18. How to scale the BERT Training with Nvidia GPUs?
  19. 190314每日一句
  20. 什么可以代替pencil?pencil的平替推荐

热门文章

  1. java命令, 指定jdk启动方法
  2. 百胜软件:All in中台,助推零售行业数智化转型
  3. shell tr 替换 空格_SHELL脚本--tr命令用法和特性全解
  4. MySQL根据子节点id查询所有父节点
  5. 制作一款Arduino酒精检测仪的设计
  6. jQuery(三)HTML
  7. 递归老鼠出迷宫,猴子吃桃练习以及注意事项。
  8. 什么是注册表?注册表怎么打开?
  9. ZDHC认证是什么?
  10. td340服务器网页,thinkserver TD340服务器系统用户手册V1.0_5分享文库