Oracle 学习笔记(二)

知识概要:

1.子查询

2.集合操作

3.DML语句操作

4.其他数据库对象

1.子查询

查询工资比SCOTT高的员工信息

1  select *

2  from emp

3  where sal > (select sal

4               from emp

5               where ename='SCOTT');

SQL> 注意的问题

SQL> 1. 括号

SQL> 2. 合理的书写风格

SQL> 3. 可以在主查询的where select having from后面放置子查询

SQL> 4. 不可以在group by后面放置子查询

SQL> 5. 强调from后面的子查询

SQL> 6. 主查询和子查询可以不是同一张表;只要子查询返回的结果,主查询可以使用即可

SQL> 7. 一般不在子查询中使用order by;但在Top-N分析问题中,必须对子查询排序

SQL> 8. 一般先执行子查询 再执行主查询;但相关子查询例外

SQL> 9. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符

SQL> 10. 子查询中的null值

3可以在主查询的where select having from后面放置子查询

select empno,ename,sal,(select job from emp where empno=7839) 值  from emp;

5. 强调from后面的子查询

SQL> --查询员工的姓名和薪水

SQL> select * from (select ename,sal from emp);

select * from (select ename,sal,sal*12 annlsal from emp)

6. 主查询和子查询可以不是同一张表;只要子查询返回的结果,主查询可以使用即可

查询部门名称是SALES的员工

select *

2  from emp

3  where deptno=(select deptno

4                from dept

5*               where dname='SALES')

select *

2  from emp

3  where deptno=(select deptno

4                from dept

5*               where dname='SALES')

In 查询部门名称是SALES和ACCOUNTING的员工

select * from emp  where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

-any 和集合中的任意一个值比较  查询工资比30号部门任意一个员工高的员工信息

select *

2  from emp

3  where sal > any (select sal from emp where deptno=30);

all: 和集合中的所有值比较

SQL> --查询工资比30号部门所有员工高的员工信息

select *

2  from emp

3  where sal > all (select sal from emp where deptno=30)

-多行子查询中的null

-查询不是老板的员工

select *

2  from emp

3  where empno not in (select mgr from emp where mgr is not null);

2集合运算

UNION 返回两个集合去掉重复部分后的所有的数据

UNION ALL  返回两个集合的所有数据包括重复的

INSTERSECT

MINUS

SQL> 查询10和20号部门的员工

SQL> select * from emp where deptno=10

2  union

3  select * from emp where deptno=20;

SQL> /*

SQL> 注意的问题:

SQL> 1。 参与运算的各个集合必须列数相同 且类型一致

SQL> 2. 采用第一个集合的表头作为最后的表头

SQL> 3. 如果排序,order by必须在最后一个集合后

SQL> 4. 括号

SQL> */

INSTERSECT

select ename, sal from emp

where sal between 700 and 1300

INSTERSECT

select ename ,sal from emp

where sal between 1201 and 1400

minus

select ename, sal from emp

where sal between 700 and 1300

minus

select ename ,sal from emp

where sal between 1201 and 1400

3. DML 数据操作语言

SQL语言的类型

DML(Data Manipulation Language 数据操作语言): insert update delete select

DDL(Data Definition Language 数据定义语言): create/alter/drop/truncate table

DCL(Data Control Language 数据控制语言):grant revoke(参考:26-管理用户安全.avi)

INSERT

insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);

输入 empno 的值:  1002

输入 ename 的值:  'Mike'

输入 sal 的值:  3000

输入 deptno 的值:  10

原值    1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)

新值    1: insert into emp(empno,ename,sal,deptno) values(1002,'Mike',3000,10)

SELECT &t

SQL> select empno,ename,&t

2  from emp;

输入 t 的值:  sal

原值    1: select empno,ename,&t

新值    1: select empno,ename,sal

Delete 和 truncate的区别

SQL> delete和truncate区别

SQL> 1. delete是逐条删除 truncate先摧毁表 再重建

SQL> 2. ****delete是DML(可以回滚) truncate是DDL(不可以回滚)

SQL> 3. delete不会释放空间 truncate会

SQL> 4. delete会产生碎片 truncate不会

SQL> 5. delete可以闪回 truncate不可以闪回(flashback)

SQL> */

SQL> --问题:数据在delete后,rollback前,数据在哪里?

SQL> --undo表空间 (还原表空间)

SQL> host cls

SQL> 事务的标志

SQL> 1. 起始标志: 事务中,第一条DML语句

SQL> 2. 结束标志: 提交 显式commit

SQL>                    隐式 正常退出exit,DDL,DCL

SQL>               回滚 显式rollback

SQL> create table testsavepoint

2  (tid number,

3   tname varchar2(20));

表已创建。

SQL> insert into testsavepoint values(1,'Tom');

已创建 1 行。

SQL> insert into testsavepoint values(2,'Mike');

已创建 1 行。

SQL> select * from testsavepoint;

TID TNAME

---------- --------------------

1 Tom

2 Mike

已选择 2 行。

SQL> insert into testsavepoint values(3,'Mara');

已创建 1 行。

SQL> select * from testsavepoint;

TID TNAME

---------- --------------------

1 Tom

2 Mike

3 Mara

已选择 3 行。

SQL> --定义保存点

SQL> savepiont a;

SP2-0734: 未知的命令开头 "savepiont ..." - 忽略了剩余的行。

SQL> savepoint a;

保存点已创建。

SQL> insert into testsavepoint values(4,'Jona');

已创建 1 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from testsavepoint;

TID TNAME

---------- --------------------

1 Tom

2 Mike

3 Mara

已选择 3 行。

SQL> commit;

提交完成。

SQL> set transaction read only;

事务处理集。

SQL> select * from testsavepoint;

TID TNAME

---------- --------------------

1 Tom

2 Mike

3 Mara

已选择 3 行。

SQL> insert into testsavepoint values(4,'Jona');

insert into testsavepoint values(4,'Jona')            *

第 1 行出现错误:

ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作

SQL> rollback;

回退已完成。

4. 创建和管理表

典型例子

SQL> --创建表,保存20号部门的员工

SQL> create table emp20

2  as

3  select * from emp where deptno=20;

表已创建。

SQL> select * from emp20;

EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO

---------- ---------- --------- ---------- -------------- ---------- ---------- ----------       -------------------------------------------------

7369 SMITH      CLERK           7902 17-12月-80            800                    20

7566 JONES      MANAGER         7839 02-4月 -81           2975                   20

7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20

7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20

7902 FORD       ANALYST         7566 03-12月-81           3000                     20

--修改表:追加新列,修改列,删除列 重命名列

alter table test1 add photo blob;

alter table test1 modify tname varchar2(40);

alter table test1 drop column photo;

alter table test1 rename column tname to username;

rename test1 to test2;

SQL> --Oracle回收站

SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                              OBJECT TYPE  DROP TIME

---------------- ------------------------------ ------------ -------------------    ------------------------------------------------------

TESTDELETE       BIN$xACLjXLhTxSlyUGR0JNdWA==$0 TABLE        2014-09-18:16:02:15

清空回收站

SQL> purge recyclebin;

回收站已清空。

在回收站中查找曾经删除过的表

select * from "BIN$nLj3MpCTTuaZoq2RJ4P2Pw==$0";

SQL> create table student

2  (

3     sid number constraint student_PK primary key,

4     sname varchar2(20) constraint student_name_notnull not null,

5     gender varchar2(4) constraint student_gender check (gender in ('男','女')),

6     email varchar2(40) constraint student_email_unique unique

7     constraint student_email_notnull not null,

8     deptno number constraint student_FK references dept(deptno) on delete set null

9  );

5 其他数据对象

View

SQL> create view empinfoview

2  as

3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname

4  from emp e,dept d

5  where e.deptno=d.deptno;

-序列 sequence

create sequence myseq;

insert into testseq values(myseq.nextval,'aaa');

已创建 1 行。

索引 index

SQL>  create index myindex

2    on emp(deptno);

同义词

create synonym hremp for hr.employees;

create synonym hremp for hr.employees

*

第 1 行出现错误:

ORA-01031: 权限不足

SQL> /

同义词已创建。

SQL> select count(*) from hremp;

COUNT(*)

-----------------------

107

已选择 1 行。

SQL> spool off

Oracle 之——子查询 DDL DML 集合 及其他数据对象的更多相关文章

  1. Oracle 通过子查询批量添加、修改表数据

    1.通过查询快速创建表 create table test1(id,job,mgr,sal) as () ) ---这是一个分页查询 ok,表创建成功 2.通过查询快速创建视图 create or r ...

  2. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  3. in的对象选择(子查询还是List集合),in 的优化,in与exists

    近日查看SQL慢查询日志,发现对于in的查询总是出现超时问题.超时相关SQL语句:select * from flow_ru_bizvar where businessId IN () and sta ...

  4. oracle数据库子查询的结果需要使用多次解决办法

    with c as (select a.trandt,sum(a.tranam) tranam from tran a group by a.trandt )--将子查询抽取出来,以后可以直接用.该方 ...

  5. Oracle【子查询】

    Oracle子查询:当一个查询依赖于另外一个查询的结果的时候,就需要使用子查询.单行子查询 :筛选条件不明确,需要执行一次查询且查询结果只有一个字段且字段值只有一个.注意:where子句中允许出现查询 ...

  6. Oracle之子查询:Top-N问题

    学习了SQL子查询,遇到个Top-N问题,即:加入有张工资表(这里使用Oracle SCOTT用户的emp表),需要查找工资最高的3个员工信息,以下列格式输出: 乍眼一看,这很简单啊,对sal进行排序 ...

  7. Oracle Day04 子查询

    1.子查询解决什么问题: 当一个简单的查询查询不到结果的时候,可以使用子查询来丰富查询的条件以达到显示结果的目的. 子查询的格式: 用一个小括号包含,然后在里面写sql语句2.子查询的注意事项: 1) ...

  8. oracle之子查询、创建用户、创建表、约束

      子查询                                    子查询可以分为单行子查询和多行子查询   单行子查询           [1] 将一个查询的结果作为另外一个查询的条 ...

  9. Oracle - 为子查询提供动态结果集

    曾经遇到过这样一个需求:要求为method传入String,内容如"用户ID0,用户ID1,用户ID2...",然后根据这些ID返回一个结果集作为数据表供别人查询. SELECT ...

随机推荐

  1. 求N个元素的子集合个数

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt406 一个集合有n个元素,请问怎么算出来它的子集(包括空集和本身)是 2的n ...

  2. NHibernate教程(19) —— 一级缓存

    本节内容 引入 NHibernate一级缓存介绍 NHibernate一级缓存管理 结语 引入 大家看看上一篇了吗?对象状态.这很容易延伸到NHibernate的缓存.在项目中我们灵活的使用NHibe ...

  3. JPG、PNG和GIF图片的基本原理及优…

    JPG.PNG和GIF图片的基本原理及优化方法 一提到图片,我们就不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的.这些点可以进行不同的 ...

  4. 结对编程1.四则运算GUI版

    201421123022 王若凡        201421123026  欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ...

  5. SNS团队第三次站立会议(2017.04.24)

    一.当天站立式会议照片 本次会议主要内容:汇报工作进度,根据完成情况调整进度 二.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 相关数据库文件建立起来  完善数据库文件 龚晓婷 研 ...

  6. 团队作业8——第二次项目冲刺(Beta阶段)5.21

    1.当天站立式会议照片 会议内容: 本次会议为第三次会议 本次会议在陆大楼2楼召开,本次会议内容: ①:检查总结第二次任务完成情况 ②:布置第三次任务的详细分工 ③:规定完成时间是在第四次任务之前 ④ ...

  7. 第03周-Java作业评价

    1.作业存在的问题 几大扣分点: 思维导图敷衍了事 -1 代码格式混乱 -2 无码云提交记录 -2 无PTA实验总结 -2 部分题目未完成. 格式问题:到现在还搞不清楚的,主要是态度问题.相关的教程 ...

  8. Swing-布局管理器之BorderLayout(边界布局)-入门

    注:本文内容基本源于Java图形化界面设计——布局管理器之BorderLayout(边界布局),笔者学习过程中根据自身理解进行少量编辑. 边界布局管理器(BorderLayout)把容器的的布局分为五 ...

  9. 201521123022 《Java程序设计》第三周学习总结

    1.本周学习总结 2.书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; pu ...

  10. 201521123063 java第一周总结

    20152112306 <Java程序设计>第一周学习总结 1.本周学习总结(2.20-2.26) java语言的特点: (1)简约且简单 (2)平台无关性 (3)面向对象 (4)多线程. ...