Oracal学习

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(不并列排名)

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

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

相关文章

深度学习中RGB影像图的直方图均衡化python代码and对图片中指定部分做基于掩模的特定区域直方图均衡化

深度学习很重要的预处理步骤 就是需要对做直方图均衡化 其中主要分成灰度图以及RGB图的直方图均衡化 这俩的方法和代码不同 想要去看具体原理的朋友可以查看下面这篇博客的内容 写的很详细颜色直方图均衡化(https://www.cnblogs.com/wancy/p/17668345.html) 我们这个场景中会用…

Git 入门精讲

我们为什么要学习git? 就当下的发展而言,只要你从事开发就一定会接触git。作为最强大的分布式版本控制器,git 与 svn 有着本质上的区别。 Git是一种分布式版本控制系统,每个开发者都可以在本地维护完整的代码库,可以离…

04 经典的OSPF

思维导图的方式回顾OSPF 什么是OSPF?为什么需要OSPF? - 华为 (huawei.com) 1 ospf 领行学习思维导图 1.1 ospf 的工作过程 建立领据表同步数据库计算路由表1.2 ospf 的状态

C++ 红黑树

目录 一、红黑树的概念和性质 二、实现红黑树 1、节点定义构造 2、插入 3、左单旋&右单旋 4、中序遍历 5、检查平衡 6、获取树的高度 7、查找 8、析构 测试 完整版 一、红黑树的概念和性质 红黑树,是一种二叉搜索树,但在每个结点上增加一…

数据恢复与硬盘修理

第1篇 数据恢复与硬盘修理基础 本篇包括第1章,主要介绍数据恢复的发展现状、硬盘维修的基本知识以及一些基本工具的使用。 第1章 基础知识 1.1 数据恢复技术的发展和研究现状 目前国内的数据恢复服务市场处于一个极不规范的状态。虽然大部分数据恢复服务提供商是…

Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程

CSDN 成就一亿技术人! 今天出一期Centos下安装Mysql(详细教程)包括数据库密码跳过修改 CSDN 成就一亿技术人! 目录 1.获取安装包 2.安装程序 安装下载的rpm包 查看安装包 修改5.7版本(重要) 安装M…

如何生成漂亮的静态文档说明页

分享:如何生成漂亮的静态文档说明页 最近经常被问 https://t.itmuch.com/doc.html 文档页是怎么制作的,考虑到步骤略复杂,写篇手记总结下吧。 TIPS https://t.itmuch.com/doc.html 是个人在慕课网视频《 面向未来微服务:Spring Cloud Alibab…

二叉树堆的应用实例分析:堆排序 | TOP-K问题

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言一、堆排序1.1 排序思想1.2 堆排序过程(图解)1.3 堆排序代…

C++ 数论相关题目(欧拉函数、筛法求欧拉函数)

1、欧拉函数 给定 n 个正整数 ai ,请你求出每个数的欧拉函数。 欧拉函数的定义 1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N) 。 若在算数基本定理中,Npa11pa22…pamm ,则: ϕ(N) Np1−1p1p2−1p2…pm−1p…

【数学建模】插值与拟合

文章目录 插值插值方法用Python解决插值问题 拟合最小二乘拟合数据拟合的Python实现 适用情况 处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式时,构造一个简单函数作为要考察数据或复杂函数的近似 定义 给定一组数据,需要确定满…

b+树的理解

二叉树: 每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。 二叉查找树: 在二叉树的基础上增加了一个规则,左子树的所有节点都小于它的根节点,右子树的所有节点都大于他的根节点。 二叉查找树…

Flutter中实现中国省份地图

效果展示(这里只展示局部,完全展示违规): 可以点击省份改变颜色,更多功能可以自行拓展。 注:非完整中国地图!!! 本文用于记录在Flutter项目中安卓端实现中国地图,因为实现过程是通过…

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 …

【Linux C | 进程】Linux 进程间通信的10种方式(2)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

手写一个图形验证码

文章目录 需求分析 需求 使用 JS 写一个验证码&#xff0c;并在前端进行校验 分析 新建文件 VueImageVerify.vue <template><div class"img-verify"><canvas ref"verify" :width"state.width" :height"state.height&qu…

OpenCV-Python(51):基于Haar特征分类器的面部检测

目标 学习了解Haar 特征分类器为基础的面部检测技术将面部检测扩展到眼部检测等。 基础 以Haar 特征分类器为基础的对象检测技术是一种非常有效的对象检测技术(2001 年Paul_Viola 和Michael_Jones 提出)。它是基于机器学习的,通过使用大量的正负样本图像训练得到一个cascade_…

socket以及字节序

1. socket 介绍&#xff1a; 简介&#xff1a; 所谓 socket&#xff08; 套接字&#xff09;&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的 端点的抽象。 一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所…

推荐一个还可以的windows ssh工具

1.下载 https://github.com/kingToolbox/WindTerm/releases 2.解压 3.使用 上传 下载都很快 比cmd窗口好用 当然和finalshell有点像

Linux编辑器vim(含vim的配置)

文章目录 前言vim的基本概念vim基本操作进入vim模式切换退出vim vim指令vim命令模式指令vim底行模式命令 简单vim配置 前言 本篇文章&#xff0c;小编将介绍Linux编辑器–>vim以及vim的配置。 vim的基本概念 正常/普通/命令模式(Normal mode) 控制屏幕光标的移动&#xf…

云贝教育 |【分享课】1月25日Oracle分享主题:Oracle 单实例DG

分享主题&#xff1a;Oracle 19c 单实例DG-1 讲师&#xff1a;刘峰 直播时间&#xff1a;1月25日周四19:30 直播平台&#xff1a;微信视频号 云贝学院