从今天开始,我跟大家一起学习Oracle的基础知识。孔子曰:“温故而知新,可以为师矣”。学过的东西,也要经常回顾一下,才能记得更牢,用的更溜。
1, 查看表结构
方法一:
SQL> DESC EMP;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO NUMBER(4)
ENAME VARCHAR2(10) Y
JOB VARCHAR2(9) Y
MGR NUMBER(4) Y
HIREDATE DATE Y
SAL NUMBER(7,2) Y
COMM NUMBER(7,2) Y
DEPTNO NUMBER(2) Y
在command window中,可以用此命令来查看表结构。例子中用来查看emp(员工表)的结构信息,包含字段名称、字段类型、长度和是否可空的信息。
方法二:
光标放在表名称上面,同时按住Ctrl和鼠标左键,就会弹出表的详细信息页面。选择“列”,可以查看关于表字段的详细信息,和方法一的结果相同。
方法三:
光标放在表名称上面,单击鼠标右键,在弹出的菜单中,选择“描述”,和方法一的结果相同。
2, 将空值转换成实际值
要求:返回多个值中第一个不为空的值。
SELECT COALESCE(C1,C2,C3,C4,C5,C6) AS C
FROM V;
返回结果:
可以看到,相对于nvl来说,coalease支持多个函数,能很方便的返回第一个不为空的值。如果上面的语句改写为nvl,就要嵌套很多层。
select nvl(nvl(nvl(nvl(nvl(c1, c2), c3), c4), c5), c6) as c
from v;
3,对于多个条件的组合,要使用括号,这样在维护语句时可以不必再考虑优先级的问题,而且很容易通过各种工具找到各组合条件的起止位置。
SELECT T.EMPNO, T.ENAME, T.HIREDATE, T.SAL
FROM EMP T
WHERE (T.DEPTNO = '10'
OR T.COMM IS NOT NULL
OR (T.DEPTNO = '20'AND T.SAL <= 2000));
4,拼接列
SELECT 'TRUNCATE TABLE '|| T.OWNER||'.' ||T.TABLE_NAME ||';'
FROM ALL_TABLES T
WHERE T.OWNER = 'SCOTT';
用SQL来生成SQL,当你有大量相似的SQL需要生成时,可以先写一个语句,然后进行修改,直接用基础数据或数据字典来批量生成。
5,在Select语句中使用条件逻辑
要求:按员工工资分档次统计人数。
SELECT T1.档次 , COUNT(*) as 人数
FROM
(SELECT
CASE
WHEN T.SAL <= 1000 THEN '0-1000'
WHEN T.SAL <= 2000 THEN '1000-2000'
WHEN T.SAL <= 3000 THEN '2000-3000'
WHEN T.SAL <= 4000 THEN '3000-4000'
WHEN T.SAL <= 5000 THEN '4000-5000'
END AS 档次,
T.ENAME,
T.SAL
FROM EMP T)T1
GROUP BY 档次
ORDER BY 1
返回结果:
档次 人数
0-1000 2
1000-2000 6
2000-3000 5
4000-5000 1