日期:2014-05-16  浏览次数:20455 次

Oracle的小结

Oracle 的左连接和右连接
PL-SQL中,左连接和右连接以如下方式来实现
查看如下语句:
SELECT emp_name, dept_name FORM Employee, Department?? WHERE Employee.emp_deptid(+) = Department.deptid
此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,
无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:
SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid = Department.deptid(+)
则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示

一般的相等连接:
select * from a, b where a.id = b.id;
这个就属于内连接。
?
对于外连接 :
Oracle 中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN?
?
LEFT OUTER JOIN:左外关联?
SELECT e.last_name, e.department_id, d.department_name?
FROM employees e?
LEFT OUTER JOIN departments d?
ON (e.department_id = d.department_id);?
等价于?
SELECT e.last_name, e.department_id, d.department_name?
FROM employees e, departments d?
WHERE e.department_id=d.department_id(+)?
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。?
?
RIGHT OUTER JOIN:右外关联?
SELECT e.last_name, e.department_id, d.department_name?
FROM employees e?
RIGHT OUTER JOIN departments d?
ON (e.department_id = d.department_id);?
等价于?
SELECT e.last_name, e.department_id, d.department_name?
FROM employees e, departments d?
WHERE e.department_id(+)=d.department_id?
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。?
?
FULL OUTER JOIN:全外关联?
SELECT e.last_name, e.department_id, d.department_name?
FROM employees e?
FULL OUTER JOIN departments d?
ON (e.department_id = d.department_id);?
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

Oracle 用户数据字典 以及 查询表字段查看当前用户的缺省表空间
SQL>select username,default_tablespace from user_users;

查看当前用户的角色
SQL>select * from user_role_privs;

查看当前用户的系统权限和表级权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;

查看用户下所有的表
SQL>select * from user_tables;

显示用户信息(所属表空间)
select default_tablespace,temporary_tablespace
from dba_users where username='GAME';

1、用户

查看当前用户的缺省表空间
SQL>select username,default_tablespace from user_users;

查看当前用户的角色
SQL>select * from user_role_privs;

查看当前用户的系统权限和表级权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;

显示当前会话所具有的权限
SQL>select * from session_privs;

显示指定用户所具有的系统权限
SQL>select * from dba_sys_privs where grantee='GAME';

显示特权用户
select * from v$pwfile_users;

显示用户信息(所属表空间)
select default_tablespace,temporary_tablespace
from dba_users where username='GAME';

显示用户的PROFILE
select profile from dba_users where username='GAME';


2、表

查看用户下所有的表
SQL>select * from user_tables;

查看名称包含log字符的表
SQL>select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;

查看某表的创建时间
SQL>select object_name,created from user_objects where object_name=upper('&table_name');

查看某表的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');

查看放在ORACLE的内存区里的表
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

3、索引

查看索引个数和类别
SQL>select index_name,index_type,table_name from user_indexes order by table_name;

查看索引被索引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');

查看索引的大小
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');

4、序列号

查看序列号,last_number是当前值
SQL>select * from user_sequences;

5、视图

查看视图的名称
SQL>select view_name from user_views;

查看创建视图的select语句
SQL>set view_name,text_length from user_views;
SQL&g