📜  如何在 sqlplus 中格式化表格 - SQL (1)

📅  最后修改于: 2023-12-03 15:08:48.405000             🧑  作者: Mango

如何在 sqlplus 中格式化表格

当我们使用 SQL 查询数据库时,当查询结果集较大时,表格可能无格式、难于阅读和分析。针对这个问题,SQL 提供了一些命令和函数来格式化输出结果集,从而更加直观地展示数据。

使用SQL*Plus控制BREAK

SQL*Plus 是 Oracle 官方提供的一个命令行工具,也是我们常用的一个工具。它提供了 BREAK 命令来控制输出结果集的显示格式。

命令格式

BREAK column_name | expression | number | column_name, expression [, number ... ]

其中,column_name 是存在于查询结果集中的列名,expression 是 SQL 运算表达式,number 是控制输出的格式选项。可以使用多个 column_name、expression 或者 number 来组合控制输出结果集的格式。

示例

我们使用以下 SQL 语句查询出 EMP 表中的员工编号、姓名、薪水和职位:

SELECT EMPNO, ENAME, SAL, JOB FROM EMP;

输出结果为:

     EMPNO ENAME      SAL JOB      
---------- ---------- --- ---------
      7369 SMITH       800 CLERK    
      7499 ALLEN      1600 SALESMAN
      7521 WARD       1250 SALESMAN
      7566 JONES      2975 MANAGER  
      7654 MARTIN     1250 SALESMAN
      7698 BLAKE      2850 MANAGER  
      7782 CLARK      2450 MANAGER  
      7788 SCOTT      3000 ANALYST  
      7839 KING      10000 PRESIDENT
      7844 TURNER     1500 SALESMAN
      7876 ADAMS      1100 CLERK    
      7900 JAMES       950 CLERK    
      7902 FORD       3000 ANALYST  
      7934 MILLER     1300 CLERK    

14 rows selected.

显然这个输出结果很难看,我们需要对其进行格式化,以便更加直观地分析和观察数据。我们可以使用 BREAK 命令来设置断点和控制输出格式。

BREAK ON JOB SKIP 1
SELECT EMPNO, ENAME, SAL, JOB FROM EMP ORDER BY JOB;

输出结果为:

JOB                  EMPNO ENAME      SAL
--------- ---------- ---------- ---
ANALYST               7369 SMITH       800
                     7902 FORD       3000
                     7788 SCOTT      3000
                     7902 FORD       3000

CLERK                 7876 ADAMS      1100
                     7900 JAMES       950
                     7369 SMITH       800
                     1100
                     1300

MANAGER               7566 JONES      2975
                     7698 BLAKE      2850
                     7782 CLARK      2450

PRESIDENT             7839 KING      10000

SALESMAN              7844 TURNER     1500
                     7654 MARTIN     1250
                     7521 WARD       1250
                     7499 ALLEN      1600

9 rows selected.

通过设置 BREAK ON JOB SKIP 1 命令,我们为 JOB 列设置断点,控制了输出结果的格式。以 JOB 列为依据,输出每个 JOB 以及对应的 EMPNO、ENAME、SAL,并且在每个 JOB 开头输出 JOB 的名称,同时 SKIP 1 指令控制了每个 JOB 之间的空行数目。

使用SQL*Plus控制格式化

在 SQL*Plus 命令中,我们还可以使用一些格式化命令来控制输出结果集的格式。下面是一些常见的格式化命令:

COLUMN

该命令控制了列的大小和显示格式。

命令格式

COLUMN column_name FORMAT format_string

其中,column_name 是 SQL 查询语句中的列名,format_string 是指定的格式控制字符串。

示例

我们使用以下 SQL 语句查询出 EMP 表中的员工编号、姓名、薪水和职位,并且使用 COLUMN 命令设置输出格式。

COLUMN EMPNO FORMAT 99999
COLUMN ENAME FORMAT A20
COLUMN SAL FORMAT $99,999.99
COLUMN JOB FORMAT A20
SELECT EMPNO, ENAME, SAL, JOB FROM EMP;

输出结果为:

 EMPNO ENAME                SAL JOB                
------ -------------------- --------- --------------------
  7369 SMITH               $800.00 CLERK              
  7499 ALLEN             $1,600.00 SALESMAN           
  7521 WARD              $1,250.00 SALESMAN           
  7566 JONES             $2,975.00 MANAGER            
  7654 MARTIN            $1,250.00 SALESMAN           
  7698 BLAKE             $2,850.00 MANAGER            
  7782 CLARK             $2,450.00 MANAGER            
  7788 SCOTT             $3,000.00 ANALYST            
  7839 KING             $10,000.00 PRESIDENT          
  7844 TURNER            $1,500.00 SALESMAN           
  7876 ADAMS             $1,100.00 CLERK              
  7900 JAMES               $950.00 CLERK              
  7902 FORD              $3,000.00 ANALYST            
  7934 MILLER            $1,300.00 CLERK              

14 rows selected.

通过设置 COLUMN 命令,我们控制了 EMPNO 列输出长度、ENAME 列输出长度、SAL 列的美观显示,以及 JOB 列的输出长度。

SET LINESIZE

该命令控制了输出界面的行宽度。

命令格式

SET LINESIZE number

其中,number 是输出界面的行宽度,默认为 80。

示例

我们使用以下 SQL 语句查询出 EMP 表中的员工编号、姓名、薪水和职位,并且使用 SET LINESIZE 命令设置输出界面的行宽度。

SET LINESIZE 120
SELECT EMPNO, ENAME, SAL, JOB FROM EMP;

输出结果为:

     EMPNO ENAME                      SAL JOB                    
---------- -------------------- --------- --------------------
      7369 SMITH                     800 CLERK                  
      7499 ALLEN                    1600 SALESMAN               
      7521 WARD                     1250 SALESMAN               
      7566 JONES                    2975 MANAGER                
      7654 MARTIN                   1250 SALESMAN               
      7698 BLAKE                    2850 MANAGER                
      7782 CLARK                    2450 MANAGER                
      7788 SCOTT                    3000 ANALYST                
      7839 KING                    10000 PRESIDENT              
      7844 TURNER                   1500 SALESMAN               
      7876 ADAMS                    1100 CLERK                  
      7900 JAMES                     950 CLERK                  
      7902 FORD                     3000 ANALYST                
      7934 MILLER                   1300 CLERK                  

14 rows selected.

通过设置 SET LINESIZE 命令,我们控制了输出界面的行宽度,使其更加美观和易读。

总结

SQL 提供了很多命令和函数来控制输出结果集的格式。在 SQL*Plus 命令中,我们可以使用 BREAK、COLUMN、SET LINESIZE 等命令来控制输出结果的格式,并且使得输出界面更加美观和易读。