`
哇哈哈852
  • 浏览: 92627 次
文章分类
社区版块
存档分类
最新评论

SQL*Plus break与compute的简单用法

阅读更多


在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现。这个两个命令简单易用,可满足日常需求,其实质也相当于在编写SQL语句时使用分组及聚合函数。不同的是在报表中的分组的最下方或整个报表的最下方我们可以得到如sum,avg以及自定义的聚合字样。见下面的演示。

1、break的用法

a、获取帮助信息
--如果帮助不可用,需要安装SQL*Plus help,参考: SQL*PLus 帮助手册(SP2-0171) http://blog.csdn.net/robinson_0612/article/details/8852568
goex_admin@SYBO2SZ> help break

BREAK
-----

Specifies where changes occur in a report and the formatting
action to perform, such as:
- suppressing display of duplicate values for a given column
- skipping a line each time a given column value changes
  (In iSQL*Plus, only when Preformatted Output is ON)
- printing computed figures each time a given column value
  changes or at the end of the report.
Enter BREAK with no clauses to list the current BREAK definition.

BRE[AK] [ON report_element [action [action]]] ...

where report_element has the following syntax:
    {column | expression | ROW | REPORT}

and where action has the following syntax:
    [SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]]

The SKIP option is not supported in iSQL*Plus

b、命令特性描述
break 命令主要用于过滤重复列,正如单词所表达的意思及中断,也就是说中断显示重复的列。
当下一行记录的上指定的列与上一行相同,不显示该列,否则显示该列。
当使用break时,通常建议sql语句使用Order by 子句。可以基于order by子句使用多个列,同样break 也可以使用多个列。
report_element表明可以基于列,表达式,行,以及report等多种不同类型来进行中断显示,也就是说break on对哪个进行分组。
action则表示
    skip[n],在每个分组的最后,自动跳过n个空行。
    skip page, 在每个分组的最后,自动换页。
    break on row skip[n],每一行后面跳过n个空行。
    nodup 重复的显示空,dup重复的也显示。

c、演示break用法
--基于列deptno进行中断显示
goex_admin@SYBO2SZ> break on deptno
goex_admin@SYBO2SZ> break    --break用于查看当前break的设置信息
break on deptno nodup

--下面查询中,deptno列被中断显示
goex_admin@SYBO2SZ> select * from emp order by deptno;

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7782 CLARK      MANAGER        7839 19810609 00:00:00      2550                    10
      7839 KING      PRESIDENT            19811117 00:00:00      5100
      7934 MILLER    CLERK          7782 19820123 00:00:00      1400
      7566 JONES      MANAGER        7839 19810402 00:00:00      3075                    20
      7902 FORD      ANALYST        7566 19811203 00:00:00      3100
      7876 ADAMS      CLERK          7788 19870523 00:00:00      1200
      7369 SMITH      CLERK          7902 19801217 00:00:00        900
      7788 SCOTT      ANALYST        7566 19870419 00:00:00      3100
      7521 WARD      SALESMAN        7698 19810222 00:00:00      1350        500        30
      7844 TURNER    SALESMAN        7698 19810908 00:00:00      1600          0
      7499 ALLEN      SALESMAN        7698 19810220 00:00:00      1700        300
      7900 JAMES      CLERK          7698 19811203 00:00:00      1050
      7698 BLAKE      MANAGER        7839 19810501 00:00:00      2950
      7654 MARTIN    SALESMAN        7698 19810928 00:00:00      1350      1400

14 rows selected.

--指定skip参数为n,则每一个新的分组之后插入指定的行数,如下面的查询为1,则新分组后插入1空行
goex_admin@SYBO2SZ> break on deptno skip 1
goex_admin@SYBO2SZ> break
break on deptno skip 1 nodup

goex_admin@SYBO2SZ> select * from emp order by deptno;

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7782 CLARK      MANAGER        7839 19810609 00:00:00      2550                    10
      7839 KING      PRESIDENT            19811117 00:00:00      5100
      7934 MILLER    CLERK          7782 19820123 00:00:00      1400

      7566 JONES      MANAGER        7839 19810402 00:00:00      3075                    20
      7902 FORD      ANALYST        7566 19811203 00:00:00      3100
      7876 ADAMS      CLERK          7788 19870523 00:00:00      1200
      7369 SMITH      CLERK          7902 19801217 00:00:00        900
      7788 SCOTT      ANALYST        7566 19870419 00:00:00      3100

      7521 WARD      SALESMAN        7698 19810222 00:00:00      1350        500        30
      7844 TURNER    SALESMAN        7698 19810908 00:00:00      1600          0
      7499 ALLEN      SALESMAN        7698 19810220 00:00:00      1700        300
      7900 JAMES      CLERK          7698 19811203 00:00:00      1050
      7698 BLAKE      MANAGER        7839 19810501 00:00:00      2950
      7654 MARTIN    SALESMAN        7698 19810928 00:00:00      1350      1400


14 rows selected.
--上面的查询结果中分组deptno 30之后也被跳过一行,所以显示的结果尾部与"14 rows selected"有两行间隙

--下面基于row来分组,且插入1空行
goex_admin@SYBO2SZ> break on row skip 1;
goex_admin@SYBO2SZ> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING    NEW YORK

        20 RESEARCH      DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS    BOSTON

--此时设置pagesize为8
goex_admin@SYBO2SZ> set pagesize 8
goex_admin@SYBO2SZ> break on deptno skip page  -->基于页面进行跳页
--下面的查询基于deptno被分为了4个页面
goex_admin@SYBO2SZ> select * from emp order by deptno;

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7782 CLARK      MANAGER        7839 19810609 00:00:00      2550                    10
      7839 KING      PRESIDENT            19811117 00:00:00      5100
      7934 MILLER    CLERK          7782 19820123 00:00:00      1400

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7566 JONES      MANAGER        7839 19810402 00:00:00      3075                    20
      7902 FORD      ANALYST        7566 19811203 00:00:00      3100
      7876 ADAMS      CLERK          7788 19870523 00:00:00      1200
      7369 SMITH      CLERK          7902 19801217 00:00:00        900
      7788 SCOTT      ANALYST        7566 19870419 00:00:00      3100

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7521 WARD      SALESMAN        7698 19810222 00:00:00      1350        500        30
      7844 TURNER    SALESMAN        7698 19810908 00:00:00      1600          0
      7499 ALLEN      SALESMAN        7698 19810220 00:00:00      1700        300
      7900 JAMES      CLERK          7698 19811203 00:00:00      1050
      7698 BLAKE      MANAGER        7839 19810501 00:00:00      2950

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7654 MARTIN    SALESMAN        7698 19810928 00:00:00      1350      1400        30

14 rows selected.

--基于多列的break
--下面的查询中除了基于deptno分组之外,还增加了基于job进行分组
goex_admin@SYBO2SZ> break on deptno on job skip 1;
goex_admin@SYBO2SZ> select * from emp order by deptno,job;

    EMPNO ENAME      JOB              MGR HIREDATE                SAL      COMM    DEPTNO
---------- ---------- --------- ---------- ----------------- ---------- ---------- ----------
      7934 MILLER    CLERK          7782 19820123 00:00:00      1400                    10

      7782 CLARK      MANAGER        7839 19810609 00:00:00      2550

      7839 KING      PRESIDENT            19811117 00:00:00      5100

      7788 SCOTT      ANALYST        7566 19870419 00:00:00      3100                    20
      7902 FORD                      7566 19811203 00:00:00      3100

      7876 ADAMS      CLERK          7788 19870523 00:00:00      1200
      7369 SMITH                      7902 19801217 00:00:00        900

      7566 JONES      MANAGER        7839 19810402 00:00:00      3075

      7900 JAMES      CLERK          7698 19811203 00:00:00      1050                    30

      7698 BLAKE      MANAGER        7839 19810501 00:00:00      2950

      7654 MARTIN    SALESMAN        7698 19810928 00:00:00      1350      1400
      7521 WARD                      7698 19810222 00:00:00      1350        500
      7499 ALLEN                      7698 19810220 00:00:00      1700        300
      7844 TURNER                    7698 19810908 00:00:00      1600          0


14 rows selected.
  • 大小: 34.9 KB
分享到:
评论

相关推荐

    SQL*Plus Quick Reference Release 8.1.7

    SQL*Plus 是 Oracle corporation 开发的一款强大的数据库管理工具,本 Quick Reference 释义了 SQL*Plus 的命令语法和使用方法。下面我们将详细介绍 SQL*Plus 的命令语法、基本使用、数据库访问、查询结果格式化、...

    SQL PLUS命令使用

    SQL*PLUS是Oracle数据库系统中一个非常重要的交互式命令行工具,它允许用户直接与数据库进行交互,执行SQL语句以及一系列内置的SQL*PLUS命令。这些命令主要用于数据查询、数据库管理、脚本执行和输出格式化等任务。...

    Oracle Plus便携式手册

    - 使用BREAK和COMPUTE命令来生成汇总报告。 - 如何导出报告到不同格式的文件中。 #### 十、优化SQL 为了提高SQL语句的性能,本章节提供了以下指导: - SQL性能调优的基本概念。 - 如何分析和优化SQL查询。 - 使用...

    Oracle9i数据库基础

    这些知识点提供了 Oracle9i 数据库基础的重要概念和技术细节,涵盖了从简单的 SQL 语句到复杂的查询和数据操作,以及如何利用 SQL*PLUS 这个强大的工具来提高工作效率。对于初学者来说,这些内容构成了学习 Oracle ...

    Oracle9i数据库开发培训教材

    - **UNIX环境**与**Windows环境**下的登录方法,包括使用命令行界面或图形界面进行登录的步骤。 #### 2. 常用SQL*PLUS附加命令 - **DESCRIBE命令**:显示表或视图的结构。 - **LIST命令**:列出当前缓冲区的内容。 ...

    Oracle8i_9i数据库基础-WORD版

    - **建立简单报告**:利用SQL*Plus命令创建简单的报表。 - **输入变量**:在SQL*Plus中使用变量来接收用户输入。 #### 三、表及索引的定义操作 - **建立表结构**: - **建立表结构命令**:使用CREATE TABLE语句...

    Oracle8i_9i数据库基础.doc

    ### Oracle8i_9i数据库基础...以上内容涵盖了 Oracle8i_9i 数据库基础的主要知识点,包括 SQL*PLUS 的基本操作、SQL 语句的应用、查询优化、表结构的设计与修改等方面,对于学习和掌握 Oracle 数据库技术非常有帮助。

    orical8i9i数据库基础

    - **SELECT语句**:讲解SELECT语句的基本结构和使用方法。 - **SQL中的单记录函数**: - **单记录字符函数**:列出并解释常见的字符处理函数,如`UPPER`、`LOWER`等。 - **单记录数字函数**:介绍用于数字处理的...

    SQl語句編程+ Sql Plus

    ### SQL語句編程與Sql Plus學習資料解析 #### SQL語句編程基礎知識點概覽 ##### SQL命令關鍵字及應用 SQL語句編程中包含了一系列重要的關鍵字,這些關鍵字用於數據庫的操作,包括對數據的查詢、修改、刪除等。下面...

    Oracle8i_9i数据库基础

    - **建立简单报告**:利用SQL*Plus的特性,结合格式化输出和标题功能,生成简单的报表。 - **输入变量**:允许用户在执行SQL语句时动态输入值。 #### 三、表及索引的定义操作 - **建立表结构** - **建立表结构...

    oracle资料

    - **SQL与SQL\*PLUS的区别**:区分了标准SQL和Oracle提供的SQL\*PLUS工具之间的差异。 - **PL/SQL语言**:介绍了PL/SQL语言的基本概念和特性,以及其在Oracle数据库中的应用场景。 4. **登录到SQL\*PLUS** - **...

    数据库8i-9i基础Oracle

    - **SQL与SQL*Plus的区别**:SQL是一种用于管理和操作关系数据库的标准语言,而SQL*Plus是Oracle提供的一种用户界面工具,用于执行SQL语句,查看结果,并提供了一些额外的功能,如格式化输出、脚本执行等。...

    Oracle8i_9i数据库基础.txt

    - **3.7.1 使用游标**:介绍游标的使用方法。 - **3.7.2 管理游标**:管理游标的状态。 **3.8 LOB 类型** - **3.8.1 处理 LOB 类型**:介绍如何处理大对象类型。 - **3.8.2 为 LOB 指定存储选项**:设置 LOB 的...

    Oracle9i全教程.pdf

    - 详细介绍SELECT语句的语法和使用方法。 2. **SQL中的单记录函数** - **单记录字符函数**:包括TRIM、CONCAT等,用于处理字符串。 - **单记录数字函数**:如ROUND、CEIL等,用于数值操作。 - **单记录日期函数...

    Oracle9i数据库开发培训教材2011

    - **2.3.1 多记录组函数**: 解释了SUM、AVG等聚合函数的使用方法。 - **2.3.2 带GROUP BY的计算**: 介绍了如何使用GROUP BY对数据进行分组。 - **2.3.3 用HAVING来限制分组的计算**: 说明了HAVING子句如何筛选...

    Oracle PL SQL 编程手册(SQL大全).docx

    在《Oracle PL/SQL 编程手册(SQL大全)》文档中,首先介绍了 SQL*PLUS 工具的基本使用方法,包括 SQL 语句的关键字以及 SQL*PLUS 的专有命令。 ##### 1.1 SQL 关键字 文档中列举了作为语句开头的 17 个关键字: - *...

Global site tag (gtag.js) - Google Analytics