LES01-------------------------------------------------------------------------------------------------------------------------------------:
NULL:表示未提供数据;
NULL不是0也不是空格;N
解决NULL问题:函数NVL:转换NULL为实际值
定义列别名: 作用:修改列标题
定义列别名:可以直接跟在列名后,或加AS关键字
如果列别名包含有空格、特殊字符或区分大小写,那么用双引号括起来
例子:
1. select ename NAME, 12*sal+nvl(comm,0) "Annual Salary" from emp WHERE ename='KING'
连接操作符:||
作用:连接列或字符串到其它列
例子:
select ename || ' ' || 'is a' || ' ' || job as "Employee Details" from emp;
删除重复行:
select distinct deptno from emp;
LES02-------------------------------------------------------------------------------------------------------------------------------------:
字符串和日期值用单引号括起来;
字符值区分大小写;
日期值区分格式,语言;
<>:不等于;
BETWEEN...AND...:在两值之间
IN(list):匹配于列表中的任一个值
LIKE:匹配于字符模式
LIKE操作符:用于执行模糊检索 %:表示零或多个字符;_:表示一个字符
逻辑操作符:AND 如果条件都是TRUE,则返回 TRUE ;
OR 如果任一个条件是TRUE,则返回TRUE;
NOT 如果条件是FALSE,则返回 TRUE;
ORDER BY子句:排序 ASC(默认):升序; DESC:降序
ORDER BY是SELECT语句的最后一条子句
LES03-------------------------------------------------------------------------------------------------------------------------------------:
大小写转换函数:LOWER('SQL Course'):sql course
UPPER('SQL Course'):SQL COURSE
INITCAP('SQLCourse'):Sql Course
TO_CHAR函数: select to_char(sal,'$99,999') salary from emp where ename = 'SCOTT';
結果: $3,000
TO_NUMBER:转换字符串为数字
TO_DATE:转换字符串为日期
一NVL(表达式1,表达式2)
如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。
对数字型: NVL( comm,0);
对字符型 NVL( TO_CHAR(comm), 'No Commission')
对日期型 NVL(hiredate,' 31-DEC-99')
例子:
select ename,NVL(TO_char(comm),ename||' is not a salesperson!') AS COMMISSION from emp
二NVL2(表达式1,表达式2,表达式3)
如果表达式1为空,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
例如 NVL2(comm,'sal+comm',sal)
NVL2函数测试comm,如果comm为空,就返回sal 的值。如果 comm 不为空(null),就返回表达式 sal+comm的值。
NULLIF函数:
NULLIF(Expression1,Expression2):给定两个参数Expression1和Expression2,如果两个参数相等,则返回NULL;否则就返回第一个参数。
case表达式 与decode函数:
select ename,sal,case when deptno=10 then 'dept10'
when deptno =20 then 'dept20'
when deptno =30 then 'dept30'
else 'other' end department FROM employees
用decode改写
select ename,sal,
decode(deptno,10,'dept10',20,'dept20',30,'dept30','other') department from emp;
LES04-------------------------------------------------------------------------------------------------------------------------------------:
Oracle 外连接(OUTER JOIN)
左外连接(左边的表不加限制)
右外连接(右边的表不加限制)
全外连接(左右两表都不加限制)
对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN。
在左连接和右连接时都会以一张A表为基础表,该表的内容会全部显示,然后加上A表和B表匹配的内容。 如果A表的数据在B表中没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
(+)操作符只能出现在WHERE子句中,并且不能与OUTER JOIN语法同时使用。
当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
(+)操作符只适用于列,而不能用在表达式上。
(+)操作符不能与OR和IN操作符一起使用。
(+)操作符只能用于实现左外连接和右外连接,而不能实现完全外连接。
例子:
左外连接 select * from t_A a left join t_B b on a.id = b.id;
或 Select * from t_A a,t_B b where a.id=b.id(+);
右外连接 select * from t_A a right join t_B b on a.id = b.id;
或 Select * from t_A a,t_B b where a.id(+)=b.id;
LES05-------------------------------------------------------------------------------------------------------------------------------------:
使用group by分组查询
LES06-------------------------------------------------------------------------------------------------------------------------------------:
子查询
LES07-------------------------------------------------------------------------------------------------------------------------------------:
LES08-------------------------------------------------------------------------------------------------------------------------------------:
使用以下SQL*Plus命令可以定义用户变量
DEFINE:建立 CHAR类型用户变量
ACCEPT:读取用户输入,并存储到变量中
如果使用DEFINE命令定义变量包含空格,则必须用单引号引住
SET: 设置当前会话环境
SHOW :显式环境设置
SET命令变量:
ARRAYSIZE {20 | n}
COLSEP {_ | text}
FEEDBACK {6 | n |OFF | ON}
HEADING {OFF | ON}
LINESIZE {80 | n}
LONG {80 | n}
PAGESIZE {24 | n}
PAUSE {OFF | ON | text}
TERMOUT {OFF | ON}
LES09-------------------------------------------------------------------------------------------------------------------------------------:
LES10-------------------------------------------------------------------------------------------------------------------------------------:
使用 ALTER TABLE语句:
增加新列
修改已存在列
定义新列的默认值
DROP TABLE 删除表
RENAME 修改对象名
TRUNCATE 截断表
COMMENT 增加注释
LES11-------------------------------------------------------------------------------------------------------------------------------------:
约束有以下五种类型
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK:定义每行数据必须满足的条件
定义CHECK约束有以下限制
不允许引用伪列CURRVAL、NEXTVAL、LEVEL和ROWNUM
不允许调用函数SYSDATE、UID、USER和 USERENV
LES12-------------------------------------------------------------------------------------------------------------------------------------:
建立视图:限制数据库访问;简化复杂查询
建立复杂视图:CREATE VIEW dept_sum_vu(name, minsal, maxsal, avgsal) AS SELECT d.dname, MIN(e.sal), MAX(e.sal),AVG(e.sal) FROM emp e, dept d WHERE e.deptno = d.deptno GROUP BY d.dname;
LES13-------------------------------------------------------------------------------------------------------------------------------------:
建立索引:CREATE INDEX index ON table (column[, column]...);
CREATE INDEX emp_ename_idx ON emp(ename);
删除索引:DROP INDEX emp_ename_idx;
LES14-------------------------------------------------------------------------------------------------------------------------------------:
控制用户访问 : 建立用户
建立角色简化安全管理
使用GRANT和REVOKE授予和收回权限
LES15-------------------------------------------------------------------------------------------------------------------------------------:
PL/SQL块结构:DECLARE(可选)
变量、游标、自定义例外
BEGIN (必须)
SQL 语句
PL/SQL语句
EXCEPTION(可选)
发生错误执行操作
END; (必须)
定义变量:按照命名惯例定义变量名
指定NOT NULL强制初始化变量
使用:=或DEFAULT可以初始化变量
每行只能定义一个变量
LES16-------------------------------------------------------------------------------------------------------------------------------------:
单行注释:- -
多行注释: /* 和*/