码迷,mamicode.com
首页 > 数据库 > 详细

其它数据库对象

时间:2016-08-24 19:11:29      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

 

 

范例:创建一张基本工资大于2000的雇员信息的视图

CREATE VIEW v_myview

AS

SELECT * FROM emp WHERE sal>2000 ;

 

范例:查看视图是否已经创建

SELECT * FROM tab WHERE tabtype=‘VIEW‘ ;

 

范例:查询v_myview视图

SELECT * FROM v_myview ;

 

范例:查询user_views数据字典

SELECT view_name,text_length,text FROM user_views ;

 

范例:创建一张只包含20部门雇员信息的视图

CREATE VIEW v_emp20

AS

SELECT * FROM emp WHERE deptno=20 ;

 

范例:查询user_views数据字典,观察视图是否已经成功创建

SELECT view_name,text_length,text FROM user_views ;

 

范例:查询v_emp20的视图

SELECT * FROM v_emp20 ;

 

范例:替换v_myview视图 —— 定义新视图,可以显示每个部门的详细信息。

CREATE OR REPLACE VIEW v_myview

AS

SELECT d.deptno,d.dname,d.loc,

COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0) avg,NVL(SUM(sal),0) sum,

        NVL(MAX(sal),0) max,NVL(MIN(sal),0) min

FROM emp e,dept d

WHERE e.deptno(+)=d.deptno

GROUP BY d.deptno,d.dname,d.loc ;

 

范例:查询v_myview视图

SELECT * FROM v_myview ;

 

范例:为视图中查询的列起别名

CREATE OR REPLACE VIEW v_myview

(部门编号,部门名称,位置,人数,平均工资,总工资,最高工资,最低工资)

AS

SELECT d.deptno,d.dname,d.loc,

COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0) avg,NVL(SUM(sal),0) sum,

        NVL(MAX(sal),0) max,NVL(MIN(sal),0) min

FROM emp e,dept d

WHERE e.deptno(+)=d.deptno

GROUP BY d.deptno,d.dname,d.loc ;

 

范例:查询v_myview视图

SELECT * FROM v_myview ;

 

范例:定义只包含20部门雇员信息的视图

CREATE OR REPLACE VIEW v_emp20

AS

SELECT empno,ename,job,sal,deptno FROM emp WHERE deptno=20 ;

 

范例:查询v_emp20数据

SELECT * FROM v_emp20 ;

 

范例:v_emp20视图之中增加一条新数据

INSERT INTO v_emp20(empno,ename,job,sal,deptno) VALUES (6688,‘魔乐‘,‘CLERK‘,1900,20) ;

COMMIT ;

 

范例:查询v_emp20视图当前数据

SELECT * FROM v_emp20 ;

 

范例:查询emp表中所有20部门雇员的详细信息

SELECT * FROM emp WHERE deptno=20 ;

 

范例:对视图执行修改操作

UPDATE v_emp20 SET ename=‘MLDNJAVA‘,job=‘MANAGER‘,sal=2300 WHERE empno=6688 ;

COMMIT ;

 

范例:查询v_emp20视图

SELECT * FROM v_emp20 ;

 

范例:查询emp表中所有20部门雇员的详细信息

SELECT * FROM emp WHERE deptno=20 ;

 

范例:删除v_emp20视图中的数据

DELETE FROM v_emp20 WHERE empno=6688 ;

COMMIT ;

 

范例:查询v_emp20视图

SELECT * FROM v_emp20 ;

 

范例:查询emp表记录

SELECT * FROM emp WHERE deptno=20 ;

 

范例:创建一个视图,要求显示所有20部门中的雇员编号、姓名、职位、基本工资、部门编号、部门名称、位置

CREATE OR REPLACE VIEW v_myview AS

SELECT e.empno,e.ename,e.job,e.sal,d.deptno,d.dname,d.loc

FROM emp e,dept d

WHERE e.deptno=d.deptno AND d.deptno=20 ;

 

范例:v_myview视图

SELECT * FROM myview ;

 

范例:v_myview视图之中增加一条数据

INSERT INTO v_myview (empno,ename,job,sal,deptno,dname,loc) VALUES (6688,‘魔乐‘,‘CLERK‘,2000,50,‘教学‘,‘北京‘) ;

 

范例:修改v_myview视图中的数据

UPDATE v_myview SET ename=‘史密斯‘,sal=5000,dname=‘教学‘ WHERE empno=7369 ;

 

范例:删除v_myview视图中的数据

DELETE FROM v_myview WHERE empno=7369 ;

 

范例:删除视图之中所有20部门雇员的信息

DELETE FROM v_myview WHERE deptno=20 ;

 

范例:查询emp表记录中所有20部门雇员信息

SELECT * FROM emp WHERE deptno=20 ;

 

范例:查询dept表记录

SELECT * FROM dept ;

 

范例:创建一张只包含20部门雇员信息的视图 —— v_emp20

CREATE OR REPLACE VIEW v_emp20

AS

SELECT * FROM emp WHERE deptno=20 ;

 

范例:查询user_views数据字典

SELECT view_name,text_length,text FROM user_views ;

 

范例:查询v_emp20视图

SELECT * FROM v_emp20 ;

 

范例:修改v_emp20视图中的部门编号

UPDATE v_emp20 SET deptno=40 WHERE empno=7369 ;

 

范例:查询v_emp20视图的数据

SELECT * FROM v_emp20 ;

 

范例:查询emp表中的雇员编号为7369的雇员信息

SELECT * FROM emp WHERE empno=7369 ;

 

范例:替换v_emp20视图,加入WITH CHECK OPTION子句

CREATE OR REPLACE VIEW v_emp20

AS

SELECT * FROM emp WHERE deptno=20

WITH CHECK OPTION CONSTRAINT v_emp20_CK ;

 

范例:更新v_emp20视图,将雇员编号为7369的部门编号修改为40

UPDATE v_emp20 SET deptno=40 WHERE empno=7369 ;

 

范例:更新v_emp20视图,将雇员编号是7369的雇员姓名(ename)修改为“史密斯”,奖金(comm)修改为300

UPDATE v_emp20 SET ename=‘史密斯‘,comm=300 WHERE empno=7369 ;

 

范例:查询v_emp20视图中的数据

SELECT * FROM v_emp20 ;

 

范例:创建视图,使用WITH READ ONLY子句进行限制

CREATE OR REPLACE VIEW v_emp20

AS

SELECT * FROM emp WHERE deptno=20

WITH READ ONLY ;

 

范例:查询user_views数据字典

SELECT view_name,text_length,text,read_only FROM user_views ;

 

范例:更新视图信息

UPDATE v_emp20 SET ename=‘SMITH‘,comm=null WHERE empno=7369 ;

 

范例:删除v_myview视图

DROP VIEW v_myview ;

 

范例:查询user_views数据字典

SELECT view_name,text_length,text,read_only FROM user_views ;

 

范例:创建一个myseq的默认序列

CREATE SEQUENCE myseq ;

 

范例:查询数据字典 —— user_sequences

SELECT * FROM user_sequences ;

 

范例:通过nextval属性操作序列

SELECT myseq.nextval FROM dual ;

 

范例:通过currval属性操作序列

SELECT myseq.currval FROM dual ;

 

范例:member表的数据库创建脚本

DROP TABLE member PURGE ;

CREATE TABLE member (

  mid   NUMBER        ,

  name  VARCHAR2(50)  NOT NULL ,

  CONSTRAINT pk_mid PRIMARY KEY(mid)

) ;

 

范例:通过数据字典查看member表是否已经成功创建

SELECT * FROM tab ;

 

范例:编写数据插入语句,向member表中增加记录

INSERT INTO member (mid,name) VALUES (myseq.nextval,‘魔乐科技软件学院(MLDN‘) ;

 

范例:检索全部member表数据

SELECT * FROM member ;

 

范例:删除myseq序列

DROP SEQUENCE myseq ;

 

范例:查询全部的序列

SELECT * FROM user_sequences ;

 

范例:创建一个新的序列,让其每次的增长步长3

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq INCREMENT BY 3 ;

 

范例:通过user_sequences数据字典查询序列是否已经成功创建

SELECT sequence_name,increment_by FROM user_sequences ;

 

范例:调用nextval属性,操作序列(本语句将执行三次)

SELECT myseq.nextval FROM dual ;

 

范例:创建序列,让其初始值设置为30,每次增长步长为2

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq

INCREMENT BY 3 

START WITH 30 ;

 

范例:操作myseq序列,调用三次nextval属性观察结果

SELECT myseq.nextval FROM dual ;

 

范例:创建序列,缓存设置为100

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq CACHE 100 ;

 

范例:通过user_sequences数据字典表,查询序列信息

SELECT cache_size,last_number FROM user_sequences ;

 

范例:创建序列,不使用缓存

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq NOCACHE ;

 

范例:通过user_sequences数据字典表,查询序列信息

SELECT cache_size,last_number FROM user_sequences ;

 

范例:创建循环序列,让序列的内容在13579之间循环

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq

START WITH 1

INCREMENT BY 2

MAXVALUE 10

MINVALUE 1

CYCLE

CACHE 3 ;

 

范例:通过user_sequeces数据字典查询序列信息

SELECT sequence_name,max_value,min_value,increment_by,cache_size FROM user_sequences ;

 

范例:创建一个基本序列

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq ;

 

范例:通过user_sequences数据字典查看所有序列

SELECT * FROM user_sequences ;

 

范例:修改myseq序列

ALTER SEQUENCE myseq

INCREMENT BY 10

MAXVALUE 98765

CACHE 100 ;

 

范例:通过user_sequences数据字典查看所有序列

SELECT * FROM user_sequences ;

 

范例:创建带有自动增长列的数据表

DROP TABLE mytab PURGE ;

CREATE TABLE mytab (

mid NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) ,

name VARCHAR2(20) NOT NULL ,

CONSTRAINT pk_mid PRIMARY KEY(mid)

) ;

 

范例:察看数据字典

SELECT sequence_name,min_value,max_value,increment_by FROM user_sequences ;

 

范例:增加表数据

INSERT INTO mytab(name) VALUES (‘魔乐科技‘) ;

INSERT INTO mytab(name) VALUES (‘MLDN‘) ;

INSERT INTO mytab(name) VALUES (‘李兴华‘) ;

COMMIT ;

 

范例:查询mytab表数据,观察自动增长列

SELECT * FROM mytab ;

 

范例:清空回收站,此时自动序列删除

PURGE recyclebin ;

 

范例:使用sys登陆,并查询是否存在dual

SELECT * FROM tab WHERE TNAME=‘DUAL‘ ;

 

范例:现在为c##scott.emp表创建一个同义词为myemp

CONN sys/change_on_install AS SYSDBA ;

CREATE SYNONYM myemp FOR c##scott.emp ;

 

范例:查询myemp同义词是否成功创建

SELECT * FROM user_synonyms WHERE synonym_name=‘MYEMP‘ ;

 

范例:查询同义词 —— myemp

SELECT * FROM myemp ;

 

范例:使用system用户登录,并查询myemp这个同义词

CONN system/manager;

SELECT * FROM myemp ;

 

范例:删除myemp同义词

DROP SYNONYM myemp ;

 

范例:验证myemp同义词是否被删除

SELECT * FROM user_synonyms WHERE synonym_name=‘MYEMP‘ ;

 

范例:创建公共同义词 —— myemp

CREATE PUBLIC SYNONYM myemp FOR c##scott.emp ;

 

范例:观察ROWID的存在

SELECT ROWID,deptno,dname,loc FROM dept ;

 

范例:拆分ROWID,取数据

SELECT ROWID ,

DBMS_ROWID.rowid_object(ROWID) 数据对象号 ,

DBMS_ROWID.rowid_relative_fno(ROWID) 相对文件号 ,

DBMS_ROWID.rowid_block_number(ROWID) 数据块号 ,

DBMS_ROWID.rowid_row_number(ROWID) 数据行号,

deptno,dname,loc

FROM dept ;

 

范例:dept表中的数据复制到mydept表中

DROP TABLE mydept PURGE ;

CREATE TABLE mydept AS SELECT * FROM dept ;

 

范例:mydept表中增加一些数据

INSERT INTO mydept(deptno,dname,loc) VALUES (10,‘ACCOUNTING‘,‘NEW YORK‘) ;

INSERT INTO mydept(deptno,dname,loc) VALUES (10,‘ACCOUNTING‘,‘NEW YORK‘) ;

INSERT INTO mydept(deptno,dname,loc) VALUES (20,‘RESEARCH‘,‘DALLAS‘) ;

INSERT INTO mydept(deptno,dname,loc) VALUES (20,‘RESEARCH‘,‘DALLAS‘) ;

INSERT INTO mydept(deptno,dname,loc) VALUES (20,‘RESEARCH‘,‘DALLAS‘) ;

COMMIT ;

 

范例:查询mydept

SELECT ROWID,deptno,dname,loc FROM mydept ;

 

范例:mydept表分组,统计出唯一的ROWID数据

SELECT deptno,dname,loc,MIN(ROWID)

FROM mydept

GROUP BY deptno,dname,loc ;

 

范例:编写删除语句删除重复数据

DELETE FROM mydept

WHERE ROWID NOT IN(

SELECT MIN(ROWID)

FROM mydept

GROUP BY deptno) ;

 

范例:查询雇员编号、姓名、职位、基本工资、雇佣日期等信息并且显示每条记录的行号

SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp ;

 

范例:查询30部门的雇员编号、姓名、职位、基本工资、雇佣日期等信息并且显示每条记录的行号

SELECT ROWNUM,empno,ename,job,sal,hiredate FROM emp WHERE deptno=30 ;

 

范例:列出薪金高于公司平均薪金的所有员工编号、姓名、基本工资、职位、雇佣日期,所在部门名称、位置,公司的工资等级,但是为了信息浏览方便,要求在每一行数据显示前都增加一个行号。

SELECT AVG(sal) FROM emp ;

SELECT e.empno,e.ename,e.sal,e.job,e.hiredate

FROM emp e

WHERE e.sal> (

    SELECT AVG(sal) FROM emp) ;

SELECT e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc

FROM emp e,dept d

WHERE e.sal> (

    SELECT AVG(sal) FROM emp)

    AND e.deptno=d.deptno ;

第四步:根据雇员的工资与salgrade表联合查询,显示出雇员的工资等级

SELECT e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc,s.grade

FROM emp e,dept d,salgrade s

WHERE e.sal> (

    SELECT AVG(sal) FROM emp)

    AND e.deptno=d.deptno

    AND e.sal BETWEEN s.losal AND s.hisal ;

SELECT ROWNUM rn,e.empno,e.ename,e.sal,e.job,e.hiredate,d.dname,d.loc,s.grade

FROM emp e,dept d,salgrade s

WHERE e.sal> (

    SELECT AVG(sal) FROM emp)

    AND e.deptno=d.deptno

    AND e.sal BETWEEN s.losal AND s.hisal ;

 

范例:查询emp表中的第一行雇员信息

SELECT * FROM emp WHERE ROWNUM=1 ;

 

范例:显示雇员表中前5条记录

SELECT * FROM (

SELECT empno,ename,job,hiredate,sal,mgr,deptno,ROWNUM rn

FROM emp WHERE ROWNUM<=5) temp

WHERE temp.rn>0 ;

 

范例:显示雇员表中的6~10条记录

SELECT * FROM (

SELECT empno,ename,job,hiredate,sal,mgr,deptno,ROWNUM rn

FROM emp WHERE ROWNUM<=10) temp

WHERE temp.rn>5 ;

 

范例:取得emp表中的前5行纪录

SELECT * FROM emp FETCH FIRST 5 ROW ONLY;

 

范例:为数据排序,取得前5行纪录

SELECT *

FROM emp

ORDER BY sal DESC

FETCH FIRST 5 ROW ONLY;

 

范例:取得表中4~5条纪录

SELECT *

FROM emp

ORDER BY sal DESC

OFFSET 3 ROWS FETCH NEXT 2 ROWS ONLY ;

 

范例:按百分比取部分数据

SELECT *

FROM emp

ORDER BY sal DESC

FETCH NEXT 10 PERCENT ROWS ONLY ;

 

范例:查询工资大于1500的全部雇员

SELECT * FROM emp WHERE sal>1500 ;

 

范例:使用自动跟踪功能

CONN sys/change_on_install AS SYSDBA ;

SET AUTOTRACE ON ;

 

范例:根据ROWID查找雇员信息

SELECT * FROM c##scott.emp WHERE rowid=‘AAAWeeAAGAAAADGAAA‘ ;

 

范例:emp.sal字段上创建emp_sal_ind索引

CREATE INDEX emp_sal_ind ON emp(sal) ;

 

范例:通过“user_indexes”数据字典查看索引

SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;

 

 

范例:查询emp_sal_ind索引设置列

SELECT * FROM user_ind_columns WHERE index_name=‘EMP_SAL_IND‘ ;

 

范例:hiredate字段上设置降序索引

CREATE INDEX emp_hiredate_ind_desc ON emp(hiredate) ;

 

范例:查询在1981年雇佣的雇员信息

SELECT *

FROM c##scott.emp

WHERE hiredate BETWEEN TO_DATE(‘1981-01-01‘,‘yyyy-mm-dd‘) AND TO_DATE(‘1981-12-31‘,‘yyyy-mm-dd‘)

ORDER BY hiredate DESC ;

 

范例:创建函数索引

CREATE INDEX emp_ename_ind ON emp(LOWER(ename)) ;

 

范例:执行雇员姓名查询

SELECT * FROM c##scott.emp WHERE LOWER(ename)=‘smith‘ ;

 

范例:deptno字段上设置位图索引

CREATE BITMAP INDEX emp_deptno_ind ON emp(deptno) ;

 

范例:根据部门编号查找雇员信息

SELECT * FROM c##scott.emp WHERE deptno=10 ;

SELECT * FROM c##scott.emp WHERE deptno=10 AND deptno=20 ;

 

范例:通过“user_indexes”数据字典查看索引

SELECT index_name , index_type , table_owner , table_name , uniqueness , status FROM user_indexes ;

 

范例:删除emp_sal_ind索引

DROP INDEX emp_sal_ind ;

其它数据库对象

标签:

原文地址:http://www.cnblogs.com/doudouxiaoye/p/5804045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!