《Oracle学习笔记总结》

Oracle学习笔记汇总

开发工具与关键技术:PL SQL\Oracle SQL

作者:郑凯丰

撰写时间:2910年3月26日

笔记:
select 选择(查询)数据
insert 添加数据到数据库
update 修改数据库中的数据
delete 删除数据库中的数据
DESCRIBE 命令查询表结构符

SQL语句与SQL*PLAS的区别

SQL:

1.一种语言
2.ANSI 标准
3.关键字不能缩写
4.使用语句控制数据库中的表的定义信息和表中的数据

SQL*Plus:

1.一种环境
2.Oracle 的特性之一
3.关键字可以缩写
4.命令不能改变数据库中的数据的值
5.集中运行

SELECT

“日期和字符只能在单引号中出现”
‘*’ 查询整个表的数据 select * from department
AS:后面自定义名称 别名使用
SELECT last_name AS name, commission_pct comm
FROM employees;
“||”合成一列(把连个字段合成一个字段显示)
SELECT last_name || job_id AS “Employees”
FROM employees;
distinct 删除重复行
SELECT DISTINCT department_id
FROM employees;

where过滤 where子句紧随from子句“日期默认格式 DD-MON月-RR”
Between…and…两个值之间(包含边界)
WHERE salary BETWEEN 2500 AND 3500;
like 模糊查询 “_“匹配一个字符“%”匹配多个字符 例:”_a%” 匹配第二个字符为a的字符串
WHERE first_name LIKE ‘S%’;
in (10,20 )获取10 或者20 的ID
WHERE manager_id IN (100, 101, 201);
Escape 转义符(专门用来回避特效符号的)
WHERE job_id LIKE ‘IT_%‘ escape ‘\‘;
or:或者的意思
and 并且
Not 否的意思

NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);
升序ascend ASC
降序descend DEAC
order by 按别名录取
Lower(‘SQL Course’) 转换小写(sql course)
Upper (‘SQL Course’)转换大写(SQL COURSE)
INITCAP(‘SQL Course’)(Sql Course),将每个单词的第一个字母大写,其它字母变为小写返回
round 日期四舍五入
round()当与日期一起使用时,这些函数四舍五入或截断到指定的格式模型

round()可以将日期四舍五入到最近的年或月
trunc(100.456,2)截断 从小数点以后第二个开始截断
Mod 求余 MOD(salary, 5000)
CONCAT将两个列拼接起来(‘Hello’, ‘World’)–(HelloWorld)
Substr 提取一个确认的字符长度(‘HelloWorld’,1,5)—(Hello)
length()获取括号里的字符长度(‘HelloWorld’)—(10)
instr(‘CORPORATE FLOOR’,‘OR’, 3, 2)从第三个字符位置开始查找"OR",取第三个字后第2 个匹配项的位置(‘HelloWorld’, ‘W’)—(6)
LPAD(EMPLOYEE_ID,10,’’)左填充(salary,10,’’)—(24000)
Rpad 右填充(salary, 10, ‘*’)—(24000
)
trim()去除开头或结尾字母 trim('h’from 'hello ')
replace 替换字符(‘abcd’,’b’,’m’)—(amcd)
sysdate 返回当前时间

months_between()两个日期相差的月数
MONTHS_BETWEEN (‘01-SEP-95’,‘11-JAN-94’)–(19.6774194)
add_months 向指定日期加上若干月数(‘11-JAN-94’,6)–(‘11-JUL-94’)
next_day 指定日期的下一个星期对应的日期 (‘01-SEP-95’,‘FRIDAY’) –(’08-sep-95’)
last_day 计算本月最后一天是什么时候
trunc 日期截断
extract()函数,用于从date类型或interval类型中截取到特定的部分
EXTRACT(MONTH FROM HIRE_DATE)extract()第一个可以截取年(year)或月(month)或日(day)第二写from,第三写时间
to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’)to_char对日期的转换
to_char(HIRE_DATE,‘day’)“year年,month月,day 日”
to_char(SALARY,‘L999,999.99’)
“9 数字,0 零,$ 美元符,L 本地货比符号,. 小数点,’,’,千位数”
to_date(‘2015年3月18日13:13:13’,‘yyyy "年"mm"月"dd"日"hh24:mi:ss’)

超过十二小时就要在hh 写上24 --to_date将字符转换成数字
To_number 将字符转换为日期
TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’)
nvl(commission_pct,0)如果为空则转换为0,使用的数据类型有日期、字符、数字
Nvl(expr1,expr2)
nvl2(expr1,expr2,expr3)expr1不为null,返回expr2;为空就返回expr3
Nvl2(expr1,expr2,expr3)
nullif(expr1,expr2)相等返回null,不等返回expr1
coalesce 可同时处理交替的多个值,如果第一个表达式为空,则返回下一个表达式
COALESCE(commission_pct, salary, 10) comm
条件表达式:
Case:

case when 后面跟着条件 then当when 符合条件时执行当不符合条件时执行else语句end后面是名称
嵌套函数:(嵌套函数由内到外)

Oracle连接

Where table1.column1=table2.column2

等值连接

Where employees.department_id=departments.department_id

非等值连接

在这里插入图片描述

右外连接

在这里插入图片描述
以右边的表为主,查询数据

左外连接

在这里插入图片描述
以左边的表为主,查询数据

自连接

自己与自己链接
《Oracle学习笔记总结》_第1张图片

1999语法连接

《Oracle学习笔记总结》_第2张图片

交叉连接

CROSS JOIN 产生笛卡儿积
在这里插入图片描述

自然连接

Natural join (自动使用关联字段清楚笛卡儿积(一般关联字段是外键,但是此处它是以名称相同为主),属于内连接概念)以两个表中具有相同名字的列为条件创建等值连接
(列名相同而数据类型不同则会议产生错误)

在这里插入图片描述

USING 可以指定等值连接中需要用到的列

在这里插入图片描述

On 子句创建连接

在这里插入图片描述

On子句创建多表连接

在这里插入图片描述

左连接:left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

在这里插入图片描述

右连接:right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

在这里插入图片描述

满外连接:full outer join

在这里插入图片描述

分组函数

Avg(salary)
平均值max(salary)
最大值min(salary)
最小值sum(salary)合计

count(salary)计数、组函数忽略空值
Nvl函数使用分组函数无法忽略空值
Group by 分组数据:将表中的数据分成若干组
Select列中,所有未包含在组函数中的列都应该包含在group by中
在group by中的列不必包含在select中

非法使用组函数

Where子句中不能用组函数、Having子句中可以用、having过滤分组函数

嵌套组函数

在这里插入图片描述
在select列表中所有未包含在组函数中的列都应该包含
在 GROUP BY 子句中

子查询

子查询只返回一行
子查询中的空值不反回任何行
In 等于列表中的任意一个
Any 和子查询返回的某一个值比较

《Oracle学习笔记总结》_第3张图片
All 和子查询返回的所有值比较
《Oracle学习笔记总结》_第4张图片

创建和管理表

查看用户定义的表,直观的看到数据库下有多少表
在这里插入图片描述
查看用户定义的各种数据库对象
在这里插入图片描述
查看用户定义的表,视图同义词和序列
在这里插入图片描述
命令界面创建表成功以后会提示 Table created
在这里插入图片描述

数据类型

Varchar2 (可变长字符数据)
Char(定长字符数据) Blon(二进制数据)
Number(可变长值数据) bfile(存储外部文件的二进制数据)
Date(日期型数据) RowID(行地址)
Long(可变长字符数据,最大2G) RAW(原始的二进制数据)
Clob(字符数据,最大4G)

使用子查询创建表

AS 指定的列和子查询中的列要一一对应,通过列名和默认值定义列
在这里插入图片描述
Alter table 语句
1.追加新的列 ADD

在这里插入图片描述
2.修改现有的列 可以修改列的数据类型,尺寸,默认值 Modify
在这里插入图片描述
3.为新追加的列定义默认值
4.删除一个列 drop column

在这里插入图片描述
5.重命名表的一个列名
在这里插入图片描述

删除表

1.数据和结构都被删除
2.所有正在运行的相关事务被提交
3.所有相关索引被删除
4.DROP TABLE 语句不能回滚

在这里插入图片描述
Insert 语法数据处理
1. 可插入空值
2. 可插入指定的值(指定的值只要符合要求空值都可以)
在这里插入图片描述

创建脚本 insert

执行后会弹出一个模态框
在这里插入图片描述
拷贝其他表的数据
在这里插入图片描述
Update set 语句语法
在这里插入图片描述
Dalect 语句
在这里插入图片描述

回滚到保留点

Savepoint 在当前事物中创建保存节点,
Rollback to savepoint 回滚到创建的保存点

约束

约束范围:1.列级约束只能作用在一个列上
2.表级约束可以作用在多个列上,一个也可以
3.非空(not null)约束只能定义在列上

列级约束

NOT NULL 非空
在这里插入图片描述
UNIQUE 唯一约束
《Oracle学习笔记总结》_第5张图片
PRIMARY KEY 定义主键
在这里插入图片描述
FOREIGN51 KEY 定义外键
《Oracle学习笔记总结》_第6张图片
FOREIGN KEY 跟着外键 REFERENCES 跟着就是父表的主键

CHECK 值范围自定义约束
例(salary>2000 and salary<5000)
Alter table 语句
添加或删除约束,但是不能修改约束
有效化或无效化约束
添加not null 约束要使用modify语句

添加约束

在这里插入图片描述

删除约束

在这里插入图片描述

无效化约束

在这里插入图片描述

激活约束

在这里插入图片描述

查询约束

在这里插入图片描述

查定义约束的列

在这里插入图片描述

表级约束

‘表级约束是在建表完成后面写’
On delete cascade 当父表中的列被删除时,子表中相对应的列也被删除

在这里插入图片描述
ON DELETE SET NULL(级联置空): 子表中相应的列置空

创建视图

在这里插入图片描述

创建视图时给列名定义列名

在这里插入图片描述

修改视图

在这里插入图片描述

复杂视图创建

在这里插入图片描述

复杂视图创建要求

简单视图中执行 DML 操作
(1)当视图定义中包含以下元素之一时不能使用delete:
1.组函数
2.GROUP BY 子句
3.DISTINCT 关键字
4.ROWNUM 伪列.

(2)当视图定义中包含以下元素之一时不能使用update
1.组函数
2.GROUP BY 子句
3.DISTINCT 关键字
4.ROWNUM 伪列
5.列的定义为表达式
(3)当视图定义中包含以下元素之一时不能使insert:

• 组函数
• GROUP BY 子句
• DISTINCT 关键字
• ROWNUM 伪列
• 列的定义为表达式
• 表中非空的列在视图定义中未包括

删除视图

删除的视图只是删除的定义并不会删除基表的数据:DROP VIEW empvu80

序列

CREATE SEQUENCE语句,定义序列:
在这里插入图片描述

创建序列

《Oracle学习笔记总结》_第7张图片

查询序列

在这里插入图片描述
Rownum 伪列 (假的的意思)
Rownum每次在查询结果后在对结果进行操作,从第一个数据开始

修改序列

• 必须是序列的拥有者或对序列有 ALTER 权限
• 只有将来的序列值会被改变
• 改变序列的初始值只能通过删除序列之后重建序列的方法实现

在这里插入图片描述

删除序列

使用 DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用

在这里插入图片描述

索引

在表 EMPLOYEES的列 LAST_NAME 上创建索引
在这里插入图片描述

查询索引

可以使用数据字典视图USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
在这里插入图片描述

删除索引

DROP INDEX upper_last_name_id;

创建用户

DBA 使用 CREATE USER 语句创建用户
在这里插入图片描述
在这里插入图片描述

用户的系统权限

在这里插入图片描述

分配用户表空间

在这里插入图片描述

创建角色并赋予权限

《Oracle学习笔记总结》_第8张图片

SET运算符

SET操作符

1. UNION:返回两个查询的结果集的并集(操作符对于两个结果集重复数据会选择一条显示)
2.UNION ALL:返回两个查询的结果集的并集,(两个结果集重复部分,不去重。)
3.INTERSECT 操作符:返回两个结果的交集。(返回两个集之间相同的数据)
4.MINUS 操作符:返回两个结果集的差。

例:

SELECT employee_id, job_id
FROM employees
UNION /UNION ALL/ INTERSECT/ MINUS——都可以替换
SELECT employee_id, job_id
FROM job_history;

总结:

学习了一个多月的Oracle SQL 语言,勉强算是Oracle的初学者了,以上呢就是我这一个多月来接触到的东西,我都已近全部罗列出来还有解析以及一些题目的的注释,写这个总结不仅对于我个人是一个学习的巩固,以后就算遇到什么问题也可以回来翻翻,其实学习Oracle这门语言也挺简单的,只要个人平时多练多记单词到时候也是可以上手这门语言的。

你可能感兴趣的:(《Oracle学习笔记总结》)