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

Oracle查询

一、单表查询

1、简单条件查询
1)精确查询
SELECT
	* 
FROM
	T_OWNERS 
WHERE
	watermeter = '30408'
2)模糊查询
SELECT
	* 
FROM
	t_owners 
WHERE
	name LIKE '%刘%'
3)and运算符
SELECT
	* 
FROM
	t_owners 
WHERE
	name LIKE '%刘%' 
	AND housenumber LIKE '%5%'
4)or运算符
SELECT
	* 
FROM
	t_owners 
WHERE
	name LIKE '%刘%' 
	OR housenumber LIKE '%5%'
5)范围查询
-- 运算符
SELECT
	* 
FROM
	T_ACCOUNT 
WHERE
	usenum >= 10000 
	AND usenum <= 20000

-- between and
SELECT
	* 
FROM
	T_ACCOUNT 
WHERE
	usenum BETWEEN 10000 
	AND 20000
6)空值查询
-- is null
SELECT
	* 
FROM
	T_PRICETABLE t 
WHERE
	maxnum IS NULL

-- is not null
SELECT
	* 
FROM
	T_PRICETABLE t 
WHERE
	maxnum IS NOT NULL
2、去掉重复记录
SELECT DISTINCT
	* 
FROM
	T_OWNERS
3、排序查询
1)升序排序
SELECT
	* 
FROM
	T_ACCOUNT 
ORDER BY
	usenum
2)降序排序
SELECT
	* 
FROM
	T_ACCOUNT 
ORDER BY
	usenum DESC
4、基于伪列的查询
1)ROWID

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

SELECT 
	ROWID,
	t.* 
FROM
	T_AREA t

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

SELECT 
	ROWID,
	t.* 
FROM
	T_AREA t 
WHERE
	ROWID = 'AAAM1uAAGAAAAD8AAC';
2)ROWNUM

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

SELECT 
	ROWNUM,
	t.* 
FROM
	T_OWNERTYPE t

5、聚合统计
1)聚合函数
1. 求和 sum
SELECT
	sum( usenum ) 
FROM
	T_ACCOUNT 
WHERE
	year = '2012'
2. 求平均 avg
SELECT
	avg( usenum ) 
FROM
	T_ACCOUNT 
WHERE
	year = '2012'
3. 求最大值 max
SELECT
	max( usenum ) 
FROM
	T_ACCOUNT 
WHERE
	year = '2012'
4. 求最小值 min
SELECT
	count( * ) 
FROM
	T_OWNERS t 
WHERE
	ownertypeid =1
5. 统计记录个数 count
select count(*) from T_OWNERS t where ownertypeid=1
2)分组聚合 group by

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

SELECT
	areaid,
	sum( money ) 
FROM
	t_account 
GROUP BY
	areaid
3)分组后条件查询 having
SELECT
	areaid,
	sum( money ) 
FROM
	t_account 
GROUP BY
	areaid 
HAVING
	sum( money ) > 169000

二、连接查询

1、多表内连接查询
SELECT
	o.id 业主编号,
	o.name 业主名称,
	ot.name 业主类型 
FROM
	T_OWNERS o,
	T_OWNERTYPE ot 
WHERE
	o.ownertypeid = ot.id
SELECT
	o.id 业主编号,
	o.name 业主名称,
	ad.name 地址,
	ot.name 业主类型 
FROM
	T_OWNERS o,
	T_OWNERTYPE ot,
	T_ADDRESS ad 
WHERE
	o.ownertypeid = ot.id 
	AND o.addressid = ad.id
2、左外连接查询
-- SQL1999
SELECT
	ow.id,
	ow.name,
	ac.year,
	ac.month,
	ac.money 
FROM
	T_OWNERS ow
	LEFT JOIN T_ACCOUNT ac ON ow.id = ac.owneruuid

-- ORACLE
SELECT
	ow.id,
	ow.name,
	ac.year,
	ac.month,
	ac.money 
FROM
	T_OWNERS ow,
	T_ACCOUNT ac 
WHERE
	ow.id = ac.owneruuid ( + )

3、右外连接查询
-- SQL1999
SELECT
	ow.id,
	ow.name,
	ac.year,
	ac.month,
	ac.money 
FROM
	T_OWNERS ow
	RIGHT JOIN T_ACCOUNT ac ON ow.id = ac.owneruuid

-- ORACLE
SELECT
	ow.id,
	ow.name,
	ac.year,
	ac.month,
	ac.money 
FROM
	T_OWNERS ow,
	T_ACCOUNT ac 
WHERE
	ow.id ( + ) = ac.owneruuid

三、子查询

1、where子句中的子查询
1)单行子查询
  • 子查询只返回一条记录
  • 单行操作符(=、>、<…)
SELECT
	* 
FROM
	T_ACCOUNT 
WHERE
	year = '2012' 
	AND month = '01' 
	AND usenum > (
	SELECT
		avg( usenum ) 
	FROM
		T_ACCOUNT 
	WHERE
		year = '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
	(
	SELECT
		o.id 业主编号,
		o.name 业主名称,
		ot.name 业主类型 
	FROM
		T_OWNERS o,
		T_OWNERTYPE ot 
	WHERE
		o.ownertypeid = ot.id 
	) 
WHERE
	业主类型= '居民'
3、select子句中的子查询

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

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

四、简单分页查询

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

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

select 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 的值)

SELECT
	PRICE,
	MINNUM,
	NVL2( MAXNUM, to_char( MAXNUM ), '不限' ) 
FROM
	T_PRICETABLE 
WHERE
	OWNERTYPEID =1
3)条件取值 decode

根据条件返回相应值

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

六、分析函数

1、RANK

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

SELECT
	rank ( ) over ( ORDER BY usenum DESC ),
	usenum 
FROM
	T_ACCOUNT

2、DENSE_RANK

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

SELECT
	dense_rank ( ) over ( ORDER BY usenum DESC ),
	usenum 
FROM
	T_ACCOUNT

3、ROW_NUMBER

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

SELECT
	row_number ( ) over ( ORDER BY usenum DESC ),
	usenum 
FROM
	T_ACCOUNT

七、集合运算

1、并集运算

UNION ALL 不去掉重复记录

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

UNION 去掉重复记录

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

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

SELECT ROWNUM
	,
	t.* 
FROM
	T_ACCOUNT t 
WHERE
	ROWNUM <= 20 
MINUS
SELECT ROWNUM
	,
	t.* 
FROM
	T_ACCOUNT t 
WHERE
	ROWNUM <= 10

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

梦想贩卖机升级版知识付费源码,包含前后端源码,非线传,修复最新登录接口问题

梦想贩卖机升级版&#xff0c;变现宝吸收了资源变现类产品的许多优势&#xff0c;并剔除了那些无关紧要的元素&#xff0c;使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持&#xff1a;视频、音频、图文、文档、会员、社群、用…

【android】rk3588-android-bt

文章目录 蓝牙框架HCI接口蓝牙VENDORLIBvendorlib是什么 代码层面解读vendorlib1、 vendorlib实现&#xff0c;协议栈调用2、协议栈实现&#xff0c;vendorlib调用&#xff08;回调函数&#xff09;2.1、 init函数2.2、BT_VND_OP_POWER_CTRL对应处理2.3、BT_VND_OP_USERIAL_OPE…

基于 NFS 的文件共享实现

NFS&#xff08;Network File System&#xff09;即网络文件系统&#xff0c;它允许网络中的计算机之间通过 TCP/IP 网络共享文件资源&#xff0c;服务端通过 NFS 共享文件目录&#xff0c;客户端将该文件目录挂载在本地文件系统中&#xff0c;就可以像操作本地文件一样读写服务…

【AI视野·今日Robot 机器人论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 8 Jan 2024 Totally 13 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Deep Reinforcement Learning for Local Path Following of an Autonomous Formula SAE Vehicle Authors Harvey Merton, Thoma…

wav2lip中文语音驱动人脸训练

1 Wav2Lip介绍 1.1 Wav2Lip概述 2020年&#xff0c;来自印度海德拉巴大学和英国巴斯大学的团队&#xff0c;在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》&#xff0c;在文章中&#xff0c;他们提出一个叫做…

ChatGPT可以帮你做什么?

学习 利用ChatGPT学习有很多&#xff0c;比如&#xff1a;语言学习、编程学习、论文学习拆解、推荐学习资源等&#xff0c;使用方法大同小异&#xff0c;这里以语言学习为例。 在开始前先给GPT充分的信息&#xff1a;&#xff08;举例&#xff09; 【角色】充当一名有丰富经验…

vue3、vue2文件导入事件

一、vue3写法 1、html部分 <el-buttontype"info"plainicon"Upload"click"handleImport"v-hasPermi"[system:user:import]">导入</el-button><!-- 导入对话框 --><el-dialog :title"upload.title" v-…

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 &#xff08;1&#xff09;主机 …

【漏洞复现】先锋WEB燃气收费系统文件上传漏洞 1day

漏洞描述 /AjaxService/Upload.aspx 存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作…

ubuntu20固定串口名称

查看串口的详细信息 udevadm info --name/dev/ttyUSB0结果&#xff1a; P: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 N: ttyUSB0 L: 0 S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UAR…

Arrow:在项目中进行时间处理的强大工具

目录 一、Arrow简介 二、安装与配置 三、基础功能与使用 1. 日期和时间格式转换 2. 时区处理 3. 时间序列分析 四、进阶应用与案例分析 五、性能与优化 六、最佳实践与经验分享 七、总结与展望 在处理日期和时间时&#xff0c;我们经常需要一个精确、可靠的库来帮助我…

FinClip SaaS 平台——小程序转APP操作指南及其实现

目录 前言 优势 操作指南 IDE生成APP 打开导出目录查看APP 使用AS打开导出的项目 Application初始化sdk MainActivity启动小程序并finish掉当前页面 &#xff0c;可查看前面文章进行操作&#xff0c;本文介绍FinClip SaaS 平台推出的新功能 生成APP 前言 通过这个「生…

pytorch11:模型加载与保存、finetune迁移训练

目录 一、模型加载与保存1.1 序列化与反序列化概念1.2 pytorch中的序列化与反序列化1.3 模型保存的两种方法1.4 模型加载两种方法 二、断点训练2.1 断点保存代码2.2 断点恢复代码 三、finetune3.1 迁移学习3.2 模型的迁移学习3.2 模型微调步骤3.2.1 模型微调步骤3.2.2 模型微调…

计算机毕业设计 基于SpringBoot的物资综合管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

mysql原理--redo日志2

1.redo日志文件 1.1.redo日志刷盘时机 我们前边说 mtr 运行过程中产生的一组 redo 日志在 mtr 结束时会被复制到 log buffer 中&#xff0c;可是这些日志总在内存里呆着也不是个办法&#xff0c;在一些情况下它们会被刷新到磁盘里&#xff0c;比如&#xff1a; (1). log buffer…

ROS2——常见的指令

在使用source ∼/bookros_ws/install/setup.bash后&#xff0c;可以让ROS2找到这个工作空间&#xff0c;进而可以调用相关的命令 概述 ros2 <command> <verb> [<params>|<option>]*这是ROS2与系统交互的方式 在终端输入ros2&#xff0c;即可查看相关…

YOLOv5改进 | 检测头篇 | ASFFHead自适应空间特征融合检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv5的检测头形成新的检测头Detect_ASFF,其主要创新是引入了一种自适应的空间特征融合方式,有效地过滤掉冲突信息,从而增强了尺度不变性。经过我的实验验证,修改后的检测头在所有的检测目标上均有大幅度的涨点效果,…

065:vue中将一维对象数组转换为二维对象数组

第065个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

Sqoop入门指南:安装和配置

Sqoop是一个强大的工具&#xff0c;用于在Hadoop和关系型数据库之间高效传输数据。在本篇文章中&#xff0c;将深入探讨如何安装和配置Sqoop&#xff0c;以及提供详细的示例代码。 安装Java和Hadoop 在开始安装Sqoop之前&#xff0c;首先确保已经成功安装了Java和Hadoop。Sqo…

第十四章JSON

第十四章JSON 1.什么是JSON2.JSON的定义和访问3.JSON在JavaScript中两种常用的转换方式4.JavaBean和JSON的相互转换5.List集合和JSON的相互转换6.map集合和JSON的相互转换 1.什么是JSON 2.JSON的定义和访问 JSON的定义 JSON的类型是一个Object类型 JSON的访问 我们要…