在Oracle数据库的日常使用中,查询表相关的信息是开发和维护过程中非常高频的操作,不同的查询需求对应不同的SQL语句,下面会分场景介绍具体的实现方法。

查询指定表的所有数据
如果需要查看某张表中存储的全部数据,可以使用SELECT语句配合通配符*实现,这是最基础的表数据查询方式。
-- 查询员工表emp的所有数据 SELECT * FROM emp;
如果只需要查询表中的部分字段,可以把*替换成具体的字段名,多个字段之间用英文逗号分隔。
-- 查询员工表的员工编号、员工姓名、薪资三个字段 SELECT empno, ename, sal FROM emp;
查询表的结构信息
当不清楚某张表的字段定义、数据类型、是否为空等结构信息时,可以通过查询数据字典表来获取,常用的有两种方式。
使用DESC命令
这是最快捷的查看表结构的方式,直接在SQL执行窗口输入DESC 表名即可。
-- 查看员工表emp的结构 DESC emp;
查询USER_TAB_COLUMNS字典表
如果需要更详细的结构信息,或者需要批量查询多张表的结构,可以查询USER_TAB_COLUMNS表,该表存储了当前用户下所有表的字段信息。
-- 查询员工表emp的详细结构信息 SELECT column_name, data_type, data_length, nullable FROM user_tab_columns WHERE table_name = 'EMP' ORDER BY column_id;
注意这里的表名需要大写,因为Oracle的数据字典中表名默认存储为大写形式。
查询当前用户下的所有表
如果需要查看当前登录用户拥有哪些表,可以查询USER_TABLES字典表。
-- 查询当前用户下的所有表名 SELECT table_name FROM user_tables;
如果需要查询数据库中所有用户下的表(需要有对应权限),可以查询DBA_TABLES表。
-- 查询数据库中所有表,需要DBA权限 SELECT owner, table_name FROM dba_tables;
带条件的表数据查询
实际查询时往往不需要全部数据,可以通过WHERE子句添加查询条件,过滤出符合要求的数据。
-- 查询薪资大于3000的员工信息 SELECT * FROM emp WHERE sal > 3000; -- 查询部门编号为20且职位是CLERK的员工信息 SELECT * FROM emp WHERE deptno = 20 AND job = 'CLERK';
还可以配合ORDER BY子句对查询结果进行排序,ASC表示升序,DESC表示降序,默认是升序。
-- 查询所有员工信息,按薪资降序排列 SELECT * FROM emp ORDER BY sal DESC;
查询表的注释信息
如果表或者字段添加了注释,也可以通过数据字典查询到对应的注释内容。
查询表的注释可以查询USER_TAB_COMMENTS表:
-- 查询员工表的注释 SELECT comments FROM user_tab_comments WHERE table_name = 'EMP';
查询字段的注释可以查询USER_COL_COMMENTS表:
-- 查询员工表所有字段的注释 SELECT column_name, comments FROM user_col_comments WHERE table_name = 'EMP';