Oracal学习

news2024/11/16 13:43:58

Oracle是什么

是甲骨文公司的一款支持事务且吞吐量高的数据库

特点:
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性

Oracal数据类型及语句

Oracal数据类型

1.字符型

1.1CHAR:固定长度的字符类型,最多存储2000个字节
1.2VARVCHAR2:可变长度的字符类型,最多4000个字节
1.3LONG:打文本类型,最大可存储2个G

2.数值型

NUMBER:数值类型
例如:NUMBER(5) 最大可以存的数为99999
NUMBER(5,2) 最大可以存的数为999.99–(5为总位数)

3.日期型

3.1DATE:日期时间型,精确到秒
3.2TIMESTAMP:精确到秒的小数点后9位

4.二进制(大数据类型)

4.1CLOB:存储字符,最大4G
4.2BLOB:存储图像、声音、视频等二进制数据,最多4个G

Oracal语句(语句基本=MYSQL)

建表

CREATE TABLE 表名 (
    列名1 数据类型(长度) [约束条件],
    列名2 数据类型(长度) [约束条件],
    ...
    列名n 数据类型(长度) [约束条件],

    PRIMARY KEY (主键列名),
    FOREIGN KEY (外键列名) REFERENCES 外部表名(外部键列名),
    
    UNIQUE (唯一索引列名),
    CHECK (列名 BETWEEN 值1 AND 值2), -- 或其他检查条件
    INDEX 索引名 ON (列名)
);

-- 示例:
CREATE TABLE Employees (
    EmployeeID NUMBER(6) PRIMARY KEY,
    FirstName VARCHAR2(50),
    LastName VARCHAR2(50),
    HireDate DATE NOT NULL,
    Salary NUMBER(8, 2) CHECK (Salary > 0),
    DepartmentID NUMBER(3),
    CONSTRAINT FK_Department FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
NUMBER(p, s):指定数字类型的精度(p)和小数位数(s),如NUMBER(6)表示整数,NUMBER(8, 2)表示最多有两位小数的数值。
VARCHAR2(length):变长字符串类型,最大长度由括号内的数字决定。
DATE:日期时间类型。
PRIMARY KEY:定义主键约束,确保字段值唯一且非空。
FOREIGN KEY:定义外键约束,关联到另一个表的主键。
CHECK:定义检查约束,限制列值满足特定条件。
UNIQUE:定义唯一性约束,保证该列所有行的值都是唯一的。
INDEX:创建一个索引,提高查询性能。不过,在创建表时直接定义索引并不常见,通常在建表后单独创建。

复制表

-- 完全复制表结构及数据
CREATE TABLE new_table_name AS
SELECT * FROM old_table_name;

-- 只复制表结构(不包含数据)
CREATE TABLE new_table_name AS
SELECT * FROM old_table_name
WHERE 1 = 2; -- 这里添加一个永远不满足的条件,确保不会复制任何数据

-- 复制部分列并复制数据
CREATE TABLE new_table_name AS
SELECT column1, column2, column3 FROM old_table_name;

删除表

方式一:drop table 表名;
方式二:truncate table 表名;

在Oracle 中 ,双引号主要是别名的时候使用, 单引号是使用的值, 是字符

oracle函数

oracle的空值处理(类似于mysql的ifnull)

nvl(参数1,参数2):如果1为null,则返回2,不为null就为1

nvl2(参数1, 参数2, 参数3)1为null,则返回,3,不为null,则返回2

decode(需要判断的字段,
​ 常量值1, 结果值1,
​ 常量值2, 结果值2,
​ …
​ 常量值n, 结果值n,
​ 默认结果值
​ )

select e.ename 姓名,
       e.sal 底薪,
       e.comm 奖金,
       nvl(e.sal+e.comm, e.sal) 实发1,
       nvl2(e.comm, e.sal+e.comm, e.sal) 实发2,
       decode(e.comm, null, e.sal, e.sal+e.comm) 实发3
from emp e;

nvl(mysql的ifnull)

nvl(参数1,参数2):如果1为null,则返回2,不为null就为1

nvl2(mysql的if)

nvl2(参数1, 参数2, 参数3)1为null,则返回,3,不为null,则返回2

decode(没合适的试下这个)

···Oracle的DECODE函数是一个条件表达式函数,它在SQL查询中用于基于某个字段或表达式的值返回不同的结果。下面通过几个例子来说明如何使用DECODE函数:

示例1:简单条件判断

假设我们有一个员工表EMPLOYEES,其中包含一个字段SALARY_GRADE表示工资等级(例如,0代表初级,1代表中级,2代表高级),我们想在查询结果中显示对应的等级名称而不是数字。

SELECT 
    employee_name,
    DECODE(salary_grade, 0, '初级', 1, '中级', 2, '高级') AS salary_level
FROM 
    EMPLOYEES;

在这个例子中,DECODE(salary_grade, 0, '初级', 1, '中级', 2, '高级')的工作原理是:

  • 如果 salary_grade 的值等于0,则返回字符串 '初级';
  • 如果 salary_grade 的值等于1,则返回 '中级';
  • 如果 salary_grade 的值等于2,则返回 '高级';
  • 若 salary_grade 不等于上述任何一个值,则默认返回 NULL(如果没有指定默认值)。
示例2:带有默认值的情况

如果我们还想为未列出的其他所有等级提供一个默认等级名称“未知”,可以这样写:

SELECT 
    employee_name,
        DECODE(salary_grade, 0, '初级', 1, '中级', 2, '高级', '未知') AS salary_level
FROM 
    EMPLOYEES;

在这里,最后的一个参数 '未知' 就是当 salary_grade 不匹配前面任何条件时返回的默认值。

示例3:嵌套使用

更复杂的场景下,可能需要多个条件和嵌套的DECODE函数,例如:

Sql
SELECT 
    employee_name,
    DECODE(
        department_id,
        10, DECODE(job_title, 'Manager', '部门经理', 'Employee'),
        20, DECODE(job_title, 'Engineer', '工程师'),
        '未知职位'
    ) AS position
FROM 
    EMPLOYEES;

这个例子中,首先根据 department_id 进行判断:

  • 如果 department_id 是10,并且 job_title 是 'Manager',则返回 '部门经理';
  • 否则,如果 department_id 是10且 job_title 不是 'Manager',则返回 'Employee';
  • 如果 department_id 是20并且 job_title 是 'Engineer',则返回 '工程师';
  • 对于所有其他情况,返回 '未知职位'。

示例4:达到nvl2效果的写法
decode ((SELECT 1
            FROM CM_MATERIAL b
            WHERE a.site_code = b.site_code
            AND b.CUSTOM_ATTRIBUTE = 'CELL'
            AND f.PART_MATERIAL_CODE = b.material_code), null,'','BatteryCell') as temp

  如果SELECT 1...
  这坨返回null,则temp显示为 ''
  这坨返回不为null,则temp显示为 BatteryCell

字符串拼接 ||

1. Oracle 特有的连接符: || 拼接

select 'SN:' ||  ppk.SN_CODE "字符串拼接后别名"
from PP_KEY_PART_BYTE ppk

2. concat(str1,str2) 函数, 在mysql和Oracle中都有

select concat('SN:',ppk.SN_CODE) "函数拼接字符串后别名"
from PP_KEY_PART_BYTE ppk;

在Oracle SQL中,ESCAPE 关键字通常与 LIKE 或 REGEXP_LIKE 这样的字符串匹配函数一起使用,用于指定通配符的转义字符。当你的搜索模式中包含特殊字符(如 %、_ 等)并且你想让这些字符按照字面意义进行匹配时,就需要使用转义字符。

示例1:LIKE 语句中的 ESCAPE

假设我们有一个名为 PRODUCTS 的表,其中有一个 DESCRIPTION 字段,现在要查找描述中包含 % 字符的产品:

Sql
SELECT * FROM PRODUCTS
WHERE DESCRIPTION LIKE '%\%%' ESCAPE '\';
在这个例子中,ESCAPE '\' 指定了反斜杠 \ 作为转义字符。因此,'\%' 在查询中表示的是一个字面上的 % 而不是一个通配符。这个查询将返回所有描述字段中包含 % 字符的产品记录。

排序时控制null的显示位置

···在Oracle SQL中,当进行排序时,默认情况下NULL值的处理可能因数据库版本和排序方式(升序或降序)而有所不同。但你可以通过NULLS FIRST 或 NULLS LAST 来明确指定NULL值在排序结果中的位置。

例如,在一个名为 EMPLOYEES 的表中,假设有一个字段 BONUS 可能包含NULL值,我们想要按照 BONUS 进行排序,并控制NULL值的位置:

  1. 将NULL值放在最后(默认在某些情况下的升序排序行为):
Sql
1SELECT *
2FROM EMPLOYEES
3ORDER BY BONUS ASC NULLS LAST;
  1. 将NULL值放在最前(对于降序排序,这是默认行为;对于升序排序,需要明确指定):
Sql
1SELECT *
2FROM EMPLOYEES
3ORDER BY BONUS DESC; -- 在降序排序下,NULL值默认显示在前面
4
5-- 如果你希望在升序排序时NULL值也显示在前面,则这样写:
6SELECT *
7FROM EMPLOYEES
8ORDER BY BONUS ASC NULLS FIRST;

给数据排名(dense_rank,rank)

dense_rank(并列不累加排名)

如果有多个第一名,则他们都是第一名

第二名显示的排名仍然是2

rank(并列累加排名)

row_number(不并列排名)

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

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

相关文章

WEB安全渗透测试-pikachuDVWAsqli-labsupload-labsxss-labs靶场搭建(超详细)

目录 phpstudy下载安装 一,pikachu靶场搭建 1.下载pikachu 2.新建一个名为pikachu的数据库 3.pikachu数据库配置 ​编辑 4.创建网站 ​编辑 5.打开网站 6.初始化安装 二,DVWA靶场搭建 1.下载DVWA 2.创建一个名为dvwa的数据库 3.DVWA数据库配…

对接钉钉机器人发送钉钉通知

实现效果 话不多说 直接上代码 static void sendMsg(String msg) {try {String content "{\"msgtype\": \"text\",\"text\": {\"content\": \"" msg "\"}}";HttpUtil.simplePost(content, getDingU…

第3章 接口和API设计

第15条:用前缀避免命名空间冲突 OC没有其他语言那种内置的命名空间机制。因此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了。若是发生重名冲突,那么应用程序相应的链接过程就会出错。例如: 错误原因在…

【并发编程】Java内存模型

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 这一章进一步深入学习共享变量在多线程间的【可见性】问题,与多条指令执行时的【有序性】问题 Java内存模型 JMM即Java Memory Mod…

STM32实现软件IIC协议操作OLED显示屏(1)

时间记录:2024/1/25 一、IIC协议介绍 (1)协议介绍 IIC(又称I2C,Inter-Integrated Circuit),即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发,用…

MSG3D论文解读

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法: 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积: 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

喜报|「云原生数据库PolarDB」、「阿里云瑶池一站式数据管理平台」揽获“2023技术卓越奖”

日前,国内知名IT垂直媒体&技术社区IT168公布2023年“技术卓越奖”评选结果,经由行业CIO/CTO大咖、技术专家及IT媒体三方的联合严格评审,阿里云瑶池数据库揽获两项大奖:云原生数据库PolarDB荣获“2023年度技术卓越奖”&#xf…

GraphQL的力量:简化复杂数据查询

1. GraphQL GraphQL 是一种由 Facebook 开发并于 2015 年公开发布的数据查询和操作语言,也是运行在服务端的运行时(runtime)用于处理 API 查询的一种规范。不同于传统的 REST API,GraphQL 允许客户端明确指定它们需要哪些数据&am…

.net访问oracle数据库性能问题

问题: 生产环境相同的inser语句在别的非.NET程序相应明显快于.NET程序,执行时间相差比较大,影响正常业务运行,测试环境反而正常。 问题详细诊断过程 问题初步判断诊断过程: 查询插入慢的sql_id 检查对应的执行计划…

Storm

1.1. 概念 Storm 是一个免费并开源的分布式实时计算系统。利用 Storm 可以很容易做到可靠地处理无限的 数据流,像 Hadoop 批量处理大数据一样,Storm 可以实时处理数据。 1.2. 集群架构 1.2.1 Nimbus(master-代码分发给 Supervisor&#xf…

VS Code使用Git管理开发项目流程

以VSCode远程连接虚拟机开发为例,已经配置好SSH 在Github上搜索心仪的项目,比如权限管理 点击fork到自己账户仓库 虚拟机下创建一个目录 1)mkdir java_test 2)切换到java_test 初始化并克隆项目 1) git init:初始化仓库 2) g…

数字孪生系统的难点

数字孪生系统的开发和实施涉及一些技术难点,这些难点需要综合应用多个领域的知识和技术来克服。以下是一些数字孪生系统开发中的技术难点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1…

Conda 使用environment.yml创建一个新的Python项目

Conda系列: 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

电子行业含砷废水,深度除砷技术

砷是一种类金属元素,砷化物生物毒性极强,是国际公认的第一类致癌物。因此,这些含砷废水必须经过一定的处理才能排放到环境中。那么,哪些行业会产生含砷废水呢?在地球上,砷是一种常见的元素。在自然界中,砷…

程序执行原理揭秘:你的代码是如何“跑”起来的?

程序执行原理揭秘:你的代码是如何“跑”起来的? 一、执行前的准备工作 我们先来看一下程序执行前需要做哪些准备工作。 我们首先需要了解程序的格式。你可以把程序比作一本书,而程序的格式就是这本书的版式,它决定了书的结构和…

【Python-PyCharm】PyCharm 安装并创建项目(保姆级教程)

【Python-PyCharm】PyCharm 安装并创建项目(保姆级教程) 1)PyCharm 下载2)PyCharm 安装3)创建项目(使用PyCharm编写程序) 使用 PyCharm 需要配置 Python 环境变量,详情如下&#xff…

使用DBSyncer同步Oracle11g数据到Mysql5.7中_实现全量数据同步和增量数据实时同步_操作过程---数据同步之DBSyncer工作笔记007

之前都是用mysql和Postgresql之间进行同步的,已经实现了数据的实时同步,现在要实现Oracle数据库到Mysql数据库的全量,以及增量同步. 因为之前配置的不对,这里架构名写成了orcl,所以导致,虽然能连接上,但是,在进行数据同步的时候,看不到表,所以这里说一下如何进行连接 这里,首先…

力扣80、删除有序数组中的重复项Ⅱ(中等)

1 题目描述 图1 题目描述 2 题目解读 对于有序数组nums,要求在不使用额外数组空间的条件下,删除数组nums中重复出现的元素,使得nums中出现次数超过两次的元素只出现两次。返回删除后数组的新长度。 3 解法一:双指针 双指针法可以…

分享7种SQL的进阶用法

分享7种SQL的进阶用法 前言 还只会使用SQL进行简单的insert、update、detele吗?本文给大家带来7种SQL的进阶用法,让大家在平常工作中使用SQL简化复杂的代码逻辑。 1.自定义排序(ORDER BY FIELD) 在MySQL中ORDER BY排序除了可以…

HNSW算法

From: HNSW算法(nsmlib/hnswlib)-CSDN博客HNSW算法的基本原理及使用 - 知乎 HNSW是一种广泛使用的ANN图索引结构,包括DiskANN、DF-GAS、SmartSSD等。本文档主要总结HNSW的结构与工作流程,便于后期研究其工作流程在迁移到CSD中存在的I/O问题…