Oracle数据库•笔记

第一章 数据库概述

第二章 表管理、表数据库修改
oracle注释:单行注释(–),如:
–这是单行注释
多行注释(/**/),如:
/*
这是多行注释
这是多行注释
这是多行注释
这是多行注释
*/
use 数据库名;//表示使用某数据库
select * from 表名;//表示查询某表

字段类型
字符串类型
Char:存储固定长度的字符串
Varchar:用于保存可变长度的字符串数据
Varchar2:用于保存可变长度的字符串数据
Long:长整数
数字类型
Number:用于存储数字,它有两个属性number(7)
precision表示长度,scale表示右边的小数位数
binary_double:双精度浮点数字数据类型
binary_float:单精度浮点数字数据类型
日期数据类型
Date:Oracle最常用的日期类型,它可以保存日期
Timestamp:Oracle常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒
大型数据(LOB)
Clob:最大4G,存储字符型数据,适用于存储超长文本
Blob:最大4G,存储二进制数据,适用于存储图像、视频、音频等

SQL规范
1、 sql编写时,大小写一致;语句中出现的所有表名、字段名全部小写,系统保留字
2、 不要使用关键字命名
3、 对较为复杂的sql语句加上注释,说明算法、功能
4、 关键SQL语句,尽量简化,不要包含太多的嵌套,避免执行计划错误的可能
5、 连续符or、in、and以及=、<=、>=等前后加上一个空格

表的建立
表是什么? 表示是用来存储数据的
语法:
CREATE TABLE 表名(
列名 字段类型,
列名 字段类型,
列名 字段类型,
列名 字段类型,
列名 字段类型
);
如:
CREATE TABLE Users(
u_id number(10),
u_name varchar2(50),
u_money binary_double,
u_birthday date
);

Select * from Users;//查询表Users
1、 往Users表中插入数据
INSERT INTO Users VALUES(1,’小明’,1000.0,(to date(‘2019-8-12’,’yyyy-mm-dd’)));
2、 往表中存储图片
CREATE TABLE Mytest(
m_id number(10),
pic Blob
);
3、 往teacher表中插入数据
没有足够的值
INSERT INTO teacher VALUES(1,’心奔’,30,null);

表的修改(字段名称,字段属性,增删列)
查询操作后的结果:select * from Users(操作5表名用UserE来查询);
1、 修改列名
ALTER TABLE teacher RENAME COLUMN T_ID TO T_IDS;
2、 修改列属性
ALTER TABLE Users MODIFY T_NAME VARCHAR(100);
3、 增加列
ALTER TABLE Users ADD U_ADDRESS VARCHAR(100);
4、 删除列
ALTER TABLE Users DROP COLUMN U_ADDRESS;
5、 修改表名
RENAME Users TO UserE;
6、 删除表
DROP TABLE Mytest;

DML语句
DML指的是数据的操作语句(对表中的数据做数据,增删改)

SELECT * FROM UserE;

1、 增加,向表中的每个列都插入数据
INSER INTO UserE VALUES(1,’小明’,1000.0,(to date(‘2019-8-12’,’yyyy-mm-dd’)));
2、 增加,自定义插入数据
INSERT INTO UserE(U_ID,u_Name,u_Money) VALUES (3,’小军’);
3、 当修改了表中的数据之后要commit

4、更新语句,当没有明确具体修改哪条的时候修改的是表中所有的数据
UPDATE UserE SET U_NAME=’小2’;
4、 如何指定条件的修改,指定id修改数据,id不要有重复的也不要为null
UPDATE UserE SET U_NAME=’小A’ WHERE U_ID=1;
5、 删除数据,指定条件删除某条数据
DELETE FROM UserE WHERE U_ID=9;
6、 字符串拼接
UPDATE UserE SET U_NAME=U_NAME || ‘哈哈’ WHERE U_ID=1;

第三章 约束:primary key
什么是约束?自我约束,约束它是对某一种行为的约束
数据库它是用来存储数据的,存储数据的时候有特定的规则
那么这个规则是什么?
Update user set money=1000 where id=1;

User
Id money
1 1000
2 5000
3 600

一、 主键约束
作用:识别一个列
约束:再给一个列添加了主键约束之后,这个列的值不能有重复的,不能为空,一个表只能有一个主键约束。
如:
1、 建立一个表
Create table UserE(
u_id number(7) primary key,
u_name varchar2(50),
u_sex varchar2(10),
u_join_date date,
u_hobbies varchar2(100)
);
2、 查询当前表
SELECT * FROM UserE;
3、 往这个表中增加数据
INSER INTO UserE values(1,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)),’学习’);
INSER INTO UserE values(1,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)),’学习’);
4、 删除表中的数据
Delete UserE where U_ID=1;
5、 为了要解决这个问题,要对这个表的U_ID建立一个约束(主键约束primary key)
Alter table UserE add constraint u_id_con primary key(U_ID);

二、 唯一约束:unique
作用:保证每个列的值是唯一的,可以为空
Select * from UserE;
1、建立一个唯一约束
Alter table UserE add constraint u_hobbies_un unique key(U_HOBBIES);
2、先删除数据
Delete UserE where u_id=2;
3、往表中插入数据
INSERT INTO UserE VALUES(1,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)),’学习’);
INSERT INTO UserE VALUES(2,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)),null);
4、 建表时直接添加唯一约束
Create table Useru(
u_id number(7),
u_name varchar2(50),
u_sex varchar2(10),
u_join_date date,
u_hobbies varchar2(100) unique
);
三、 非空约束
作用:用来约束一个列,让这个列不能为空
如:
Create table Usernulls(
u_id number(7) not null,
u_name varchar2(50),
u_sex varchar2(10),
u_join_date date,
u_hobbies varchar2(100)
);

INSERT INTO Usernulls values(6,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)),’学习’);
Alter table Usernulls modify u_id not null;
四、 默认值
作用:当某一个列没有明确值的时候,默认是有数据的
如:
Create table Userde(
u_id number(7),
u_name varchar2(50),
u_sex varchar2(10),
u_join_date date,
u_hobbies varchar2(100) default ‘学习’
);

Select * from Userde;
Insert into Userde (u_id,u_Name,u_sex,u_jion_date)
values(6,’小明’,’男’,(to_date(‘2019-8-14’,’yyyy-mm-dd’)));
五、 检查约束
作用:用来检查一个列的值是否符合标准
如:
Create table Userde(
u_id number(7),
u_name varchar2(50),
u_sex varchar2(10)
);

Select * from Usercheck;
Insert into Usercheck values(3,’小明’,’不男不女’);
注:在插入数据的时候对性别没有做约束的建立,导致插入数据的时候。什么值都可以插入只要是varchar2类型,在正常的性别中sex列只能值传递其他的值那也就是要对当前的这个sex列进行值的判断 检查约束(check)

1、 建立检车约束
Alter table Usercheck add constraint u_sex_checks
check((u_sex=’男’) or (u_sex=’女’)) and (u_sex is not null);
2、 如何在建表时添加检查约束
Create table ck_user(
C_id number(7),
C_sex varchar2(50) check (c_sex=’男’ or c_sex=’女’ and c_sex is not null)
);

Insert into ck_user values(2,’男男’);
六、外键约束
作用:用来强制两张表中的关系,此约束外键的值必须要和引用键的值相同
外键:引用了主表中的值
引用建:被从表引用的值

–老师表
Create table teacher(
T_id number(4) primary key,
T_name varchar2(20),
C_no number(4) unique
);
–学生表
Create table student(
S_id number(5) primary key,
S_name varchar2(20),
C_no number(5)
);
Select * from teacher;
Select * from student;
1、望老师表插入数据
Insert into teacher values(1,’A’,5);
Insert into teacher values(2,’B’,6);
Insert into teacher values(3,’C’,7);
Insert into teacher values(4,’C’,8);
2、望学生表插入数据
Insert into student values(1,’小明’,1);
Insert into student values(2,’小红’,2);
Insert into student values(3,’小军’,3);

外键约束:foreign key
Alter table student add constraint c_no_for
foreign key(C_NO) references teacher(C_NO);

3、 删除编号为4的老师
Delete from teacher where t_id = 4;
问题与解决方案:不能先删除引用键,因为它还有子记录,先要删除学生表中的数据,再删除老师表中的数据

4、 删除老师的时候将学生一起删除
解决方法一:on delete cascade
Alter table student add constraint c_no_for foreign key(c_no) references teacher(c_no) on delete cascade;
解决方法二:on delete set null
Alter table student add constraint c_no_for foreign key(c_no) references teacher(c_no) on delete set null;

5、 先删除之前的约束
Alter table student drop constraint c_no_for;

第四章 Oracle基本查询
一、查询 作用:就是返回这个表中的数据,还可以指定条件的返回数据。

1、 查询表中所有的数据,代表的是所有,开发的时候谨慎使用
Select * from emp;
2、 指定列返回数据
Select empno,ename,job from emp;
3、 对列使用别名
Select empno 编号,ename 姓名,job 职位 from emp;
4、 使用常量
Select empno,ename,’500’ 餐补 from emp;
5、 如何去查询某个员工的数据
Select * from emp where empno=6365;
6、 怎么去查询范围之间的数据,筛选工资在5000-10000
Select * from emp where sal>=5000 and sal <=10000;
7、 查询部门编号为10的或者为20的员工信息 or是两个条件只要满足一个就可以了
Select * from emp where deptno=10 or deptno=20;
8、 工资加奖金,不能null做运算,最终结果会转换成null
Select comm+sal from emp;
9、 ROWNUM伪列
Select * from emp;
Select rownum,e.
from emp e;
10、表别名
Select e.empno,e.ename,e.job from emp e;

二、排序 升序1-10 降序10-1
Select * from emp order by sal desc;

–asc 升序
Select * from emp order by sal ename;
–desc 降序
Select * from emp order by sal desc;

1、 排序的时候使用别名
Select e.empno 编号,e.ename 姓名,e.job 职位 from emp e order by 姓名;
2、 范围查询 指定某个范围之间的数据
Between and
Select * from emp where sal between 5000 and 10000;
Select * from emp where sal>=5000 and sal<=10000;
3、 查询部门编号为10或者为20
In()
Select * from emp where deptno in(10,20,30);
Select * from emp where deptno=10 or deptno=20 or deptno=30;
4、 like,模糊查询
%:表示任意字符
_:表示一个字符
select * from emp;
select * from emp where ename like ‘%A%’;
select * from emp where ename like ‘A%’;
select * from emp where ename like ‘A%’;
select * from emp where ename like ‘%a%’;
select * from emp where ename like ‘
%’;

拓展
Select * from dual;
第五章 函数
函数(方法):它就是一些有功能性的方法,它可以返回指定的结果。
1、 系统函数

字符型函数
INITCAP,每个单词的首字母大写
Select lower(‘my name is yige’) from DUAL;
LOWER,转换成小写
SELECT LOWER(‘MY NAME IS YIGE’) FROM DUAL;
UPPER,转换成大写
SELECT UPPER(‘my name is yige’) FROM DUAL;
TRIM,去前后空格
SELECT TRIM(‘ AA AA ’) FROM DUAL;
LENGTH,返回字符串长度,返回的长度会计算空格
SELECT LENGTH(‘ AA AA AA’) FROM DUAL;
LTRIM(目标内容,指定内容),从左边开始查找指定的字符
SELECT LTRIM(‘ HELLO ORACLE’,’ HE ’) FROM DUAL;
RTRIM(目标内容,指定内容),从右边开始查找指定的字符
SELECT RTRIM( ‘ HELLO ORACLE ’,’ EL ’ ) FROM DUAL;
REPLACE(目标内容,要查找的内容,要替换的内容),替换
SELECT REPLACE(‘ HELLO ORAOOCLOLSFE ’,’ O ’,’ Z ‘) FROM DUAL;
INSTR(目标内容,要查找的数据),返回的是字符串第一次出来的位置
Oracle里面返回位置是从1开始的
SELECT INSTR(‘HELLO ORACLE’,’L’) FROM DUAL;
SUBSTR(目标内容,开始,结束),截取
开始和结尾都会包含,也是从1开始
SELECT SUBSTR(‘HELLOORACL’,1,6) FROM DUAL;
CONCAT,拼接字符中
SELECT CONCAT(‘HELLOORACLE’,’JAVASE’) FROM DUAL;

2、数字型函数
ABS,返回绝对值
SELECT ABS(-25,6) FROM DUAL;
CELL,向上取整
SELECT CELL(10.000001) FROM DUAL;
FLOOR,向下取整
SELECT FLOOR(10.000001) FROM DUAL;
POWER,次方 888*8
SELECT POWER(8,4) FROM DUAL;
SQRT,开方
SELECT SQRT(144) FROM DUAL;
ROUND,四舍五入
SELECT ROUND(123.4) FROM DUAL;

SELECT * FROM EMP;
NVL(列名,0)可以将指定的列转换成其他的格式
NVL2(E1,E2,E3):如果E1为null时,就返回E3,若E1不为null时就返回E2
SELECT SAL+NVL(COMM,0) 总工资 FROM EMP;
SELECT SAL+NVL2(COMM,100,0) 工资 FROM EMP;

3、日期函数
SELECT SYSDATE FROM DUAL;
MONTHS_BEWTEEN:返回的是相隔的月份数
SELECT MONTHS_BEWTEEN(SYSDATE,’19-10月-19’) FROM DUAL;
ADD_MONTHS,在当前的月份上添加
SELECT ADD_MONTHS(SYSDATE,’星期四’) FROM DUAL;
周日是1
SELECT NEXT_DAY(SYSDATE,1) FROM DUAL;
LAST_DAY,返回月份的最后一天
SELECT LAST_DAY(SYSDATE) FROM DUAL;

多行:拿到多行数据进行运算,只返回一个结果,它叫分组函数,也要聚合函数
1、 求emp表中所有员工的总工资,最终返回的是一个总工资
SUM(列):返回多行数据得到的总和;
Select SUM(SAL) from emp;
AVG(列):返回多行数据得到平均值;66782.38
SELECT AVG(SAL) FROM EMP;
MAX(列):返回多行数据的最大值
SELECT MAX(SAL) FROM EMP;
MIN(列):返回多行数据的最小值
SELECT MIN(SAL) FROM EMP;

COUNT(*),count(1),count(列):返回这个表中所有的行数
COUNT(列)不会返回null值的数据
SELECT COUNT(COMM) FROM EMP;
SELECT SUM(SAL) 总工资,MAX(SAL) 最高工资,MIN(SAL) 最低工资,AVG(SAL) 平均值,COUNT(1) 总人数 FROM EMP;
4、分组函数:按照指定的条件做数据的分类
GROUP BY
SELECT SUM(SAL) FORM EMP GROUP BY DEPTNO;
分组的时候能按照多个列分组吗?
SELECT SUM(SAL),DEPTNO,JOB FROM EMP GROUP BY DEPTNO,JOB;
筛选分组之后的消息,返回工薪总和大于2000的信息
要对分组之后的数组做筛选就得用having
SELECT SUM(SAL),DEPTNO,JOB FROM EMP GROUP BY DEPTNO,JOB WHERE SUM(SAL) >= 2000;

5、 转换函数
TO_CHAR:将数值转换成指定的格式,补足小数位数
SELECT TO_CHAR(11.11,’99.9999999’) FROM DUAL;
前后补足小数位数
SELECT TO_CHAR(11.11,’0000.456479’) FROM DUAL;
SELECT TO_CHAR(11.127,99.99) FROM DUAL;
四舍五入
SELECT TO_CHAR(11.122,99.99) FROM DUAL;
对时间做转换
SELECT TO_CHAR(sysdate,’yyyy-MM-dd HH24:mi:ss’) FROM DUAL;
TO_DATE
SELECT TO_DATE(‘2018-12-05’,’yyyy-MM-dd’) FROM DUAL;
TO_NUMBER,将字符串转换成数值
SELECT TO_NUMBER(‘1236.1292’,’0000.0000’) FROM DUAL;
SELECT * FROM EMP;

第六章 Oracle多表查询
复杂查询
如何解决笛卡尔积的情况
笛卡尔积:多个表去查询的时候没有明确具体的条件
解决方法:明确好条件
SELECT * FROM EMP,DEPT;
1、内连接:(INNER JOIN ON)返回能匹配得上的结果
SELECT * FROM EMP E INNER JOIN DEPT D ON E.DEPTNO=D.DEPTNO;
SELECT * FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;

UPDATE EMP SET DEPTNO=40 WHERE EMPNO=7788;

INNER JOIN ON 内连接练习题
查询员工编号,员工姓名,员工的部门名称
SELECT E.EMPNO 员工编号,E.ENAME 员工姓名,D.DNAME 部门名称
FROM EMP E INNER JOIN DEPT D ON E.DEPTNO=D.DEPTNO;
查询部门号为20的员工的部门编号,员工姓名,部门所在地
SELECT E.DEPTNO,E.ENAME,D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTON=D.DEPTNO AND E.DEPTNO=20;
查询员工姓名中带A的员工信息(员工姓名,工作地点)
SELECT E.ENAME,D.LOC FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO=D.DEPTNO WHERE E.ENAME LIKE ‘%A%’;

2、 外连接(它是一个内连接的一个拓展)它也是用来查询数据的
左外连接(left join on),将左表作为主表,将主表中的数据全部显示出来,
右表返回匹配得上,匹配不上显示null
SELECT * FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO;
右外连接(left join on),将右表作为主表,将主表中的数据全部显示出来,
左表返回匹配得上,匹配不上显示null
SELECT * FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO=D.DEPTNO;

INSERT INTO DEPT VALUES(60,’java’,’changsha’);

简单来说:在左连接和右连接时都会以一张表作为基表
该表的内容全部显示,返回两张表中匹配得上的数据

外连接(左外连接,右外连接)
显示所有员工的姓名,部门号和部门名称
SELECT E.ENAME,E.DEPTNO,D.DNAME FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO;
显示所有有奖学金的员工的姓名,部门名称,部门地址
SELECT E.ENAME,D.DNAME,D.LOC FROM EMP E RIGHT JOIN DEPT D ON E.DEPTNO=D.DEPTNO WHERE E.COMM IS NOT NULL;

子查询(单行子查询,多行子查询)将一个select语句嵌套在另一个select语句中
执行顺序:先执行内部select语句的查询,再将这个结果返回给外部的select语句作为条件
查询比SMITH工资高的员工
1、SMITH的工薪是多少 2、工资大于SMITH的
先得到SMITH的工资
SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME=’SMITH’);

当子查询要返回多个结果的时候应该用多行子查询
IN(在某个范围之内) ALL(所有) ANY(任意)

查询每个部门薪水最高的员工的基本信息
IN()是包含在某个范围之内的,只要满足一个条件就返回数据
SELECT * FROM EMP WHERE SAL IN(SELECT MAX(SAL),DEPTNO FROM EMP GROUP BY DEPTNO);
SELECT * FROM EMP WHERE DEPTNO IN(10,20,30);

查询30部门员工工资比20部门所有员工工资都低的
一个数据和所有的数据都比较一遍
ALL():外部select的结果要和内部select的结果进行比较(所有的数据都要比一次)
SELECT * FROM EMP WHERE DEPTNO=30 AND SAL < ALL (SELECT SAL FROM EMP WHERE DEPTNO=20);

查询30部门员工工资比20部门任意员工工资都低的
ANY():和内部的任意一个数据进行比较
SELECT * FROM EMP WHERE DEPTNO=30 AND SAL <ANY(SELECT SAL FROM EMP WHERE DEPTNO=20);

第七章 Oracle多表查询,分页
自连接:自己连接自己,一个表的列去连接它本身的另一个列。

1、 要查询每个员工对应的上司
SELECT * FROM EMP;
2、 使用自连接
SELECT E.ENAME 上司,D.ENAME 员工 FROM EMP E,EMP D WHERE E.EMPNO=E.MGR;

CREATE TABLE ADMIN(ID VARCHAR2(4),NAME VARCHAR2(10),ANO VARCHAR2(4));
INSERT INTO ADMIN VALUES(‘001’,’XiongDa’,’004’);
INSERT INTO ADMIN VALUES(‘002’,’XiongEr’,’004’);
INSERT INTO ADMIN VALUES(‘003’,’ZhangSan’,’003’);
INSERT INTO ADMIN VALUES(‘004’,’ZhaoSi’,’004’);

SELECT * FROM ADMIN;
通过查询admin表,显示编号,显示姓名,管理者姓名
SELECT b.id 编号,b.name 姓名,a.name 上司姓名 FROM admin a,admin b where a.id = b.ano;

分页查询
分页:是将数据分段展示的,它显示的不是所有的数据,可以根据指定的页码跳转到指定的页数,每页的数据都有开始和结束,我们看到的内容只是其中的一部分

如果将数据库里面的数据分段展示
先排序:怎么对当前表中数据进行排序
SELECT * FROM EMP WHERE EMPNO=7421 OR EMPNO=6974 OR EMPNO=7369;
ROWNUM它是一个表中的伪列,它不存在于某下表中,但是每个表都有这个列
SELECT * FROM (SELECT ROWNUM r,E.* FROM EMP E) WHERE r BETWEEN 2 AND 10;
以上代码出现了一个弊端,对所有的数据都编号了,导致效率变慢了
如何提高效率了,要用那些数据就对哪些数据编号就可以了
以下的代码提交了程序的执行效率
SELECT * FROM (SELECT ROWNUM r,E.* FROM EMP E WHERE ROWNUM<=10) WHERE r BETWEEN 2 AND 10;

在分页的时候如何对数据进行排序
先对数据排序再进行分页
SELECT ROWNUM r,e.* from
(SELECT ROWNUM r,e.* from
(select e.* from emp e order by sal desc) e
where rownum<=10)
where r>=2;

分页工式(先乘除再加减)
pageSize:每页显示的条目数
page:页数
start:(page-1)pageSize+1
end:pageSize
page

int pageSize=10;
int page=1;
int start=(page-1)*pageSize+1;
int end=pageSize*page;

SELECT * FROM
(SELECT ROWNUM r,e.* from
(SELECT E.* FROM EMP E ORDER BY SAL DESC) e
WHERE ROWNUM<=end)
WHERE r>=start;

第九章 索引+视图
什么是索引,索引的作用是什么
索引是数据库中的对象之一,用于加快数据的查找,类似书籍的索引一样
在查询数据时候就可以减少数据的读取量,类似在书籍中的页码一样
若没有建立索引时,那么要去查找某个记录的时候 name=’张三’,需要搜索所有的记录,在name上建立索引时,Oracle查询的时候就会减少数据量的读取
B-Tree(二叉树结构)
一个B树索引只一个根节点,根结点下有分支

CREATE TABLE T_INDEX(
T_ID NUMBER(10),
T_NAME VARCHAR2(20),
T_SUB VARCHAR2(20)
);

CREATE TABLE T_INDEXS(
T_ID NUMBER(10) PRIMARY KEY,
T_NAME VARCHAR2(20),
T_SUB VARCHAR2(20)
);

SELECT * FROM T_INDEX;
唯一索引
作用:保证数据的唯一性,当建立主键的时候或是唯一约束的时候会自动建立
CREATE UNIQUE INDEX UN_IQUE ON T_INDEX(T_ID);
组合索引
当条件有两个或是两个以上的时候
CREATE UNIQUE INDEX NAME_SUB ON T_INDEX(T_NAME,T_SUB);
反向键索引
作用:当大批量插入数据时
CREATE INDEX T_ID_REV ON T_INDEX(T_ID) REVERSE;
SELECT * FROM EMP;

位图
何时创建:列中重复和固定的数据的时候(性别,年龄,地址)
优点:将数据做压缩的形式存放,省空间
CREATE BITMAP INDEX ON T_INDEX(T_NAME);

函数索引
当where条件中包含函数要求的时候
CREATE INDEX P_IDX ON T_INDEX(SUBSTR(T_NAME,1,2));

删除索引
DROP INDEX P_IDX;
修改索引的名称
原索引名 现索引名
ALTER INDEX P_IDX RENAME P_IDXS;

视图:视图是数据库中的一个对象,它是数据来自其他的表中视图它是一个虚拟的表
优点:安全 简化操作 可以导出特定的数据

在scott用户下没有权限创建视图
要切换到sys用户下对scott用户进行授权

用户名:sys
密码:change_on_install
登陆身份:sysdba

授权:GRANT GREATE VIEW TO SCOTT;

如何创建视图
CREATE OR REPLACE VIEW VIEW_V1
AS
SELECT * FROM EMP;

CREATE OR REPLACE VIEW VIEW_V2
AS
SELECT E.EMPNO,E.ENAME,E.JOB FROM EMP E;

查询视图
SELECT * FROM VIEW_V1;
SELECT * FROM VIEW_V2;
对视图做DML(增删改)
INSERT INTO VIEW_V2 VALUES(1100,’艺术大师’,’程序员’);
对视图做删除
DELETE VIEW_V2 WHERE EMPNO=7421;
对视图做修改操作
UPDATE VIEW_V2 SET ENAME=’小白’ WHERE EMPNO=6974;
SELECT * FROM EMP;

只读视图(只能查询,不能增删改)
CREATE OR REPLACE VIEW VIEW_V4
AS
SELECT * FROM EMP
WITH READ ONLY;
数据的修改
UPDATE VIEW_V4 SET ENAME=’白月’ WHERE EMPNO=999;
新增数据
INSERT INT VIEW_V4 VALUES();
删除数据
DELETE VIEW_V4 WHERE ID=;

复杂视图的建立
CREATE OR REPLACE VIEW VIEW_V5
AS
SELECT COUNT(1) 总人数,
E.DEPTNO 部门编号,
SUM(sal) 总工资,
AVG(sal) 平均工资,
MAX(sal) 最高工资,
MIN(sal) 最低工资
FORM EMP E GROUP BY E.DEPTNO;

SELECT * FROM VIEW_V5;

Oracle数据库•笔记相关推荐

  1. 达内oracle教材,达内学习心得oracle数据库笔记

    达内学习心得oracle数据库笔记 达内学员: oracle 数据库笔记获奖学员:王梓祺所获奖项:三等奖内容:/*前言:这份资料是结合老师笔记,课堂案例, TTS6.0 课件以及个人的理解整理,时间仓 ...

  2. Oracle数据库笔记(基于oracle数据库的PLSQL编程以及存储过程的创建和使用)

    PLSQL编程 概念和目的 程序结构 Hello World 变量普通变量 引用型变量 记录型变量 流程控制 条件分支 循环 游标 什么是游标 语法 游标的属性 创建和使用 带参数的游标 存储过程 概 ...

  3. oracle rownum union,oracle数据库笔记

    获奖学员:王梓祺 所获奖项:三等奖 内容: /*前言:这份资料是结合老师笔记,课堂案例,TTS6.0课件以及个人的理解整理,时间仓促,如有纰漏敬请原谅.*/ Oracle 数据库 语法顺序 selec ...

  4. oracle11g之管理oracle数据库笔记(理论基础知识)

                                                                  第三章 管理oracle数据库 1.启动数据库步骤;(创建启动实例--> ...

  5. oracle数据库笔记---oracleweb视图使用流程,及plsql安装

    1.   a.第一次进入的时候输入:http://127.0.0.1:1158/em/     Oracle Enterprise Manager注意,网页的标题是这个;     输入:system账 ...

  6. Oracle数据库笔记总汇

    Oracle 数据库 Oracle Database,名Oracle RDBMS,或简称Oracle.是 甲骨文公司 的一款 关系数据库管理系统 .它是在数据库领域一直处于领先地位的产品.可以说Ora ...

  7. Oracle数据库笔记以及plsql的使用

    1.登录sys 1.sql*plus登录 请输入用户名: connect / as sysdba 输入口令:oracle 连接到: Oracle Database 11g Enterprise Edi ...

  8. Oracle数据库笔记

    一. 1.创建表空间的语法 create tablespace 表空间名称​datafile 文件名 size 初始大小 [reuse][autoextend[off|on[next 增长量][ma ...

  9. oracle数据库----笔记1----oracle数据类型

    char(size):存放定长字符型数据最长255个字符,缺省size为1. varchar2(size):存放可变长字符串数据, size 最长为2000字符(或4000字符) number(n,d ...

最新文章

  1. Oracle中table的大小计算方式
  2. Fragment崩溃后重启
  3. 英国正式启用首批5G服务
  4. 打造司机在线培训,网易云信助力曹操专车“一路畅行”
  5. pythonos模块使用方法_python os模块使用方法
  6. HDU 1715 大菲波数 (大数问题)
  7. js function理解
  8. 转:springboot servlet使用配置
  9. 8种主流深度学习框架介绍
  10. DAY8-Nessus漏洞扫描
  11. 21.Shiro在springboot与vue前后端分离项目里的session管理
  12. pythonmkdir语法错误_转--python使用mkdir函数出现错误WindowsError:[Error3]
  13. ConstraintLayout 完全解析 快来优化你的布局吧
  14. mysql admin php_apache+php+mysql+phpadmin 服务环境搭建
  15. 字蛛的用法以及遇到的问题
  16. Arturia ARP 2600 V3 for Mac - 音响模拟合成工具
  17. 达梦数据库DEM(企业管理器)部署实战
  18. Keil5创建工程(STM32F407)
  19. 大数据医疗面临着哪些挑战?
  20. 现货白银走势图哪里看?

热门文章

  1. 2022年Android面试题及答案收集(不断更新中)
  2. 【Java】【LeecCode34】在排序数组中查找元素的第一个和最后一个位置
  3. 屌丝程序员赚钱之道 之APP
  4. ATF(Adobe Texture Format)简介
  5. 30 个高质量的知识星球推荐给你
  6. JavaScript基础 实现动态创建列表
  7. Dubbo夺命17连问
  8. hrms系统的服务器名是什么,解读HRMS.doc
  9. 软件生存周期阶段及任务简述
  10. 史上最简单的 MySQL 教程(五)「SQL 基本操作 之 表操作」