TRUNCATE TABLE 用来删除表中所有的数据,表的结构不发生变化,并且数据不能回退。
SEQUENCE:产生一个数字,自动生成主键,例如自动添加编号时,就可以用这个,为数据依次排序,1,2,3,4,5.......
创建序列:CREATE SEQUENCE 序列名。 CREATE SEQUENCR ID_SEQ;
序列的属性:NEXTVAL:序列下一个值, 每次调用序列的值都发生改变 ;
CURRVAL:序列当前值, 每次调用序列的值不发生改变 ;
例如向一条数据中添加序列:
INSERT INTO TEST(ID,NAME) VALUES(ID_SEQ.NEXTVAL,'SA');
多次执行此语句会发现 TEST表中的主键ID 的值是依次递增的。
SELECT TNAME FROM TAB;
视图的作用:简化SQL语句,提高安全性。但是视图不会提高查询效率,索引会提高查询效率。
创建视图:CREATE OR REPLACE VIEW V1 AS 这里是一大顿SELECT 语句;
这样 SELECT * FROM V1;的作用就和上面那一大堆SELECT 语句的作用是一样的。
内连接只能查询到满足连接条件的查询,而外连接可以查询到不满足连接条件的查询。
外连接分为 左连接、右连接和全连接。
左连接:SELECT LAST_NAME,DEPARTMENT_NAME
FROM EMPLOYEES E LEFT [OUTER] JOIN DEPARTMENTS D ON E.DEPARTMENT_ID=D.DEPARTMENT_ID;
右连接:SELECT LAST_NAME,DEPARTMENT_NAME
FROM EMPLOYEES E RIGHT JOIN DEPARTMENTS D ON E.DEPARTMENT_ID=D.DEPARTMENT_ID;
全连接:SELECT LAST_NAME,DEPARTMENT_NAME
FROM EMPLOYEES E FULL JOIN DEPARTMENTS D ON E.DEPARTMENT_ID=D.DEPARTMENT_ID;
oracle中特有的外连接符号 (+)
左连接:SELECT LAST_NAME,DEPARTMENT_NAME FROM EMPLOYEES E,DEPARTMENTS D
WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID(+); / / 注意 左连接是放在等号右边的。
右连接:SELECT LAST_NAME,DEPARTMENT_NAME FROM EMPLOYEES E,DEPARTMENTS D
WHERE E.DEPARTMENT_ID(+)=D.DEPARTMENT_ID; / / 注意 左连接是放在等号左边的。
求和函数:SELECT SUM(SALARY) FROM EMPLOYEES;
求平均函数:SELECT AVG(SALARY) FROM EMPLOYEES;
注意:当所求平均数的数据中有NULL时,oracle会自动跳过,也就是说 如果有四条数据,其中有一个为空值,在求平均数时除以的不是4 而是3,
为了解决这个问题可以使用 第一篇中的NVL函数:SELECT AVG ( NVL ( SALARY,0 ) );
求最小、最大值:SELECT MIN[MAX] (SALARY ) FROM EMPLOYEES;
求当前查询返回的行数:SELECT COUNT(SALARY) FROM EMPLOYEES; 查询SALARY 不为空的人的个数。