📅  最后修改于: 2023-12-03 15:08:48.405000             🧑  作者: Mango
当我们使用 SQL 查询数据库时,当查询结果集较大时,表格可能无格式、难于阅读和分析。针对这个问题,SQL 提供了一些命令和函数来格式化输出结果集,从而更加直观地展示数据。
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 命令中,我们还可以使用一些格式化命令来控制输出结果集的格式。下面是一些常见的格式化命令:
该命令控制了列的大小和显示格式。
命令格式
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 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 等命令来控制输出结果的格式,并且使得输出界面更加美观和易读。