Oracle简介
一.Oracle服务器
- 是一个数据管理系统(RDBMS),他提供开放的,全面的,近乎完整的信息管理
- 由一个oracle数据库和多个oracle实例组成
Oracle数据库的主要特点如下
- 支持多用户,大事务量的事务处理
- 在保持数据安全性和完整性方面性能优越
- 支持分布式数据处理,将分布在不同物理位置的数据用通信网络连接起来,在分布式数据
- 库管理系统的控制下,组成一个逻辑上统一的数据库,完成数据处理任务
- 具有可移植性。Oracle可以在Windows,Linux等多个操作系统平台上使用,可以在不同
- 操作系统间移植数据库。而SQL Server只能在Windows 平台上运行
二.Oracle基本概念
1.数据库和实例
- 数据库是一-堆磁盘文件(数据文件、日志文件、控制文件、临时文件)
- 实例是数据库服务运行时os中的进程+内存区
- 数据库和实例的关系,类似于oop中的类和对象的关系
2.全局数据库名
全局数据库名是用于区分一个数据库的标识,在安装数据库,在创建新数据库,创建控制文件,修改数据库结构,利用RMAN备份时都需要使用.
- 用于集群(多实例)的时候。
3.数据库实例名 (又叫Instance_Name丶SID)
每个启动的数据库都对应一个数据库实例,由这个实例来访问数据库中的数据,简单的理解为硬盘上的文件,具有永久性,则数据库实例就是通过内存共享运行状态的一组服务器后台进程
- 一般老版本使用SID
- 一般情况下,和数据库名一样,集群模式(RAC)模式下可能不同
4.数据库服务名(Service_Name)
一般情况下,和数据库名一样。对于同- -个数据库,可以配置多个服务名供外界访问。
一般新版本使用服务器名
5.模式(Schema)和对象用户
所有的对象都属于某个Schema(用户)
6.表空间
- 逻辑上,数据属于某个表
- 物理.上,数据存放在磁盘的某个文件中,哪个表空间的哪个数据文件
- 一个数据库可以有1到N个表空间。普通用户的表默认放在USERS表空间
- 一个表空间可以由1到N个表文件(DBF) 组成。
- 一个表空间可以放1到N个表。
三.Oracle数据类型
四.SQL语言简介
- DDL(Data Definition Language)数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用DDL,我们可以创建,删除和修改数据库和表结构。
- DML(Data Manipulation
Language)数据操作语言,我们用它操作和数据库相关的记录,如增加、删除、修改数据表中的记录。 - DCL(Data Control Language)数据控制语言,我们用它来定义访问极限和安全级别。
- DQL(Data Query Language)数据查询语言,我们用它查询想要的记录,它是SQL语言的
表信息:
创建表:
CREATE TABLE employee
( empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
depthon NUMBER(2)
);
插入数据:
-- 利用 SCOTT.EMP的数据插入到employee表
INSERT INTO employee
SELECT * from SCOTT.EMP;
追加两列和删除两列:
-- 创建两个列
ALTER TABLE employee
ADD (empTel_no VARCHAR2(12),
empAddress VARCHAR2(20));
-- 删除两个列
ALTER TABLE employee DROP (empTel_no,empAddress)
创建临时表,分页,删除临时表:
-- 创建临时表
create table temp as
SELECT *
FROM (SELECT * FROM employee ORDER BY SAL DESC);
-- 查询分页
SELECT *
FROM (SELECT ROWNUM r, a.* FROM temp a WHERE ROWNUM < 10 ORDER BY SAL DESC)
WHERE r >= 5;
-- 删除临时表
DROP TABLE temp;
使用 DENSE_RANK()函数:
-- 查询每个部门薪水第二高的员工信息
SELECT *
FROM
(SELECT employee.* ,
DENSE_RANK() OVER (PARTITION BY depthon ORDER BY sal DESC) "DENSE_RANK"
FROM employee)
WHERE DENSE_RANK=2;
使用ROUND函数,四舍五入和TO_CHAR转换字符串功能
-- 查询入职年份
SELECT ename "姓名" ,TO_CHAR(ROUND(hiredate,'yyyy'),'YYYY')||'年度' "入职年度"
FROM employee
(DISTINCT) 不重复显示:
-- 内容全部相同行,只保留一行
SELECT DISTINCT depthon
FROM employee;
五.SQL函数
1.转换函数
- TO_CHAR(date/number,‘format’):按照指定格式format将number或date类型转换为字符串。9代表一个数字,0强制显示0,¥货币符号,L本地货币符号,.小数点,,千分号。
- TO_NUMBER(char):将包含了数字的字符串转换为number格式。
- TO_DATE(string,‘format’):按照format格式将string转换为日期格式。format的格式:YYYY,YY,MONTH,MON,MM,DAY,DD,HH,MI,SS。
2.分析函数
4. row_number() row_number可以通过over 根据某字段排序完之后进行组内(如果有partition by)排序。
5. rank() rank()是排名的函数,该函数组内排序后会进行跳号,分数相同的作为并列。
6. dense_rank() dense_rank()该函数不会跳号,分数相同为并列第一,下一个是第二
3.其他函数
-
单行函数
-
聚会函数
-
分组函数