【Oracle】数据库查询与SQL语句

Oracle查询

一、单表查询

1、简单条件查询
1)精确查询
SELECT* 
FROMT_OWNERS 
WHEREwatermeter = '30408'
2)模糊查询
SELECT* 
FROMt_owners 
WHEREname LIKE '%刘%'
3)and运算符
SELECT* 
FROMt_owners 
WHEREname LIKE '%刘%' AND housenumber LIKE '%5%'
4)or运算符
SELECT* 
FROMt_owners 
WHEREname LIKE '%刘%' OR housenumber LIKE '%5%'
5)范围查询
-- 运算符
SELECT* 
FROMT_ACCOUNT 
WHEREusenum >= 10000 AND usenum <= 20000-- between and
SELECT* 
FROMT_ACCOUNT 
WHEREusenum BETWEEN 10000 AND 20000
6)空值查询
-- is null
SELECT* 
FROMT_PRICETABLE t 
WHEREmaxnum IS NULL-- is not null
SELECT* 
FROMT_PRICETABLE t 
WHEREmaxnum IS NOT NULL
2、去掉重复记录
SELECT DISTINCT* 
FROMT_OWNERS
3、排序查询
1)升序排序
SELECT* 
FROMT_ACCOUNT 
ORDER BYusenum
2)降序排序
SELECT* 
FROMT_ACCOUNT 
ORDER BYusenum DESC
4、基于伪列的查询
1)ROWID

ROWID 伪列是该行的物理地址。使用 ROWID 可以快速的定位表中的某一行。ROWID 值可以唯一的 标识表中的一行。

SELECT ROWID,t.* 
FROMT_AREA t

可以通过指定 ROWID 来查询记录

SELECT ROWID,t.* 
FROMT_AREA t 
WHEREROWID = 'AAAM1uAAGAAAAD8AAC';
2)ROWNUM

ROWNUM 为结果集中每一行标识一个行号,第一行返回 1, 第二行返回 2…

SELECT ROWNUM,t.* 
FROMT_OWNERTYPE t

5、聚合统计
1)聚合函数
1. 求和 sum
SELECTsum( usenum ) 
FROMT_ACCOUNT 
WHEREyear = '2012'
2. 求平均 avg
SELECTavg( usenum ) 
FROMT_ACCOUNT 
WHEREyear = '2012'
3. 求最大值 max
SELECTmax( usenum ) 
FROMT_ACCOUNT 
WHEREyear = '2012'
4. 求最小值 min
SELECTcount( * ) 
FROMT_OWNERS t 
WHEREownertypeid =1
5. 统计记录个数 count
select count(*) from T_OWNERS t where ownertypeid=1
2)分组聚合 group by

select 后一定是分组聚合的条件或者是聚合函数

SELECTareaid,sum( money ) 
FROMt_account 
GROUP BYareaid
3)分组后条件查询 having
SELECTareaid,sum( money ) 
FROMt_account 
GROUP BYareaid 
HAVINGsum( money ) > 169000

二、连接查询

1、多表内连接查询
SELECTo.id 业主编号,o.name 业主名称,ot.name 业主类型 
FROMT_OWNERS o,T_OWNERTYPE ot 
WHEREo.ownertypeid = ot.id
SELECTo.id 业主编号,o.name 业主名称,ad.name 地址,ot.name 业主类型 
FROMT_OWNERS o,T_OWNERTYPE ot,T_ADDRESS ad 
WHEREo.ownertypeid = ot.id AND o.addressid = ad.id
2、左外连接查询
-- SQL1999
SELECTow.id,ow.name,ac.year,ac.month,ac.money 
FROMT_OWNERS owLEFT JOIN T_ACCOUNT ac ON ow.id = ac.owneruuid-- ORACLE
SELECTow.id,ow.name,ac.year,ac.month,ac.money 
FROMT_OWNERS ow,T_ACCOUNT ac 
WHEREow.id = ac.owneruuid ( + )

3、右外连接查询
-- SQL1999
SELECTow.id,ow.name,ac.year,ac.month,ac.money 
FROMT_OWNERS owRIGHT JOIN T_ACCOUNT ac ON ow.id = ac.owneruuid-- ORACLE
SELECTow.id,ow.name,ac.year,ac.month,ac.money 
FROMT_OWNERS ow,T_ACCOUNT ac 
WHEREow.id ( + ) = ac.owneruuid

三、子查询

1、where子句中的子查询
1)单行子查询
  • 子查询只返回一条记录
  • 单行操作符(=、>、<…)
SELECT* 
FROMT_ACCOUNT 
WHEREyear = '2012' AND month = '01' AND usenum > (SELECTavg( usenum ) FROMT_ACCOUNT WHEREyear = '2012' AND month = '01' )
2)多行子查询
  • 子查询返回了多条记录
  • 多行操作符(inanyall

in运算符

select * from T_OWNERS where addressid in ( 1,3,4 )
-- in
SELECT * 
FROM T_OWNERS 
WHERE addressid IN ( SELECT id FROM t_address WHERE name LIKE '%花园%' )-- not in             
SELECT * 
FROM T_OWNERS 
WHERE addressid NOT IN ( SELECT id FROM t_address WHERE name LIKE '%花园%' )
2、from子句中的子查询
SELECT* 
FROM(SELECTo.id 业主编号,o.name 业主名称,ot.name 业主类型 FROMT_OWNERS o,T_OWNERTYPE ot WHEREo.ownertypeid = ot.id ) 
WHERE业主类型= '居民'
3、select子句中的子查询

select 子句的子查询必须为单行子查询

SELECTid,name,( SELECT name FROM t_address WHERE id = addressid ) addressname 
FROMt_owners

四、简单分页查询

在 ORACLE 进行分页查询,需要用到伪列 ROWNUM 和嵌套查询

-- 前十条记录
SELECT ROWNUM,t.* 
FROMT_ACCOUNT t 
WHEREROWNUM <= 10
-- 11至20记录(错误写法)
-- 因为 rownum 是在查询语句扫描每条记录时产生的,所以不能使用"大于"符号
SELECT ROWNUM ,t.* 
FROMT_ACCOUNT t 
WHEREROWNUM > 10 AND ROWNUM <= 20
-- 11至20记录(正确写法)
-- 利用子查询
SELECT* 
FROM(SELECT ROWNUM r,t.* FROMT_ACCOUNT t WHEREROWNUM <= 20)
WHERE r > 10

五、单行函数

1、字符函数
1)求字符串长度 LENGTH

dual 伪表:为了补全语法而存在

select length('ABCD') from dual

2)求字符串的子串 SUBSTR
select substr('ABCD',2,2) from dual;

3)字符串拼接 CONCAT
select concat('ABC','D') from dual
select 'ABC'||'D' from dual;

2、数值函数
1)四舍五入函数 ROUND
select round(100.567) from dual

select round(100.567,2) from dual

2)截取函数 TRUNC
select trunc(100.567) from dual

select trunc(100.567,2) from dual

3)取模 MOD
select mod(10,3) from dual

3、日期函数
0)当前日期与时间 sysdate
select sysdate from dual

1)加月函数 ADD_MONTHS

在当前日期基础上加指定的月

select add_months(sysdate,2) from dual
2)求所在月最后一天 LAST_DAY
select last_day(sysdate) from duall
3)日期截取 TRUNC

2016/10/11为例

select TRUNC(sysdate) from dual

select TRUNC(sysdate,'yyyy') from dual

select TRUNC(sysdate,'mm') from dual

4、转换函数
1)数字转字符串 TO_CHAR
select TO_CHAR(1024) from dual
2)日期转字符串 TO_CHAR
select TO_CHAR(sysdate,'yyyy-mm-dd') from dualselect TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
3)字符串转日期 TO_DATE
select TO_DATE('2017-01-01','yyyy-mm-dd') from dual
4)字符串转数字 TO_NUMBER
select to_number('100') from dual
5、其它函数
1)空值处理函数 NVL

NVL(检测的值,如果为 null 的值)

select NVL(NULL,0) from dual
2)空值处理函数 NVL2

NVL2(检测的值,如果不为 null 的值,如果为 null 的值)

SELECTPRICE,MINNUM,NVL2( MAXNUM, to_char( MAXNUM ), '不限' ) 
FROMT_PRICETABLE 
WHEREOWNERTYPEID =1
3)条件取值 decode

根据条件返回相应值

decode(条件,1,翻译值1,2,翻译值2,...值n,翻译值n,[缺省值])
-- decode 语句实现
SELECTname,decode(ownertypeid,1, ' 居 民 ',2, ' 行 政 事 业 单 位 ',3, '商业' ) 类型 
FROMT_OWNERS
-- 也可以用 case when then 语句来实现
SELECTname,(CASE ownertypeid WHEN 1 THEN '居民' WHEN 2 THEN '行政事业单位' WHEN 3 THEN'商业' ELSE '其它' END ) 
FROMT_OWNERS
-- case when then 语句的另外一种写法
SELECTname,(CASE	WHEN ownertypeid = 1 THEN '居民' WHEN ownertypeid = 2 THEN '行政事业' WHEN ownertypeid = 3 THEN '商业' END )
FROMT_OWNERS

六、分析函数

1、RANK

相同的值排名相同,排名跳跃

SELECTrank ( ) over ( ORDER BY usenum DESC ),usenum 
FROMT_ACCOUNT

2、DENSE_RANK

相同的值排名相同,排名连续

SELECTdense_rank ( ) over ( ORDER BY usenum DESC ),usenum 
FROMT_ACCOUNT

3、ROW_NUMBER

返回连续的排名,无论值是否相等

SELECTrow_number ( ) over ( ORDER BY usenum DESC ),usenum 
FROMT_ACCOUNT

七、集合运算

1、并集运算

UNION ALL 不去掉重复记录

SELECT* 
FROMt_owners 
WHEREid <= 7 UNION ALL SELECT * FROM t_owners WHERE id >=5

UNION 去掉重复记录

SELECT* 
FROMt_owners 
WHEREid <= 7 UNION SELECT * FROM t_owners WHERE id >=5
2、交集运算
SELECT* 
FROMt_owners 
WHEREid <= 7 INTERSECT SELECT * FROM t_owners WHERE id >=5
3、差集运算
SELECT* 
FROMt_owners 
WHEREid <= 7 MINUS SELECT * FROM t_owners WHERE id >=5

可以用 minus 运算符来实现分页

SELECT ROWNUM,t.* 
FROMT_ACCOUNT t 
WHEREROWNUM <= 20 
MINUS
SELECT ROWNUM,t.* 
FROMT_ACCOUNT t 
WHEREROWNUM <= 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML--文本

文本一般存在于 body下 段落标签&#xff1a;<p> </p> 换行标签&#xff1a;<br/> 放在一句话里可以换行 <p>这是一段话<br/>这是另一段话</p>文本标签分以下几种&#xff1a; 粗体标签&#xff1a;strong&#xff0c;b 斜体标签&#xf…

VUE+bpmn.js实现工作流

1、安装bpmn.js npm install bpmn-js7.3.1 // 我安装的版本是7.3.1npm install bpmn-js-properties-panel0.37.2npm install bpmn-moddle7.1.3 npm install --save camunda-bpmn-moddle 2、配置axios&#xff0c;在main.js中引入axios import axios from axiosVue.proto…

小汪,TCP连接和断连夺命6连问你可能扛得住?

目录 TCP三次握手连接和四次挥手断连的几处疑问 一、建立连接&#xff0c;为什么是三次握手&#xff0c;而不是二次握手&#xff1f; 二、为什么每次建立 TCP 连接时&#xff0c;初始化的序列号都要求不一样呢&#xff1f; 三、断开连接&#xff0c;为什么是四次握手&#x…

机器学习激活函数

激活函数 激活函数是人工神经网络中的一个重要组成部分。它们用于向神经网络中添加非线性因素&#xff0c;使得网络能够解决复杂问题&#xff0c;如图像识别、语言处理等。激活函数的作用是决定一个神经元是否应该被激活&#xff0c;也就是说&#xff0c;它帮助决定神经元的输…

科技顶天,市场立地 。璞华科技“顶天立地”的成长之路

科技顶天&#xff0c;市场立地。 几十年来&#xff0c;我们越来越深刻地认识到&#xff0c;这就是真理&#xff0c;质朴而深刻。尤其在当前特殊的国际国内商业环境中&#xff0c;这一理念不但没有过时&#xff0c;反而恰逢其时。有这么一家企业&#xff0c;一直践行“科技顶天…

使用阿里云镜像创建一个Spring Boot项目

由于现在的idea在创建项目时已经不支持Java8版本了&#xff0c;如果我们还想用8版本&#xff0c;可以使用阿里云镜像创建。所以得改变原有的地址为&#xff1a;https://start.aliyun.com springboot版本选择2开头的任意版本的。 1.配置6个依赖 2.改变下载依赖地址 下载依赖默认…

Proteus仿真stm32f103r6输出PWM/正弦波

资料下载地址&#xff1a;Proteus仿真stm32f103r6输出PWM/正弦波 一、仿真图 Proteus仿真stm32f103r6输出PWM/正弦波 二、程序 #include "pbdata.h"u16 fre; void RCC_Configuration(void); void GPIO_Configuration(void); void TIM3_Configuration();void Dela…

动物脚掌“温度升降”体验:ZL-021大小鼠冷热板测痛仪

ZL-021大小鼠冷热板测痛仪用于评估动物对疼痛的敏感度。通过将小鼠或大鼠放置在温度可调的热板上&#xff0c;记录它们在板上停留的时间来评估它们对不同温度刺激的反应。 优点说明&#xff1a;设备能够明确指示组织损伤情况&#xff0c;同时对动物影响较小&#xff0c;可以反…

学生评教,问卷调查表评价教师统计,python+pandas处理数据

先上一个结果表格 几个关键步骤 1、问卷网站上设置相关题目&#xff0c;条目&#xff0c;最好用评分题目&#xff08;点击文本选项&#xff0c;但是保存下来的是分值&#xff09;&#xff0c;如图 2、pandas清洗数据&#xff0c;包括unstack&#xff0c;其目的是把所有学生得…

快速了解VR全景拍摄技术运用在旅游景区的优势

豆腐脑加了糖、烤红薯加了勺&#xff0c;就连索菲亚大教堂前都有了“人造月亮”&#xff0c;在这个冬季&#xff0c;“尔滨”把各地游客宠上了天。面对更多的游客无法实地游玩&#xff0c;哈尔滨冰雪世界再添新玩法&#xff0c;借助VR全景拍摄技术对冬季经典冰雪体验项目进行全…

什么是Modbus协议?

Modbus协议是一种在工业自动化领域广泛应用的通信协议&#xff0c;它允许不同设备之间进行可靠的数据交换和控制。该协议最初由Modicon公司于1979年创建&#xff0c;旨在提供一种简单而有效的方法&#xff0c;使PLC&#xff08;可编程逻辑控制器&#xff09;和其他自动化设备能…

AI老照片修复-Bringing-Old-Photos-Back-to-Life

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. AI老照片修复原理-…

修改idea或者pycharm或者android studio的快捷键,快速跳转到行尾

ctrl enter这个快捷键是idea默认配置的&#xff0c;就是将光标所在的行切一刀&#xff0c;并且换到下一行。但是在我的开发习惯里面不怎么使用ctrl enter这个快捷键&#xff0c; 反而开发java或者flutter软件需要快速跳转到行尾添加分号 ; &#xff0c;但是使用end键脱离了我…

ARM 寄存器

文章目录 ARM 寄存器介绍一、未分组寄存器 R0~R7二、分组寄存器 R8~R14三、程序计数寄存器 R15&#xff08;PC&#xff09;四、当前程序状态寄存器 R16&#xff08;CPSR&#xff09;管理模式&#xff08;SVC&#xff09;用户模式&#xff08;USR&#xff09; 汇编里的寄存器名称…

YOLOv8-Seg改进:轻量化改进 | MobileNetV3,轻量级骨架首选

🚀🚀🚀本文改进:MobileNetV3的创新点包括:使用自适应瓶颈宽度、借鉴SENet中的Squeeze-and-Excitation机制、引入h-swish激活函数等。 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教…

JVM 元空间、java中的元空间

JVM 元空间 元空间 元空间 原空间&#xff08;Meta Space&#xff09; ​ 用于存放类信息、常量、静态变量、JIT即时编译器百年以后的机器代码等数据等。例如&#xff1a;java.lang.Object类的元信息、Integer.MAX_VALUE等常量。 JDK1.6 HotSpot JVM 使用Method Area方法区存…

植物大战僵尸-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;植物大战僵尸 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 语言项目&#xff1a;完整版植物大战僵尸&#xff01;可能是B站最好的植物大战僵尸教程了&…

Jenkins基础篇--凭据(Credential)管理

什么是凭据 Jenkins的Credentials直译为证书、文凭&#xff0c;我们可以理解为它是钥匙&#xff0c;用来做某些事情的认证。 如Jenkins 和 GitLab交互时&#xff0c;需要添加GitLab的API令牌和登录凭证。 如Jenkins 添加从节点时&#xff0c;需要添加从节点的登录凭证或者Je…

Jenkins基础篇--添加用户和用户权限设置

添加用户 点击系统管理&#xff0c;点击管理用户&#xff0c;然后点击创建用户&#xff08;Create User&#xff09; 用户权限管理 点击系统管理&#xff0c;点击全局安全配置&#xff0c;找到授权策略&#xff0c;选择安全矩阵&#xff0c;配置好用户权限后&#xff0c;点击…

Redis内存分析工具

Redis内存分析工具RDR 了解一下RDR的优势 1&#xff0c;首先RDR工具是图形化界面&#xff0c;能非常直观的就能看到内存主键分布 2&#xff0c;可以快速分析 Redis 内存中那个 Key 值占用的内存最大 启动 ./rdr-linux show -p 8080 /usr/local/redis-5.0.3/data/dump.rdb st…