- with…as…
不同于MySQL,Oracle不能直接使用as来为子查询获得的表命名,在Oracle中要为子查询获得的表指定名称需要使用with…as…语句才行
Mysql:
select tt.* from (select * from emp) as tt;
oracle:
with tt as (select * from emp) select * from tt;
或者:
select tt.* from (select * from emp) tt;
- rownum伪列
由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去限定查询行数
rownum字段是Oracle中为用户准备的伪列字段,相当于MySQL中的自增字段,可以使用rownum来限定查询结果显示行数
例:用rownum伪列为emp表的查询结果增加自增序号列,提取前10行
select rownum, emp.* from emp where rownum < 11;

取倒数N列(grade列按行数递增):
select rownum,s.* from salgrade s where rownum<4 order by grade desc;

网上有人说当排序列为主键时,执行顺序是先排序,后取rownum,但在我的环境上结果是一样的(我的是oracle 11g),有待进一步验证
基础查询指令
需登录系统用户
1.查询数据库名:
select name,dbid from v$database;或者show parameter db_name;
2.查询实例名:
select instance_name from v$instance;或者show parameter instance_name;
3.查询数据库域名:
select value from v$parameter where name='db_domain';或者show parameter domain;
4.查询数据库服务器:
select value from v$parameter where name='service_name';或者show parameter service;或者show parameter names;
5.数据库服务名:
此参数是数据库标识类参数,用service_name表示。数据库如果有域,则数据库服务名就是全局数据库名;如果没有,则数据库服务名就是数据库名。查询:show parameter service_name;
6.查看当前登录的用户的表:
select table_name from user_tables;
oracle 查询当前用户下的表名 + 表注释:
select t.table_name tableName, f.comments comments
from user_tables t
inner join user_tab_comments f
on t.table_name = f.table_name
7.oracle 查询某表的所有字段 + 字段注释 + 字段类型
select t.table_name tableName,
t.columnName columnName,
t.dataType dataType,
a.comments
from user_tab_columns t
left join user_col_comments a
on t.table_name = a.table_name
and t.column_name = a.column_name
网友评论