目录
ORACLE
1. 概念
1、Oracle是⼀个关系型(表)数据库,Oracle(甲⻣⽂公司)也是⼀个公司的名称
2、Oracle数据库的市场份额是最多的,Mysql数据库也是甲⻣⽂公司的
3、Oracle数据库价格昂贵,主要在电信、银⾏、证券、国企领域使⽤,Mysql主要是⼩公司、 互联⽹⾏业应⽤⽐较多
4、数据(data):数字、⽂字、图形、视频等
5、数据库(database):管理数据的仓库
6、数据库管理系统(DBMS):Oracle、Mysql
7、属性–字段–列
8、元组–记录–⾏
9、域-值域:属性的取值范围
10、主键:能够唯⼀的标识⼀条记录的属性或属性组(联合主键)
11:外键:在A表中不是主键,但是在B表中是主键,这⼀列就叫做A表的外键
12:Oracle版本:Oracle 9i–Internet、Oracle 10g–grid、Oracle 11g、Oracle 12c–cloud
13、Oracle默认端⼝是1521
14、表空间(TABLESPACE):存储表的⽂件,相当于Mysql⼀个数据库
2. 数据库范式
2.1 概念
数据库创建和存在是满⾜⼀定程度的规则的。⽽这些规则,我们称为范式。
- 第⼀范式(1NF):每⼀列都是不可再分的(即所有字段值都是不可分解的)
- 第⼆范式(2NF):确保数据库表中的每⼀列都和主键相关,⽽不能只与主键的某⼀部分相关 (主要针对联合主键⽽⾔)
- 第三范式(3NF):两个表之间除了可以使⽤主键当做关联字段外,不能有重叠部分(即表中不能包含在其它表中已包含的⾮主关键字信息),否则就会造成数据冗余)
2.2 总结
- 第一范式和第二范式是针对单个数据表的结构提出基本要求,范式是针对表与表之间的关系的
- 随着范式等级的提高,数据表属性之间的依赖关系越来越小,数据冗余越来越低,但数据关系也会越来越复杂
- 范式具有包含关系,一个数据库的设计如果满足第二范式,则一定符合第一范式,如果符合第三范式,则也一定符合第二范式
3. Oracle数据库及PL/SQL安装
参考:https://blog.csdn.net/weixin_56214452/article/details/116232978
4. oracle语句
4.1 前置环境
假设数据库中有以下三种类型的表
- 第一列Name:表示数据库中表的每一列的名称
- 第二列Type:表示该列的取值范围
- 常用类型:
- varchar2(n):可变字符串,最长为n位
- number[(n)]:数字,最长为n位
- date:日期
- 第三列Nullable:表示该列中的数据能否为空
- 第四列Default:表示是否有默认值
- 第五列Comments:表示该列是否有注释
- emp表
Name | Type | Nullable | Default | Comments | |
---|---|---|---|---|---|
EMPNO | NUMBER(4) | 工号 | |||
ENAME | VARCHAR2(10) | Y | 姓名 | ||
JOB | VARCHAR2(9) | Y | 职位 | ||
MGR | NUMBER(4) | Y | 经理的工号 | ||
HIREDATE | DATE | Y | 入职时间 | ||
SAL | NUMBER(7,2) | Y | 工资 | ||
COMM | NUMBER(7,2) | Y | 奖金 | ||
DEPTNO | NUMBER(2) | Y | 部门号 |
- dept表
Name | Type | Nullable | Default | Comments | |
---|---|---|---|---|---|
DEPTNO | NUMBER(2) | 部门号 | |||
DNAME | VARCHAR2(14) | Y | 部门名 | ||
LOC | VARCHAR2(13) | Y | 地址 |
- salgrade表
Name | Type | Nullable | Default | Comments | |
---|---|---|---|---|---|
GRADE | NUMBER | Y | 级别 | ||
LOSAL | NUMBER | Y | 最低工资 | ||
HISAL | NUMBER | Y | 最高工资 |
4.2 简单查询 SELECT
- SQL查询注意事项
- SQL关键字及列名、表名不区分⼤小写
- SQL语句可以换⾏,但是关键字不能换⾏
- SQL语句以分号结尾
4.2.1 语法
select 列名,列名,...|* from 表名
|:或者
4.2.2 示例
-- 简单查询
-- 查询指定的列
-- 查询员工姓名
select ename from emp;
-- 查询员工姓名、工资、部门号
select ename,sal,deptno from emp;
-- 查询员工全部信息
-- 星号表示查询所有列
select * from emp;
--:表示注释
4.2.3 算数运算
-
包含空值null的算数运算结果也为空
-
简单查询可以对某些列(NUMBER类型、DATE型)进行算术运算
4.2.3(1) 语法
select 列名(+—*/)数值 from 表名
4.2.3(2) 示例
-- 查询员工姓名、工资及工资加500后情况
select ename,sal,sal+500 from emp;
-- 查询员工姓名及年薪(不算奖金)
select ename,sal*12 from emp;
-- 获取当前时间函数 sysdate
select sysdate from dual;
-- 查询员工姓名及工作年限(当前时间-入职时间)/365
select ename,(sysdate-hiredate)/365 from emp;
-- 空值(null)是指不可用,不知道,不适用的值
-- 空值不等于零或空格
-- 查询员工姓名及年薪(包含奖金)
-- 包括空值的算法表达式等于空
select ename,sal*12+comm from emp;
dual表(虚表)
- oracle中dual表是一个单行单列的表,任何用户可读取
- dual表真实存在,但不是用来存取主题数据的
- dual表只有一行一列,只有一条数据
- dual表支持增删改查,也可以drop,但不要drop,会报错,导致数据库不能使用
4.2.4 列别名
- 给列取名,别名中有特殊符号或者空格,需要加双引号
4.2.4(1) 语法
select 列名 [as] 别名1, 列名(+—*/)数值 别名2,... from 表名
4.2.4(2) 示例
-- 使用as关键字 格式: 列名(表达式)as 别名
select ename as 姓名,sal*12 as 年薪 from emp