本人近期开始巩固复习了Oracle数据库的SQL语句语法
这是本人的笔记,发布出来1、是便于查找 2、是希望帮助初学者找到可以借鉴的东西
由于记得匆忙不排除字符错误,有的符号会使用中文记录,复制改为英文即可。仅供参考,以后我也会继续分享自己的学习笔记用于督促自己和大家共享知识,欢迎大家支持点赞和参与讨论,愿与诸君共勉!
DESC v_emp_10
160.简单视图:对应的子查询中不含有关联查询,查询字段不包含函数,表达式等,没有分组,没有去重
复杂视图:包含链接视图
反之
161.简化复杂查询
限制数据访问
162.对视图进行DML操作
仅能对简单视图进行DML操作.
对视图进行DML操作就是对视图数据来源的基础表进行的操作,操作不当可能对基础表进行数据污染
163.INWERT INTO v_emp_10 (id,name,salary,deptno)VALUES (1001,’JACK’,2000,10)
164.UPDATE v_emp_10 SET deptno=20
更新同样存在更新后对数据不可控的情况
165.删除不会对基础表产生数据污染
DELECTE v_emp_10 WHERE deptno=20
166.创建具有WITH CHECK OPTION约束的视图
为视图添加检查选项,可以保证对视图的DML 操作后视图对其可见,否则不允许该DML操作,这样避免了对基础表进行数据污染
167.CREATR OR REPLACE VIEW v_emp_10 AS SELECT empno id, ename name,sal salary,deptno FROM emp WHERE deptno=10 WITH CHECK OPTION
涉及增加,修改
无法避免违反基表约束条件
168.为视图添加只读选项,那么该视图不允许进行DML操作
WITH READ ONLY
169.CREATR OR REPLACE VIEW v_emp_10 AS SELECT empno id, ename name,sal salary,deptno FROM emp WHERE deptno=10 WITH READ ONLY
170.数据字典
user_objects 数据库中全是大写
创建过的所有数据库对象
USER_VIEWS
创建所有视图的名字
SELECT TEXT,VIEW_name FROM USER_VIEWS
USER_TABLES
创建所有数据表的名字
SELECT table_name FROM USER_TABLES
USER_UPDATE_COLUMNS
171.复杂视图
创建一个含有公司部门工资情况的视图,内容为:部门编号,部门名称,部门的最高,最低,平均,以及工资总和信息。
CREATE VIEW v_dept_sal AS SELECT d.deptno,d.dname,MIN(e.sal)min_sal,MAX (e.sal)max_sal,AVG(e.sal)avg_sal,SUM(e.sal)sum_sal FROM enp e,dept d WHERE e.deptno=d.deptno GROUP BY d.deptno,d.dname
172.查看谁比自己所在部门平均工资高
SELECT e. ename,e. sal,e. deptno From emp e,v_dept_sal v WHERE e.deptno=v.deptno AND e.sal>v. avg_sal
173.删除视图 DROP VIEW v_emp_10
对视图的删除不会导致基表数据的丢失,不会影响基表数据
但是删除视图数据会对应将基表数据删除
174.序列
创建序列
序列也是数据库对象之一
作用是生成一系列数字
序列常用与为某张表的主键字段提供值使用
CREATE SEQUENCE sep_emp_id
START WITH 1
INCREMENT BY 1
USER_SEQUENCE
用户创建的序列
175.序列有两个伪列
NEXTVAL:获取序列下一个值
若是新创建的序列,那么第一次返回调用的是 START WITH 指定的值,以后每次调用都会得到当前序列值加上步长后的数字.
NEXTVAL 会导致序列步进,且序列不能回退
CURRVAL:获取序列当前值,即:最后一次调用NEXTVAL后得到的值,CURRVAL 不会导致步进.但是新创建的序列至少调用一次NEXTVAL后才可以使用CURRVAL
SELECT seq_emp_id.NEXTVAL FROM dual
SELECT seq_emp_id.CURRVAL FROM dual
回退,不步进
176.使用序列为EMP表中信插入
INSERT INTO emp (empno,ename,sal,job,deptno)VALUES(seq_emp_id.NEXTVAL,’JACK’,3000,’CLERK’,10)
177.CHCHE 序列缓存
默认缓存20
两个表容易序列断裂
服务器断电序列断裂
178.删除序列 DROP SEQUENCE seq_emp_id
179.索引
加快查询效率
LIKE不会用到索引
自动使用索引
索引是数据库对象之一,
索引是为了提高查询效率
索引的统计与应用是数据库自动完成的只要数据库认为可以使用某个已创建的索引时就会自动应用
180.CREATE INDEX idx_emp_ename ON emp(ename)
181.复合索引 :多列加
CREATE INDEX idx_emp_sal ON emp(job,sal)
SELECT empno ,ename,sal,job FROM emp ORDER BY job,sal
必须按顺序
182.给函数加索引
CREATE INDEX emp_ename_upper_idx ON emp(UPPER(ename))
SELECT * FROM emp WHERE UPPER (ename)=’KING’
183.修改
重建索引
ALTER INDEX idx_emp_ename REBUILD
删除索引
DROP INDEX idx_emp_ename
184.非空约束
CRAETE TABLE employee(eid NUMBER (6),name VARCHAR2(30) NOT NULL,salary NUMBER (7,2),hiredate DATE CONSTRAINT employee_hiredate_nn NOT NULL)
185.修改表示添加非空约束
可以在建表之后,通过修改表的定义,添加非空约束
ALTER TABLE employee MODIFY(eid NUMBER(6) NOT NULL)
186.取消非空约束
ALTER TABLE employee MODIFY(eid NUMBER(6) )
ALTER TABLE employee MODIFY(eid NUMBER(6) NULL)
两个都可以,下面最有效
187.唯一性约束
唯一性约束可以保证表中该字段的值
任何一条记录都不可以重复,NULL除外.
CRAETE TABLE employee(eid NUMBER (6) UNIQUE,name VARCHAR2(30), email VARCHAR2(50),salary NUMBER(7,2), CONSTRAINT employee_employee_uk UNIQUE(email) )
NULL可以重复
188.添加唯一性约束
在建表之后增加唯一约束条件
:
ALTER TABLE employee ADD CONSTRAINT employee_name_uk UNIQUE(name)
189,主键约束
NOT NULL
联合主键
一张表只有能有一个字段添加主键约束
190.
CRAETE TABLE employee(
eid NUMBER (6) PRIMARY KEY,
name VARCHAR2(30),
email VARCHAR2(50),
salary NUMBER(7,2),
hiredate DATE
)
主键非空且唯一
191.ALTER TABLE employee ADD CONSTRAINT employee3_eid_pk PRIMARY KEY(eid)
192.外键约束
几乎不添加
要么主键有,要么是NULL
主键删除必须外键中没有
对主键外键都有要求
193.检查约束 CHECK
ALTER TABLE employee ADD CONSTRAINT employee_salary_check CHECK (salary>2000)