oracle(ddldmldcl经典语法)
- 格式:doc
- 大小:242.50 KB
- 文档页数:28
1搜索式CASE表达式用于UPDATE语句
UPDATE emp
SET sal =
CASE
WHEN deptno=10 THEN sal*1.1
WHEN deptno=20 THEN sal*1.05
ELSE sal
END
2简单CASE表达式用于UPDATE语句
UPDATE emp
SET sal =
CASE deptno
WHEN 10 THEN sal*1.1
WHEN 20 THEN sal*1.05
ELSE sal
END;
3CASE结构用于SELECT语句
SELECT
CASE
WHEN DUMMY='X' THEN 'Dual is OK'
ELSE 'Dual is messed up'
END
FROM DUAL;
4创建并运行一个脚本文件
1. 创建 SQL SELECT 语句.
2. 将该 SELECT语句保存到脚本文件
3. 从编辑器中调用该文件
4. 验证SELECT后的终结符
5. 保存脚本文件(如:e:\update_case.sql).
6. 输入 “START 文件名”运行脚本
SQL>start e:\update_case.sql
5使用 &替代变量
SELECT empno, ename, sal, deptno
FROM emp
WHERE empno = &employee_num;
6使用ceil函数:
SELECT ceil(2.35) FROM dual;
执行结果:
CEIL(2.35)
-------------
3
说明:该函数求得大于等于2.35的最小整数,结果为3。
7使用floor函数:
SELECT floor(2.35) FROM dual;
执行结果:
FLOOR(2.35)
----------------
2
说明:该函数求得小于等于2.35的最大整数,结果为2。
8求|sin(230o)|的值,保留一位小数:
SELECT round(abs(sin(230*3.14159/180)),1) FROM dual;
结果为:
ROUND(ABS(SIN(230*3.14159/180)),1)
---------------------------------------------------
0.8
说明:先将230o转换成为弧度,然后进行计算求值。再求绝对值。再进行四舍五入,保留小数点后1位。
9、ROUND: 四舍五入到指定的小数位
ROUND(45.926, 2) 45.93
TRUNC: 截取到指定的小数位
TRUNC(45.926, 2) 45.92
MOD: 取余数
MOD(1600, 300) 100
10【实例1】 自动转换字符型数据到数值型。
输入并执行查询:
SELECT '12.5'+11 FROM dual;
执行结果为:
'12.5'+11
------------
23.5
说明:在本实例中,因为出现+运算符,说明进行的是算术运算,所以字符串'12.5'被自动转换成数值12.5,然后参加运算。
11【实例2】 自动转换数值型数据到字符型。
执行以下查询:
SELECT '12.5'||11 FROM dual; 结果为:
'12.5'
------
12.511
说明:在本训练中,因为出现||运算符,说明进行的是字符串连接运算,数值11被自动转换成字符串'11',然后参加运算。
12 TO_CHAR 用于日期型
(1)SELECT ename, TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE
FROM emp;
结果:
ENAME HIREDATE
---------- -----------------
SMITH 17 12月 1980
ALLEN 20 2月 1981
WARD 22 2月 1981
JONES 2 4月 1981
MARTIN 28 9月 1981
BLAKE 1 5月 1981
...
已选择16行。
(2)SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY')
AS 系统日期与时间
FROM dual;
结果:
系统日期与时间
-------------------------------
2009-03-15 11:49:34 上午 星期日
(3)【实例】 将日期显示转换成中文的年月日。
输入并执行查询:
SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual;
执行结果为:
TO_CHAR(SYSDAT
--------------
2008年04月08日
说明:双引号中的中文字“年”、“月”、“日”原样显示,单引号为字符串的界定标记,区别于双引号,不能混淆。
(4)【练习1】显示2011年的12月22日为星期几。
select '2011年12月22', to_char((to_date('2011-12-22','yyyy-mm-dd')),'DAY') 星期几
from dual;
13将NULL转换为一个实际的值
数据类型可以是date、 character、 number。
数据类型必须匹配
NVL(comm,0) 用0代替空的Comm值。
NVL(hiredate,„01-1月-97‟) 用1997年1月1日代替空的雇佣日期。
NVL(job,„No Job Yet‟) 用“No Job Yet”代替空的职务。
14使用 DECODE 函数
显示各雇员的岗位、工资及其预增工资,其中'ANALYST'增10%,'CLERK'增15%和‟MANAGER‟增20%,其余不变
SELECT job, sal,
DECODE(job, 'ANALYST', SAL*1.1,
'CLERK', SAL*1.15,
'MANAGER', SAL*1.20,
SAL)
REVISED_SALARY
FROM emp;
15使用 userenv函数
【实例】 返回用户终端或系统标识信息。
执行以下查询:
SELECT userenv('TERMINAL') FROM dual;
结果:
主机名称
16组函数的使用原则
SUM和AVG只应用于数值型的列,MAX、MIN和COUNT可以应用于字符、数值和日期类型的列。
• 除了 COUNT(*)其他所有的组函数都忽略空值,可以使用NVL函数将空值转换成一个实际的值。
• 当使用GROUP BY子句时,Oracle服务器会自动对结果集合按升序排列。要忽略改变的排序方式可以在ORDER BY子句中使用DESC关键字。
• SELECT中出现的列除了在组函数中的,必须在GROUP BY子句中出现过。
• GROUP BY列不一定必须出现在SELECT查询中。
• 列别名不能用在GROUP BY子句中。
• 分组之前仍然可以使用WHERE子句来限制数据。
17外部连接
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table1.column, table2.column
FROM table1, table2 WHERE table1.column = table2.column(+);
18自身连接
SELECT worker.ename||' works for '||manager.ename
FROM emp worker, emp manager
WHERE worker.mgr = manager.empno;
19 SQL:1999语法的连接
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2] |
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON(table1.column_name = table2.column_name)] |
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)];
1 SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc
FROM emp
CROSS JOIN dept;
2 SELECT empno,ename,sal,deptno,loc
FROM emp
NATURAL JOIN dept;
3使用USING子句创建连接
SELECT e.ename,e.ename,e.sal,deptno,d.loc
FROM emp e JOIN dept d USING (deptno)
WHERE deptno = 20 ;
4使用ON子句创建连接
SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc
FROM emp e
JOIN dept d
ON (e.deptno = d.deptno);
5用ON 子句创建三向连接
SELECT e.empno, e.ename, d.loc,m.ename
FROM emp e
JOIN dept d
ON e.deptno = d.deptno