您的位置:首页 > 数据库 > Oracle

oracle,重点处理数据语句

2015-11-10 13:24 471 查看
SQL> select count(*) Total,sum(decode(to_char(hiredate,’yyyy’),’1980’,1,0)) “1980”,

2 sum(decode(to_char(hiredate,’yyyy’),’1981’,1,0)) “1981”,

3 sum(decode(to_char(hiredate,’yyyy’),’1982’,1,0)) “1982”,

4 sum(decode(to_char(hiredate,’yyyy’),’1987’,1,0)) “1987”

5 from emp;

TOTAL       1980       1981       1982       1987


14          1         10          1          2


SQL> host cls

SQL> /*

SQL> SQL语句

SQL> 1. DML语句(Data Manipulation Language 数据操作语言): insert update delete select

SQL> 2. ****DDL语句(Data Definition Language 数据定义语言): create/alter/drop/truncate table

SQL> create/drop view,create/drop index(sequence,synonym)**

SQL> 3. DCL语句(Data Control Language 数据控制语言): commit rollback

SQL> */

SQL> –插入insert

SQL> –插入新员工

SQL> desc emp

名称 是否为空? 类型

EMPNO NOT NULL NUMBER(4)

ENAME VARCHAR2(10)

JOB VARCHAR2(9)

MGR NUMBER(4)

HIREDATE DATE

SAL NUMBER(7,2)

COMM NUMBER(7,2)

DEPTNO NUMBER(2)

SQL> insert into emp(empno,ename,sal,deptno)

2 values(1001,’Tom’,1000,10);

已创建 1 行。

SQL> –隐式插入null值、显式插入空值

SQL> insert into emp(empno,ename,sal,hiredate,deptno)

2 values(1002,’Mary’,2000,sysdate,20);

已创建 1 行。

SQL> –地址符 &

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

输入 empno 的值: 1003

输入 ename 的值: ‘Mike’

输入 sal 的值: 3000

输入 deptno 的值: 20

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

新值 1: insert into emp(empno,ename,sal,deptno) values(1003,’Mike’,3000,20)

已创建 1 行。

SQL> /

输入 empno 的值: 1004

输入 ename 的值: ‘abc’

输入 sal 的值: 4000

输入 deptno 的值: 10

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

新值 1: insert into emp(empno,ename,sal,deptno) values(1004,’abc’,4000,10)

已创建 1 行。

SQL> insert into emp(empno,ename,sal,deptno) values(&empno,’&ename’,&sal,&deptno)

2 ;

输入 empno 的值: 1005

输入 ename 的值: fakfj

输入 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(1005,’fakfj’,3000,10)

已创建 1 行。

SQL> rollback;

回退已完成。

SQL> host cls

SQL> –在DML语句中使用地址符

SQL> select empno,ename,&a

2 from emp;

输入 a 的值: sal

原值 1: select empno,ename,&a

新值 1: select empno,ename,sal

EMPNO ENAME        SAL


7369 SMITH        800
7499 ALLEN       1600
7521 WARD        1250
7566 JONES       2975
7654 MARTIN      1250
7698 BLAKE       2850
7782 CLARK       2450
7788 SCOTT       3000
7839 KING        5000
7844 TURNER      1500
7876 ADAMS       1100

EMPNO ENAME        SAL


7900 JAMES        950
7902 FORD        3000
7934 MILLER      1300


已选择14行。

SQL> /

输入 a 的值: job

原值 1: select empno,ename,&a

新值 1: select empno,ename,job

EMPNO ENAME      JOB


7369 SMITH      CLERK
7499 ALLEN      SALESMAN
7521 WARD       SALESMAN
7566 JONES      MANAGER
7654 MARTIN     SALESMAN
7698 BLAKE      MANAGER
7782 CLARK      MANAGER
7788 SCOTT      ANALYST
7839 KING       PRESIDENT
7844 TURNER     SALESMAN
7876 ADAMS      CLERK

EMPNO ENAME      JOB


7900 JAMES      CLERK
7902 FORD       ANALYST
7934 MILLER     CLERK


已选择14行。

SQL> select * from &a;

输入 a 的值: dept

原值 1: select * from &a

新值 1: select * from dept

DEPTNO DNAME LOC

10 ACCOUNTING     NEW YORK
20 RESEARCH       DALLAS
30 SALES          CHICAGO
40 OPERATIONS     BOSTON


SQL> /

输入 a 的值: emp

原值 1: select * from &a

新值 1: select * from emp

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM DEPTNO


7369 SMITH      CLERK           7902 17-12月-80       800                20
7499 ALLEN      SALESMAN        7698 20-2月 -81      1600        300     30
7521 WARD       SALESMAN        7698 22-2月 -81      1250        500     30
7566 JONES      MANAGER         7839 02-4月 -81      2975                20
7654 MARTIN     SALESMAN        7698 28-9月 -81      1250       1400     30
7698 BLAKE      MANAGER         7839 01-5月 -81      2850                30
7782 CLARK      MANAGER         7839 09-6月 -81      2450                10
7788 SCOTT      ANALYST         7566 13-7月 -87      3000                20
7839 KING       PRESIDENT            17-11月-81      5000                10
7844 TURNER     SALESMAN        7698 08-9月 -81      1500          0     30
7876 ADAMS      CLERK           7788 13-7月 -87      1100                20

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM DEPTNO


7900 JAMES      CLERK           7698 03-12月-81       950                30
7902 FORD       ANALYST         7566 03-12月-81      3000                20
7934 MILLER     CLERK           7782 23-1月 -82      1300                10


已选择14行。

SQL> host cls

SQL> --一次插入(拷贝)一批数据

SQL> create table emp20 as select * from emp where 1=2;

表已创建。

SQL> desc emp20

名称 是否为空? 类型

EMPNO NUMBER(4)

ENAME VARCHAR2(10)

JOB VARCHAR2(9)

MGR NUMBER(4)

HIREDATE DATE

SAL NUMBER(7,2)

COMM NUMBER(7,2)

DEPTNO NUMBER(2)

SQL> select * from emp20;

未选定行

SQL> –一次性将emp中所有20号部门的员工插入到emp20

SQL> insert into emp20

2 select * from emp where deptno=20;

已创建5行。

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 13-7月 -87      3000                20
7876 ADAMS      CLERK           7788 13-7月 -87      1100                20
7902 FORD       ANALYST         7566 03-12月-81      3000                20


SQL> commit;

提交完成。

SQL> truncate table emp20;

表被截断。

SQL> select * from emp20;

未选定行

SQL> –等同于: delete from emp20;

SQL> /*

SQL> delete和truncate table的区别

SQL> 1. delete是DML,truncate是DDL (DML可以rollback,DDL不可以)

SQL> 2. delete逐条删除;truncate先摧毁,再重建

SQL> 3. delet会产生碎片;truncate不会

SQL> 4. delete不会释放空间;truncate会

SQL> */

SQL> set feedback off

SQL> @c:\sql.sql

SQL> select count(*) from testdelete;

COUNT(*)

5000


SQL> set timing on

SQL> delete from testdelete;

已用时间: 00: 00: 00.04

SQL> drop table testdelete purge;

已用时间: 00: 00: 01.92

SQL> set timing off

SQL> @c:\sql.sql

SQL> select count(*) from testdelete;

COUNT(*)

5000


SQL> set timing on

SQL> truncate table testdelete;

已用时间: 00: 00: 00.54

SQL> set timing off

SQL> host cls

SQL> /*

SQL> **Oracle中的事务

SQL> 1. 事务的起始标志: DML语句

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

SQL> 隐式提交 DDL 语句,正常退出 exit

SQL> 回滚: 显式 rollback

SQL> 隐式 非正常退出,掉电,宕机**

SQL> */

SQL> –保存点

SQL> create table testsavepoint

2 (tid number,tname varchar2(20));

SQL> set feedback on

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

已创建 1 行。

SQL> insert into testsavepoint values(2,’Mary’);

已创建 1 行。

SQL> –定义保存点

SQL> savepoint a;

保存点已创建。

SQL> insert into testsavepoint values(3,’Moke’);

已创建 1 行。

SQL> rollback to savepoint a;

回退已完成。

SQL> select * from testsavepoint;

TID TNAME


1 Tom
2 Mary


已选择2行。

SQL> commit;

提交完成。

SQL> spool off
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: