oracle学习第二天(函数,CURD)
版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
用户名:scott
密码:tiger
C:\Users\Administrator>sqlplus scott/tiger
SQL*Plus: Release 10.2.0.1.0 - Production on
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
使用到的表:scott用户拥有的表
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
SQL>
查询所有员工的信息,要求显示所在部门的名称(而不是编号)
1 select empno,ename,job,(select d.dname from dept d where d.deptno=e.deptno) as 所在部门
2* from emp e
3 /
EMPNO ENAME JOB 所在部门
--------- ---------- --------- --------------
7369 SMITH CLERK RESEARCH
7499 ALLEN SALESMAN SALES
7521 WARD SALESMAN SALES
7566 JONES MANAGER RESEARCH
7654 MARTIN SALESMAN SALES
7698 BLAKE MANAGER SALES
7782 CLARK MANAGER ACCOUNTING
7788 SCOTT ANALYST RESEARCH
7839 KING PRESIDENT ACCOUNTING
7844 TURNER SALESMAN SALES
7876 ADAMS CLERK RESEARCH
7900 JAMES CLERK SALES
7902 FORD ANALYST RESEARCH
7934 MILLER CLERK ACCOUNTING
已选择14行。
----------------
格式中有其他字符时要使用双引号引起来:
SQL> select to_char(sysdate, 'yyyy"年"mm"月"dd"日" hh"时"mi"分"ss"秒"') from dual;
TO_CHAR(SYSDATE,'YYYY"年"MM
---------------------------
2013年11月02日 06时33分01秒
------------------------------------------------------------------
1* select * from emp where hiredate>to_date('19810601','yyyymmdd')
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -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 23-5月 -87 1100 20
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
已选择9行。
===================字符函数==============================
字符函数:
lower 全部转为小写
upper 全部转为大写
initcap 首字母转为大写
-------
concat 连接两个字符串
substr 在字符串str中从第m个位置开始取n个字符(位置从1开始)
length 求长度
instr 从字符串strA中找出str所在的位置(返回第找到的1个,位置从1开始)
lpad 把字符串str补齐到n个长度,不足就在左边加指定字符c;
如果str.length>n就取str的前n个字符
rpad 把字符串str补齐到n个长度,不足就在右边加指定字符c;
如果str.length>n就取str的前n个字符(也是从前面取)
trim 从str的两端去掉字符,要是指定的字符时才去掉,使用方式特殊:
例:trim('a' from 'aaITCASTaa') 结果为 'ITCAST'
trim('C' from 'aaITCASTaa') 结果为 'aaITCASTaa'
注意:前面只能指定一个字符。
replace 例:replace('aaITCASTaa', 'a', '=') 结果为 '==ITCAST=='
转换成小写
SQL> select lower('ABCddd') from dual;
LOWER(
------
abcddd
已选择 1 行。
转换成小写
SQL> select upper('aac')
2 from dual;
UPP
---
AAC
已选择 1 行。
连接串
SQL> select concat(concat('aa','bb'),'cc') from dual;
CONCAT
------
aabbcc
已选择 1 行。
SQL>
SQL>
substr( str, startPosition, count )
从第几个开始,需要截取几个字符,第1个位置是1。
如果第3个参数不指定(即不指定截取几个字符),就表示到最后。
SQL> select instr('Hello World!', 'llo') from dual;
INSTR('HELLOWORLD!','LLO')
--------------------------
3
lpad与rpad函数
SQL> select lpad('ith', 5, '**') from dual;
LPAD(
-----
**ith
SQL> select lpad('smith', 3, '*') from dual;
LPA
---
smi
SQL> select rpad('smith', 3, '*') from dual;
RPA
---
smi
======================================
SQL> select trim(' ' from ' ITCAST ') from dual;
TRIM('
------
ITCAST
SQL> select trim('a' from 'aaa ITCAST aa') from dual;
TRIM('A'FR
----------
ITCAST
1 select
2 trim( ' ' from trim('a' from 'aaa ITCAST aa') )
3* from dual
SQL> /
TRIM('
------
ITCAST
SQL> select replace('hellword world!', 'o', 'X') from dual;
REPLACE('HELLWO
---------------
hellwXrd wXrld!
===============数字函数=======================
数字函数:
round 四舍五入,例 round('45.923', 2) 表示保存两位小数,保留的位数可以指定正、零、负数。
trunc 截断,舍掉后面的数,保留的位数可以指定正、零、负数。
mod 求余,如 mod(12, 5) 结果为2
12 % 5 = 2
SQL> select mod(12, 5) from dual;
MOD(12,5)
----------
2
SQL> select mod(15, 5) from dual;
MOD(15,5)
----------
0
====================日期函数============================
日期函数:
日期可以相减,但不能相加,因为没有意义。
select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
select ename,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
add_months
next_day 从某个日期算起,下一个出现该星期几的日期是哪天: select next_day(sysdate,'星期三') from dual;
last_day 当月的最后一天
round 四舍五入
trunc 抹去尾部
SQL> select round(32.392, 2) from dual;
ROUND(32.392,2)
---------------
32.39
SQL> select round(32.92, 0) from dual;
ROUND(32.92,0)
--------------
33
SQL> select round(10532.92, -1) from dual;
ROUND(10532.92,-1)
------------------
10530
SQL> select round(10532.92, -2) from dual;
ROUND(10532.92,-2)
------------------
10500
=================================
SQL> select trunc(32.392, 1) from dual;
TRUNC(32.392,1)
---------------
32.3
SQL> select trunc(10532.92, 0) from dual;
TRUNC(10532.92,0)
-----------------
10532
SQL> select trunc(10532.92, -1) from dual;
TRUNC(10532.92,-1)
------------------
10530
=======================
日期的数学运算
SQL> select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
昨天 今天 明天
-------------- -------------- --------------
01-11月-13 02-11月-13 03-11月-13
已选择 1 行。
利用日期函数计算工龄
SQL> select empno, ename, sal, hiredate, round(sysdate-hiredate) || '天' as 工龄 from emp
2 /
EMPNO ENAME SAL HIREDATE 工龄
---------- ---------- ---------- -------------- ------------------------------------------
7369 SMITH 800 17-12月-80 12009天
7499 ALLEN 1600 20-2月 -81 11944天
7521 WARD 1250 22-2月 -81 11942天
7566 JONES 2975 02-4月 -81 11903天
7654 MARTIN 1250 28-9月 -81 11724天
7698 BLAKE 2850 01-5月 -81 11874天
7782 CLARK 2450 09-6月 -81 11835天
7788 SCOTT 3000 19-4月 -87 9695天
7839 KING 5000 17-11月-81 11674天
7844 TURNER 1500 08-9月 -81 11744天
7876 ADAMS 1100 23-5月 -87 9661天
7900 JAMES 950 03-12月-81 11658天
7902 FORD 3000 03-12月-81 11658天
7934 MILLER 1300 23-1月 -82 11607天
已选择14行。
可以用数字除24来向日期中加上或减去小时
格化式显示日期
SQL> select to_char(sysdate - 1, 'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE-1,'
-------------------
2013-11-01 06:46:17
当前日期减一个小时
SQL> select to_char(sysdate - 1/24, 'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2013-11-02 05:46:55
当前日期减一分钟
SQL> select to_char(sysdate - 1/24/60, 'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE-1/2
-------------------
2013-11-02 06:46:41
======================================
日期函数:
找某月最后一天。
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
30-11月-13
========================================
在指定日期上加上n个月时间:
SQL> select add_months(sysdate, 1) from dual;
ADD_MONTHS(SYS
--------------
02-12月-13
====================================
计算两个日期相差的月数
SQL> select months_between(sysdate, '12-8月-2013') from dual;
MONTHS_BETWEEN(SYSDATE,'12-8月-2013')
-------------------------------------
2.70274492
SQL> select months_between(sysdate, '2-12月-2013') from dual;
MONTHS_BETWEEN(SYSDATE,'2-12月-2013')
-------------------------------------
-1
--------------------------------------------------------
日期的四舍五入与截断
round四舍五入
当前日期进行四舍五入
SQL> select round(sysdate, 'month') from dual;
ROUND(SYSDATE,
--------------
01-11月-13
当前日期加20天再进入四舍五入
SQL> select round(sysdate + 20, 'month') from dual;
ROUND(SYSDATE+
--------------
01-12月-13
====================================
找某月第一天(就是m月1日)。
方式一:通过求前一个月的最后一天再加上1
SQL> select last_day(add_months(sysdate, -1)) + 1 from dual;
LAST_DAY(ADD_M
--------------
01-11月-13
方式二:通过截断函数
SQL> select trunc(sysdate, 'month') from dual;
TRUNC(SYSDATE,
--------------
01-11月-13
=====================================
next_day(),从指定日期开始,第一次出现指定星期几的日期是多少。
下一个星期四是什么时候: 今天11月2日,下一个星期四为11月7日
SQL> select next_day(sysdate, '星期四') from dual;
NEXT_DAY(SYSDA
--------------
07-11月-13
下一个星期一是什么时候: 今天11月2日,下一个星期一为11月4日
SQL> select next_day(sysdate, '星期一') from dual;
NEXT_DAY(SYSDA
--------------
04-11月-13
=================格化式数字===========================
显示工资为本地货币¥ RBM人民币
SQL> select empno, lower(ename), to_char(sal, 'L999999') from emp;
EMPNO LOWER(ENAM TO_CHAR(SAL,'L999
---------- ---------- -----------------
7369 smith ¥800
7499 allen ¥1600
7521 ward ¥1250
显示工资为本地货币$ 美元
SQL> select empno, lower(ename), to_char(sal, '$999999') from emp;
EMPNO LOWER(ENAM TO_CHAR(
---------- ---------- --------
7369 smith $800
7499 allen $1600
7521 ward $1250
自动配置宽度,不足前面补0,并以$美元形式显示
SQL> select empno, lower(ename), to_char(sal, '$00000') from emp;
EMPNO LOWER(ENAM TO_CHAR
---------- ---------- -------
7369 smith $00800
7499 allen $01600
7521 ward $01250
SQL> select empno, lower(ename), to_char(sal, '$999,999.99') from emp;
EMPNO LOWER(ENAM TO_CHAR(SAL,
---------- ---------- ------------
7369 smith $800.00
7499 allen $1,600.00
7521 ward $1,250.00
================转换函数================================
转换函数:
隐式数据类型转换 与 显式数据类型转换
to_char(date, format)
to_date(string [,format])
to_char(number, format)
to_number(string [,format]) 如: to_number('22') 或 to_number('$22', '$99')
隐式转换
SQL> select '3' - 2 from dual;
'3'-2
----------
1
隐式转换出现错误
SQL> select '$3' - 2 from dual;
select '$3' - 2 from dual
*
第 1 行出现错误:
ORA-01722: 无效数字
显式转换,即强制转换
SQL> select to_number('$3','$999') - 2 from dual;
TO_NUMBER('$3','$999')-2
------------------------
1
===============空值处理函数======================
空值处理函数:
NVL (expr1, expr2)
可以使用的数据类型有日期、字符、数字
NVL2 (expr1, expr2, expr3)
expr1不为NULL,返回expr2;为NULL,就返回expr3( expr1 != null ? expr2 : expr3 )
SQL> select nvl(null, 5) from dual;
NVL(NULL,5)
-----------
5
SQL> select nvl2(null, 5, 10) from dual;
NVL2(NULL,5,10)
---------------
10
SQL> select nvl2(' ', 5, 10) from dual;
NVL2('',5,10)
-------------
5
===================条件表达式====================
条件表达式:
用于实现 IF-THEN-ELSE 逻辑。
CASE 表达式:SQL99的语法,比较繁琐。
DECODE 函数:Oracle自己的语法,类似Java,比较简洁。
例:
根据员工的职位涨工资:总裁1000 经理800 其他400
PRESIDENT
MANAGER
CASE的使用方式一:
SQL> select
2 empno,
3 lower(ename),
4 job,
5 sal 原来的工资,
6 ( CASE job WHEN 'PRESIDENT' THEN sal + 1000 WHEN 'MANAGER' THEN sal+800 ELSE sal +400 END ) 涨后的工资
7 from
8 emp;
EMPNO LOWER(ENAM JOB 原来的工资 涨后的工资
---------- ---------- --------- ---------- ----------
7369 smith CLERK 800 1200
7499 allen SALESMAN 1600 2000
7521 ward SALESMAN 1250 1650
7566 jones MANAGER 2975 3775
7654 martin SALESMAN 1250 1650
7698 blake MANAGER 2850 3650
7782 clark MANAGER 2450 3250
7788 scott ANALYST 3000 3400
7839 king PRESIDENT 5000 6000
7844 turner SALESMAN 1500 1900
7876 adams CLERK 1100 1500
7900 james CLERK 950 1350
7902 ford ANALYST 3000 3400
7934 miller CLERK 1300 1700
已选择14行。
CASE的使用方式二:
SQL> select
2 empno,
3 lower(ename),
4 job,
5 sal 原来的工资,
6 ( CASE WHEN job='PRESIDENT' THEN sal + 1000 WHEN job='MANAGER' THEN sal+800 ELSE sal +400 END ) 涨后的工资
7 from
8 emp;
EMPNO LOWER(ENAM JOB 原来的工资 涨后的工资
---------- ---------- --------- ---------- ----------
7369 smith CLERK 800 1200
7499 allen SALESMAN 1600 2000
7521 ward SALESMAN 1250 1650
7566 jones MANAGER 2975 3775
7654 martin SALESMAN 1250 1650
7698 blake MANAGER 2850 3650
7782 clark MANAGER 2450 3250
7788 scott ANALYST 3000 3400
7839 king PRESIDENT 5000 6000
7844 turner SALESMAN 1500 1900
7876 adams CLERK 1100 1500
7900 james CLERK 950 1350
7902 ford ANALYST 3000 3400
7934 miller CLERK 1300 1700
已选择14行。
使用DECODE函数:
decode( 变量, 值1, 则a, 值2, 则b, ... default)
^^^^^^^^ ^^^^^^^^ ^^^^^^^
有默认值(default)
SQL> select
2 empno,
3 lower(ename),
4 job,
5 sal 原来的工资,
6 ( DECODE(job, 'PRESIDENT', sal + 1000,
7 'MANAGER', sal+800,
8 sal +400)
9 ) 涨后的工资
10 from
11 emp;
EMPNO LOWER(ENAM JOB 原来的工资 涨后的工资
---------- ---------- --------- ---------- ----------
7369 smith CLERK 800 1200
7499 allen SALESMAN 1600 2000
7521 ward SALESMAN 1250 1650
7566 jones MANAGER 2975 3775
7654 martin SALESMAN 1250 1650
7698 blake MANAGER 2850 3650
7782 clark MANAGER 2450 3250
7788 scott ANALYST 3000 3400
7839 king PRESIDENT 5000 6000
7844 turner SALESMAN 1500 1900
7876 adams CLERK 1100 1500
7900 james CLERK 950 1350
7902 ford ANALYST 3000 3400
7934 miller CLERK 1300 1700
已选择14行。
不使用默认值:
1 select
2 empno,
3 lower(ename),
4 job,
5 sal 原来的工资,
6 ( DECODE(job, 'PRESIDENT', sal + 1000,
7 'MANAGER', sal+800
8 )
9 ) 涨后的工资
10 from
11* emp
SQL> /
EMPNO LOWER(ENAM JOB 原来的工资 涨后的工资
---------- ---------- --------- ---------- ----------
7369 smith CLERK 800
7499 allen SALESMAN 1600
7521 ward SALESMAN 1250
7566 jones MANAGER 2975 3775
7654 martin SALESMAN 1250
7698 blake MANAGER 2850 3650
7782 clark MANAGER 2450 3250
7788 scott ANALYST 3000
7839 king PRESIDENT 5000 6000
7844 turner SALESMAN 1500
7876 adams CLERK 1100
7900 james CLERK 950
7902 ford ANALYST 3000
7934 miller CLERK 1300
已选择14行。
=================集合运算==================
集合运算
查询属于部门10与部门20的所有员工信息,还可以这样查
select * from emp where deptno=10
加上(这里写集合运算符)
select * from emp where deptno=20;
这就是集合运算。
并集:
UNION 集合a + b的结果,没有重复记录。
UNION ALL 集合a + b的结果,保留所有重复的记录。(用的比较少)
例:查询属于部门10与部门20的所有员工信息。
例:查询工资在500~1500或在1000~2000范围的员工信息(这是两个工资级别)。
交集
Intersect 既属于集合a又属于集合b的记录。
例:查询工资在500~1500又在1000~2000范围的员工信息(这是两个工资级别)。
差集
Minus 集合a - b的结果,即从a中去除所有属于集合b的元素,注意a-b与b-a的结果是不一样的。
例:查询属于500~1500但不属于1000~2000范围的员工信息。
集合
unio 交集,不包括重复行,这里只有8行
1 select empno,ename,sal from emp where sal between 500 and 1500
2 union
3 select empno,ename,sal from emp where sal between 1000 and 2000
4* order by empno
QL> /
EMPNO ENAME SAL
--------- ---------- ----------
7369 SMITH 800
7499 ALLEN 1600
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
已选择8行。
union all:交集,包含重复行,这里有13行
1 select empno,ename,sal from emp where sal between 500 and 1500
2 union all
3 select empno,ename,sal from emp where sal between 1000 and 2000
4* order by empno
SQL> /
EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 800
7499 ALLEN 1600
7521 WARD 1250
7521 WARD 1250
7654 MARTIN 1250
7654 MARTIN 1250
7844 TURNER 1500
7844 TURNER 1500
7876 ADAMS 1100
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
7934 MILLER 1300
已选择13行。
交集: intersect两个集合中相同的部分
1 select empno,ename,sal from emp where sal between 500 and 1500
2 intersect
3 select empno,ename,sal from emp where sal between 1000 and 2000
4* order by empno
SQL> /
EMPNO ENAME SAL
---------- ---------- ----------
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
7876 ADAMS 1100
7934 MILLER 1300
差集:Minus集合a - b的结果,即从a中去除所有属于集合b的元素,注意a-b与b-a的结果是不一样的。
结果一:a-b
1 select empno,ename,sal from emp where sal between 500 and 1500
2 minus
3 select empno,ename,sal from emp where sal between 1000 and 2000
4* order by empno
SQL> /
EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 800
7900 JAMES 950
结果二:b-a
1 select empno,ename,sal from emp where sal between 1000 and 2000
2 minus
3 select empno,ename,sal from emp where sal between 500 and 1500
4* order by empno
SQL> /
EMPNO ENAME SAL
---------- ---------- ----------
7499 ALLEN 1600
统计每的入职员工的个数:
注意:
1,Select语句中参数类型和个数要一致
如果不一致,需要想办法补齐。
例如要补个字符串,不能写个'a'、'b'等,要不影响结果,应补一个null,还要指定类型。
如果是字符串,可以写 to_char(null);
如果要补数字类型,则写 to_number(null)
例:
select语句中参数类型和个数不一致,也现错误:
1 select empno,ename,sal, 薪水 from emp where sal between 500 and 1500
2 union
3* select deptno,dname from dept
SQL> /
select empno,ename,sal, 薪水 from emp where sal between 500 and 1500
*
第 1 行出现错误:
ORA-00904: "薪水": 标识符无效
这里参数不足,使用null进行补齐是可以的
1 select empno,ename,sal 薪水 from emp where sal between 500 and 1500
2 union
3* select deptno,dname,null from dept
SQL> /
EMPNO ENAME 薪水
---------- -------------- ----------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
7369 SMITH 800
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
用null补齐参数并指定类型
SQL> edit
已写入 file afiedt.buf
1 select empno,ename,sal 薪水 from emp where sal between 500 and 1500
2 union
3* select deptno,to_char(null),to_number(null) from dept
SQL> /
EMPNO ENAME 薪水
---------- ---------- ----------
10
20
30
40
7369 SMITH 800
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
已选择11行。
2,结果集采用第一个select的表头作为表头。
在第一个select上起别名才有用。
在后面的select上起别名就没有用。
3,如果有order by子句
必须放到最后一句查询语句后。
======================多表查询============================================
多表查询
类型:
1. 等值连接
2. 不等值连接
3. 外连接
4. 自连接
等值连接:d.deptno=e.deptno
例:查询所有员工的信息,要求显示所在部门的名称(而不是部门编号)
利用子查询实现
SQL> select
2 empno,
3 ename,
4 sal,
5 (select dname from dept d where d.deptno=e.deptno) as 所在的部门
6 from
7 emp e
8 /
EMPNO ENAME SAL 所在的部门
---------- ---------- ---------- --------------
7369 SMITH 800 RESEARCH
7499 ALLEN 1600 SALES
7521 WARD 1250 SALES
7566 JONES 2975 RESEARCH
7654 MARTIN 1250 SALES
7698 BLAKE 2850 SALES
7782 CLARK 2450 ACCOUNTING
7788 SCOTT 3000 RESEARCH
7839 KING 5000 ACCOUNTING
7844 TURNER 1500 SALES
7876 ADAMS 1100 RESEARCH
7900 JAMES 950 SALES
7902 FORD 3000 RESEARCH
7934 MILLER 1300 ACCOUNTING
已选择14行。
利用等值连接多表查询实现:简单,条件带等号
SQL> select empno,ename,sal from emp e,dept d where e.deptno=d.deptno;
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
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已选择14行。
SQL>
不等值连接:区域查询,不使用等号
查询当前用户所拥有的表
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
查询工资级别表
SQL> select * from salgrade;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL>
不等值区间:e.sal between s.losal and s.hisal
例:查询员工的工资级别:编号 姓名 月薪和级别
SQL> select e.empno,e.ename,e.sal,s.grade
2 from emp e,salgrade s
3 where e.sal between s.losal and s.hisal;
EMPNO ENAME SAL GRADE
---------- ---------- ---------- ----------
7369 SMITH 800 1
7900 JAMES 950 1
7876 ADAMS 1100 1
7521 WARD 1250 2
7654 MARTIN 1250 2
7934 MILLER 1300 2
7844 TURNER 1500 3
7499 ALLEN 1600 3
7782 CLARK 2450 4
7698 BLAKE 2850 4
7566 JONES 2975 4
7788 SCOTT 3000 4
7902 FORD 3000 4
7839 KING 5000 5
已选择14行。
过渡用的例子
按照部门统计员工的人数,要求显示:部门号,部门名称,员工人数
SQL> select d.deptno,d.dname,count(e.empno) as 员工数
2 from emp e,dept d
3 where e.deptno=d.deptno
4 group by d.deptno,d.dname;
DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
============================连接查询=======================================
期望效果:当连接条件不成立时,仍然希望在结果中包含某些不成立的记录。这就要用到外连接。
外连接:
左外连接:where e.deptno=d.deptno 当连接条件不成立时,等号左边所代表的表的信息仍然显示
右外连接:where e.deptno=d.deptno 当连接条件不成立时,等号右边所代表的表的信息仍然显示
左外连接的写法(条件右边加上(+)号): where e.deptno=d.deptno(+)
右外连接的写法(条件左边加上(-)号): where e.deptno(+)=d.deptno
利用左外连接实现:按照部门统计员工的人数,要求显示:部门号,部门名称,员工人数
SQL> select d.deptno,d.dname,count(e.empno)
2 from emp e,dept d
3 where e.deptno(+)=d.deptno
4 group by d.deptno,d.dname
5 order by 1;
DEPTNO DNAME COUNT(E.EMPNO)
---------- -------------- --------------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
40 OPERATIONS 0
1 select e.ename || ' 的老板是 ' || m.ename
2 from emp e, emp m
3* where e.mgr=m.empno
左连接和右连接比较:
先插入一条记录
insert into emp(emp,ename,sal) values(1,'aaa',5000)
左外连接:(有员工aa,没有部门40)
1 select e.empno,e.ename,e.sal,d.deptno,d.dname
2 from emp e,dept d
3* where e.deptno=d.deptno(+)
SQL> /
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
1 aaa 5000
7369 SMITH 800 20 RESEARCH
7499 ALLEN 1600 30 SALES
7521 WARD 1250 30 SALES
7566 JONES 2975 20 RESEARCH
7654 MARTIN 1250 30 SALES
7698 BLAKE 2850 30 SALES
7782 CLARK 2450 10 ACCOUNTING
7788 SCOTT 3000 20 RESEARCH
7839 KING 5000 10 ACCOUNTING
7844 TURNER 1500 30 SALES
7876 ADAMS 1100 20 RESEARCH
7900 JAMES 950 30 SALES
7902 FORD 3000 20 RESEARCH
7934 MILLER 1300 10 ACCOUNTING
已选择15行。
右外连接:(有部门40,没有员工aa)
1 select e.empno,e.ename,e.sal,d.deptno,d.dname
2 from emp e,dept d
3* where e.deptno(+)=d.deptno
SQL> /
EMPNO ENAME SAL DEPTNO DNAME
---------- ---------- ---------- ---------- --------------
7839 KING 5000 10 ACCOUNTING
7934 MILLER 1300 10 ACCOUNTING
7782 CLARK 2450 10 ACCOUNTING
7369 SMITH 800 20 RESEARCH
7902 FORD 3000 20 RESEARCH
7876 ADAMS 1100 20 RESEARCH
7788 SCOTT 3000 20 RESEARCH
7566 JONES 2975 20 RESEARCH
7900 JAMES 950 30 SALES
7499 ALLEN 1600 30 SALES
7698 BLAKE 2850 30 SALES
7654 MARTIN 1250 30 SALES
7844 TURNER 1500 30 SALES
7521 WARD 1250 30 SALES
40 OPERATIONS
已选择15行。
注意:左连接和右连接可以互换
自连接:利用表的别名,将同一张表视为多张表
例:查询员工信息:xxx的老板是yyy
SQL> select e.ename || '的老板是'|| b.ename
2 from emp e, emp b
3 where e.mgr=b.empno;
E.ENAME||'的老板是'||B.ENAME
----------------------------
SMITH的老板是FORD
ALLEN的老板是BLAKE
WARD的老板是BLAKE
JONES的老板是KING
MARTIN的老板是BLAKE
BLAKE的老板是KING
CLARK的老板是KING
SCOTT的老板是JONES
TURNER的老板是BLAKE
ADAMS的老板是SCOTT
JAMES的老板是BLAKE
FORD的老板是JONES
MILLER的老板是CLARK
已选择13行。
查询员信息与所在的部门名称:
方式一:等值连接
SQL> select e.ename, e.sal, d.dname
2 from emp e, dept d
3 where e.deptno=d.deptno
4 ;
ENAME SAL DNAME
---------- ---------- --------------
SMITH 800 RESEARCH
ALLEN 1600 SALES
WARD 1250 SALES
JONES 2975 RESEARCH
MARTIN 1250 SALES
BLAKE 2850 SALES
CLARK 2450 ACCOUNTING
SCOTT 3000 RESEARCH
KING 5000 ACCOUNTING
TURNER 1500 SALES
ADAMS 1100 RESEARCH
JAMES 950 SALES
FORD 3000 RESEARCH
MILLER 1300 ACCOUNTING
已选择14行。
方式二:使用内连接
只返回满足连接条件的数据(两边都有的才显示)。也可以省略inner关键字。
SQL> select e.ename, e.sal, d.dname
2 from emp e
3 inner join dept d
4 on e.deptno=d.deptno;
ENAME SAL DNAME
---------- ---------- --------------
SMITH 800 RESEARCH
ALLEN 1600 SALES
WARD 1250 SALES
JONES 2975 RESEARCH
MARTIN 1250 SALES
BLAKE 2850 SALES
CLARK 2450 ACCOUNTING
SCOTT 3000 RESEARCH
KING 5000 ACCOUNTING
TURNER 1500 SALES
ADAMS 1100 RESEARCH
JAMES 950 SALES
FORD 3000 RESEARCH
MILLER 1300 ACCOUNTING
右外连接:右边边有值才显示。可以省略outer关键字
1 select e.ename,e.sal,d.dname
2 from emp e
3 right outer join dept d
4* on e.deptno=d.deptno
SQL> /
ENAME SAL DNAME
---------- ---------- --------------
CLARK 2450 ACCOUNTING
KING 5000 ACCOUNTING
MILLER 1300 ACCOUNTING
JONES 2975 RESEARCH
FORD 3000 RESEARCH
ADAMS 1100 RESEARCH
SMITH 800 RESEARCH
SCOTT 3000 RESEARCH
WARD 1250 SALES
TURNER 1500 SALES
ALLEN 1600 SALES
JAMES 950 SALES
BLAKE 2850 SALES
MARTIN 1250 SALES
OPERATIONS
已选择15行。
左外连接,左边有值的才显示,只需将上面sql的right改成left,可以省略outer关键字
1 select e.ename,e.sal,d.dname
2 from emp e
3 left outer join dept d
4* on e.deptno=d.deptno
SQL> /
ENAME SAL DNAME
---------- ---------- --------------
SMITH 800 RESEARCH
ALLEN 1600 SALES
WARD 1250 SALES
JONES 2975 RESEARCH
MARTIN 1250 SALES
BLAKE 2850 SALES
CLARK 2450 ACCOUNTING
SCOTT 3000 RESEARCH
KING 5000 ACCOUNTING
TURNER 1500 SALES
ADAMS 1100 RESEARCH
JAMES 950 SALES
FORD 3000 RESEARCH
MILLER 1300 ACCOUNTING
已选择14行。
操作同一张表的情况:
SQL> select e.ename, e.sal, m.ename, m.sal
2 from emp e
3 join emp m
4 on e.mgr=m.empno;
ENAME SAL ENAME SAL
---------- ---------- ---------- ----------
SMITH 800 FORD 3000
ALLEN 1600 BLAKE 2850
WARD 1250 BLAKE 2850
JONES 2975 KING 5000
MARTIN 1250 BLAKE 2850
BLAKE 2850 KING 5000
CLARK 2450 KING 5000
SCOTT 3000 JONES 2975
TURNER 1500 BLAKE 2850
ADAMS 1100 SCOTT 3000
JAMES 950 BLAKE 2850
FORD 3000 JONES 2975
MILLER 1300 CLARK 2450
已选择13行。
满外联接:任一边有值就会显示。outer可以省略
SQL> select e.ename, e.sal, d.deptno, d.dname
2 from emp e
3 full outer join dept d
4 on e.deptno=d.deptno;
ENAME SAL DEPTNO DNAME
---------- ---------- ---------- --------------
SMITH 800 20 RESEARCH
ALLEN 1600 30 SALES
WARD 1250 30 SALES
JONES 2975 20 RESEARCH
MARTIN 1250 30 SALES
BLAKE 2850 30 SALES
CLARK 2450 10 ACCOUNTING
SCOTT 3000 20 RESEARCH
KING 5000 10 ACCOUNTING
TURNER 1500 30 SALES
ADAMS 1100 20 RESEARCH
JAMES 950 30 SALES
FORD 3000 20 RESEARCH
MILLER 1300 10 ACCOUNTING
40 OPERATIONS
交叉连接:叉集,就是笛卡尔积(很少用到,没有连接条件,使用cross join)
-- 没有连接条件,有许多的重复行:如果e有m行,d有n行,则结果集有m*n行
SQL> select e.empno,e.ename,e.sal,d.*
2 from emp e
3 cross join dept d;
EMPNO ENAME SAL DEPTNO DNAME LOC
---------- ---------- ---------- ---------- -------------- ---------
7369 SMITH 800 10 ACCOUNTING NEW YORK
7499 ALLEN 1600 10 ACCOUNTING NEW YORK
7521 WARD 1250 10 ACCOUNTING NEW YORK
7566 JONES 2975 10 ACCOUNTING NEW YORK
7654 MARTIN 1250 10 ACCOUNTING NEW YORK
7698 BLAKE 2850 10 ACCOUNTING NEW YORK
7782 CLARK 2450 10 ACCOUNTING NEW YORK
7788 SCOTT 3000 10 ACCOUNTING NEW YORK
7839 KING 5000 10 ACCOUNTING NEW YORK
7844 TURNER 1500 10 ACCOUNTING NEW YORK
7876 ADAMS 1100 10 ACCOUNTING NEW YORK
7900 JAMES 950 10 ACCOUNTING NEW YORK
7902 FORD 3000 10 ACCOUNTING NEW YORK
7934 MILLER 1300 10 ACCOUNTING NEW YORK
7369 SMITH 800 20 RESEARCH DALLAS
7499 ALLEN 1600 20 RESEARCH DALLAS
7521 WARD 1250 20 RESEARCH DALLAS
7566 JONES 2975 20 RESEARCH DALLAS
7654 MARTIN 1250 20 RESEARCH DALLAS
7698 BLAKE 2850 20 RESEARCH DALLAS
7782 CLARK 2450 20 RESEARCH DALLAS
7788 SCOTT 3000 20 RESEARCH DALLAS
7839 KING 5000 20 RESEARCH DALLAS
7844 TURNER 1500 20 RESEARCH DALLAS
7876 ADAMS 1100 20 RESEARCH DALLAS
7900 JAMES 950 20 RESEARCH DALLAS
7902 FORD 3000 20 RESEARCH DALLAS
7934 MILLER 1300 20 RESEARCH DALLAS
7369 SMITH 800 30 SALES CHICAGO
7499 ALLEN 1600 30 SALES CHICAGO
7521 WARD 1250 30 SALES CHICAGO
7566 JONES 2975 30 SALES CHICAGO
7654 MARTIN 1250 30 SALES CHICAGO
7698 BLAKE 2850 30 SALES CHICAGO
7782 CLARK 2450 30 SALES CHICAGO
7788 SCOTT 3000 30 SALES CHICAGO
7839 KING 5000 30 SALES CHICAGO
7844 TURNER 1500 30 SALES CHICAGO
7876 ADAMS 1100 30 SALES CHICAGO
7900 JAMES 950 30 SALES CHICAGO
7902 FORD 3000 30 SALES CHICAGO
7934 MILLER 1300 30 SALES CHICAGO
7369 SMITH 800 40 OPERATIONS BOSTON
7499 ALLEN 1600 40 OPERATIONS BOSTON
7521 WARD 1250 40 OPERATIONS BOSTON
7566 JONES 2975 40 OPERATIONS BOSTON
7654 MARTIN 1250 40 OPERATIONS BOSTON
7698 BLAKE 2850 40 OPERATIONS BOSTON
7782 CLARK 2450 40 OPERATIONS BOSTON
7788 SCOTT 3000 40 OPERATIONS BOSTON
7839 KING 5000 40 OPERATIONS BOSTON
7844 TURNER 1500 40 OPERATIONS BOSTON
7876 ADAMS 1100 40 OPERATIONS BOSTON
7900 JAMES 950 40 OPERATIONS BOSTON
7902 FORD 3000 40 OPERATIONS BOSTON
7934 MILLER 1300 40 OPERATIONS BOSTON
已选择56行。
SQL> select count(*) from emp;
COUNT(*)
----------
14
SQL> select count(*) from dept;
COUNT(*)
----------
4
SQL>
16*4=56行,这就是笛卡尔积
==========================DMI控制语言===========================================
处理数据(DML,增删改)
DML,Data Manipulation Language,数据操作语言
插入数据(Insert into):
插入全部列
插入部分列
插入空值
1 insert into emp
2* values(1,'aa','manager',null,sysdate,9500,10000,10)
SQL> /
已创建 1 行。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
1 aa manager 03-11月-13 9500 10000 10
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 19-4月 -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 23-5月 -87 1100 20
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
已选择15行。
使用 & 变量(创建脚本)
SQL> insert into emp(empno,ename,sal) values(&empno,&ename,&sal);
输入 empno 的值: 2
输入 ename 的值: bb
输入 sal 的值: 3500
原值 1: insert into emp(empno,ename,sal) values(&empno,&ename,&sal)
新值 1: insert into emp(empno,ename,sal) values(2,bb,3500)
insert into emp(empno,ename,sal) values(2,bb,3500)
*
第 1 行出现错误:
ORA-00984: 列在此处不允许
SQL> /
输入 empno 的值: 2
输入 ename 的值: 'bb'
输入 sal 的值: 3500
原值 1: insert into emp(empno,ename,sal) values(&empno,&ename,&sal)
新值 1: insert into emp(empno,ename,sal) values(2,'bb',3500)
已创建 1 行。
SQL> ed
已写入 file afiedt.buf
1* insert into emp(empno,ename,sal) values(&empno,'&ename',&sal)
SQL> /
输入 empno 的值: 3
输入 ename 的值: cc
输入 sal 的值: 5000
原值 1: insert into emp(empno,ename,sal) values(&empno,'&ename',&sal)
新值 1: insert into emp(empno,ename,sal) values(3,'cc',5000)
已创建 1 行。
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
1 aa manager 03-11月-13 9500 10000 10
2 bb 3500
3 cc 5000
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 19-4月 -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 23-5月 -87 1100 20
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
已选择17行。
使用变量进行查询
SQL> select empno,ename,&column from emp;
输入 column 的值: sal
原值 1: select empno,ename,&column from emp
新值 1: select empno,ename,sal from emp
EMPNO ENAME SAL
---------- ---------- ----------
1 aa 9500
2 bb 3500
3 cc 5000
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
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已选择17行。
SQL>
SQL>
从其它表中拷贝数据
insert into mytable
select mycolums from ...
更新数据(Update)
删除数据(Delete)
SQL> delete from emp where empno<10;
已删除3行。
SQL>
删除所有的记录:
Delete
Truncate
建表:
通过子查询进行创建表,并插入数据
SQL> create table emp10 as select * from emp where deptno=10;
表已创建。
SQL> select * from emp10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7839 KING PRESIDENT 17-11月-81 5000 10
7934 MILLER CLERK 7782 23-1月 -82 1300 10
SQL> desc emp10;
名称 是否为空? 类型
----------------------------------------------------------------------------------- -------- --------------------
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> insert into emp10 select * from emp where deptno=20;
已创建5行。
SQL> 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 19-4月 -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 23-5月 -87 1100 20
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行。
有这样的需求,新建的一个web网站,上线了,已有500多人注册了,现发现表结构设计不合理,这样,我们可以利用子查询进行创建新表,并把相应的数据导进来
例:在新表的结构中插入子查询的指定列
这里新的列匹配的是其数据类型
SQL> insert into emp10(empno,ename,sal) select empno,ename,sal from emp where deptno=30;
已创建6行。
SQL> 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 19-4月 -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 23-5月 -87 1100 20
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行。
更新:部门编号为空的更新为30
SQL> update emp10 set deptno=30 where deptno is null;
已更新6行。
删除
删除没有奖金的员工
SQL> delete from emp10 where comm is null;
已删除14行。
SQL> 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 19-4月 -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 23-5月 -87 1100 20
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>
事务:oracle中sql需要使用事务才会生产,例如delete.... commit(提交事务)
事务是由完成若干项工作的DML语句组成的
保存点
设置事务隔离级别:
SQL99标准是有4个隔离级别,但Oracle只支持2个:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
执行外部的sql脚本文件:
SQL> @c:/testdelete.sql
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
不显示命令执行的反馈信息
set feedback off 不显示
set feedback on 显示
统计sql执行的所使用的时间
SQL> set timing on 统计
SP2-0158: 未知的 SET 选项 "统计"
SQL> set feedback off
SQL> show feedback
feedback OFF
SQL> set feedback on
SQL> show feedback
用于 1 或更多行的 FEEDBACK ON
统计sql执行所使用时间
set timing on 统计
set timing off 不统计
SQL> set timing on
SQL> show timing
timing ON
SQL> set timing off
SQL> show timing
timing OFF
SQL>
commit提交事务
rollback回滚事务
oracle自动开启事务
exit:隐式退出
数据库事务操作略