Oracle数据库快速入门

前言:

我想现在很多人的入门数据库都是mysql,但是由于工作中会接触到Oracle数据库,如果你有MySQL的基础的话,这篇文章能让你很快掌握Oracle。

目录

1.体系结构

2.创建用户和表空间

2.1.创建表空间

2.2.创建用户

3.数据类型

4.表操作

4.1.创建表

4.2.修改表结构

5.数据操作

5.1.数据增删改查

5.2.分组查询

6.创建索引


1.体系结构

我相信在还没有接触到Oracle数据库之前,会听到很多五花八门的关于Oracle特点的介绍。其实在架构上来说Oracle最大的特点就是围绕用户,以用户为单位,做了严格的资源权限的控制和隔离。以下是架构图,如果很复杂不要担心,简单理解为用户到表空间到表的一对多关系即可。

注意:Oracle中其实没有库这种概念,而是用户对应表空间,表空间中存放表。

用户:

在mysql中我们说一个库里有多少张表,是因为MySQL体系中库是管理表的单位。

而在Oracle里,我们说一个用户下有多少张表,是因为一个库里面还用用户做了隔离,不同的用户对不同的表拥有访问权限。

表空间:

可以理解为拿来装某一个库里面的所有内容的存储区域。在 Oracle 数据库中,表空间是一种逻辑存储结构,它是由一个或多个数据文件组成的,用于存储数据库对象(如表、索引、分区等)。Oracle 数据库中的每个对象都存储在表空间中,而且每个表空间只属于一个数据库。

一个表空间可以包含多个数据文件,这些文件可以位于同一个磁盘上,也可以位于不同的磁盘上,甚至可以位于不同的服务器上。因此,通过使用表空间,Oracle 数据库可以将数据分散在多个磁盘上,提高了存储的灵活性和可靠性。

数据文件:

数据文件位于表空间中,里面存储的是数据,一个表空间可以由一个或者多个数据文件组成,但是一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件了,如果要删除只能先删除其所属的表空间。

2.创建用户和表空间

2.1.创建表空间

创建表空间必须使用有超级管理员权限的用户来操作。

create tablespace <space_name>
--指定表空间文件的存放路径和名称
datafile 'C:\<spacen_name>.dbf'
//指定表空间文件的大小
size 100m
--指定超出空间后每次扩展的大小
autoextend on
next 10m;

2.2.创建用户

create user <username>
identified by <password>
default tablespace <space_name>

创建出来的用户需要授权,否则不能登录,因为根本就不知道你能访问哪些表。

常用角色有如下:

  • connect,连接角色,最基本的角色

  • resource,开发者角色

  • dba,超级管理员角色

给用户授权:

grant dba to <username>

3.数据类型

Oracle数据类型分为四类:字符串、数字、日期、大对象

数据类型描述
varchar、varchar2表示可变长度的符串,常用的是varchar2,因为varchar会自动填充,而varchar2不会。
numbernumber(n)表示长度为n的整数。number(m,n)表示总长度为m,小数部分长度是n
data日期类型
clob大对象,大文本数据类型,单字节可达4G
blob大对象,二进制数据,单字节可达4G

4.表操作

4.1.创建表

CREATE TABLE person (id NUMBER(10) PRIMARY KEY,name VARCHAR2(50),age NUMBER(3),gender VARCHAR2(10)
);

4.2.修改表结构

--添加一个字段
alter table 表名 add 字段名 字段类型;
--修改字段类型
alter table 表名 modify 字段名 字段类型;
--修改字段名称
alter table 表名 rename column 原字段名 to 新字段名;
--删除字段

5.数据操作

5.1.数据增删改查

基础增删改查

INSERT INTO employees (employee_id, first_name, last_name, hire_date, department_id)
VALUES (101, 'John', 'Doe', TO_DATE('2023-08-21', 'YYYY-MM-DD'), 10);

UPDATE employees
SET first_name = 'Jane'
WHERE employee_id = 101;
 

DELETE FROM employees
WHERE employee_id = 101;
 

SELECT first_name, last_name, job_title
FROM employees;
 

连表查询

SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.location_id = 1700;

5.2.分组查询

在group by的时候只有group by的字段才能被单独展示,没有被group by的字段只能用上诸如求和、求平均值等聚合函数才会显示。

举个例,假设有一个名为sales的表,其中包含销售数据,想按照产品类别进行分组并计算每个类别的销售总额:

SELECT product_category, SUM(sales_amount) AS total_sales FROM sales GROUP BY product_category;

Oracle的分组查询里值得注意的是开窗函数。

开窗函数顾名思义就是再开一个窗子,即再开一列,再开的这一列的数据来自于各个分组内部统计得出。

如计算每个部门总的薪水:

create  table t(id number,deptno number,name varchar2(20),sal number);
insert into t values(1,1,'1aa',120);
insert into t values(2,1,'2aa',300);
insert into t values(3,1,'3aa',100);
insert into t values(4,1,'4aa',99);
insert into t values(5,1,'5aa',90);
insert into t values(6,2,'6aa',87);
insert into t values(7,2,'7aa',500);
insert into t values(8,2,'8aa',200);
insert into t values(9,2,'9aa',20);
insert into t values(10,2,'10aa',30);
select t.*,sum(sal)over(partition by deptno order by sal desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as last_value 
from t t;

img

再如计算每个用户最早和最晚的订单:

SELECT customer_id,first_value(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as first_order_date,first_value(amount) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as first_order_amount,last_value(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as last_order_date,last_value(amount) OVER (PARTITION BY customer_id ORDER BY order_date ASC) as last_order_amount
FROM order_details;

常用的开窗函数有:

  1. ROW_NUMBER: 为每一行分配一个唯一的整数编号。

  2. RANK, DENSE_RANK: 根据指定的排序规则计算每个行的排名。其中,RANK函数在相同的值存在时可能会跳过某些排名,而DENSE_RANK函数不会跳过任何排名。

  3. NTILE(n): 将查询结果集分为n个等分,并为每个行分配一个对应的数字。

  4. LAG, LEAD: 分别返回指定列在当前行之前或之后的值。可以使用LAG或LEAD函数来计算时间序列数据的移动平均数或计算相邻行之间的差异等等。

  5. FIRST_VALUE, LAST_VALUE: 分别返回指定列的第一个值和最后一个值。

  6. SUM, AVG, COUNT等聚合函数: 可以和 OVER 子句一起使用来计算每个行的聚合值,如行总数、行平均数等等。

6.创建索引

创建单列索引

CREATE INDEX idx_employee_last_name ON employees(last_name);

创建唯一索引

CREATE UNIQUE INDEX idx_employee_email ON employees(email);

创建组合索引

CREATE INDEX idx_employee_name_dept ON employees(last_name, department_id);

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

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

相关文章

Android kotlin 跳转手机热点开关页面和判断热点是否打开

Android kotlin 跳转手机热点开关页面和判断热点是否打开 判断热点是否打开跳转手机热点开关页面顺带介绍一些其他常用的设置页面跳转 其他热点的一些相关知识Local-only hotspot 参考 判断热点是否打开 网上方法比较多&#xff0c;我这边使用了通过WifiManager 拿反射的getWi…

ctfshow-红包题第二弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 同样&#xff0c;先看一下有没有注释的内容&#xff0c;可以看到有一个cmd的入参 执行之后可以看到文件代码&#xff0c;可以看到也是eval&#xff0c;但是中间对大部分的字符串都进行了过滤&#xff0c;留下了…

2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536 输入 共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个…

【Go语言】基于Socket编程的P2P通信程序示例

Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库&#xff0c;如net包&#xff0c;开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单&#xff0c;能够轻松处理多个连…

java八股文面试[java基础]——异常

自定义异常&#xff1a; 异常Exception 是指程序运行时&#xff0c; 由于输入错误、网络、程序逻辑等原因导致运行时出现的问题。出现异常时&#xff0c;程序会暂时中断执行&#xff0c;并根据产生异常的原因&#xff0c;创建对应异常类型的异常对象&#xff0c;并抛出给JVM捕…

C++笔记之设计模式:setter函数、依赖注入

C笔记之设计模式&#xff1a;setter函数、依赖注入 参考笔记&#xff1a; 1.C笔记之静态成员函数可以在类外部访问私有构造函数吗&#xff1f; 2.C笔记之设计模式&#xff1a;setter函数、依赖注入 3.C笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究…

MyBatis入门配置及CURD实现

目录 一、MyBatis简介 1. 什么是 MyBatis ? 2. MyBatis的特性 3. 什么是持久层框架&#xff1f; 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件…

stm32基于HAL库驱动外部SPI flash制作虚拟U盘

stm32基于HAL库驱动外部SPI flash制作虚拟U盘 &#x1f4cc;参考文章&#xff1a;https://xiaozhuanlan.com/topic/6058234791&#x1f39e;实现效果演示&#xff1a; &#x1f516;上图中的读到的FLASH_ID所指的是针对不同容量&#xff0c;所对应的ID。 //W25X/Q不同容量对应…

Docker安装ES+kibana8.9.1

参考&#xff1a;基于Docker安装Elasticsearch【保姆级教程、内含图解】_docker elasticsearch_Acloasia的博客-CSDN博客 创建网络 docker network create es-net 基于Docker安装Elasticsearch 拉取镜像 docker pull elasticsearch:8.9.1 挂载文件 mkdir -p /usr/local/e…

ubuntu下自启动设置,为了开机自启动launch文件

1、书写sh脚本文件 每隔5秒钟启动一个launch文件&#xff0c;也可以直接在一个launch文件中启动多个&#xff0c;这里为了确保启动顺利&#xff0c;添加了一些延时 #! /bin/bash ### BEGIN INIT sleep 5 gnome-terminal -- bash -c "source /opt/ros/melodic/setup.bash…

c语言每日一练(11)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…