`
xo_tobacoo
  • 浏览: 391927 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

PL/SQLcookbook 第一章

阅读更多

一、返回记录

1)  返回所有行和列

1 select *
2   from emp

使用*效率不高,应该把所有列列出来:

select empno,ename,job,sal,mgr,hiredate,comm,deptno
          from emp

 

2)  table返回行

where子句中使用=, <, >, <=, >=, !, <>约束返回行,当有多个约束条件,可以使用and, or

1 select *
2   from emp
3  where deptno = 10

 

select *
         from emp
        where (     deptno = 10
                or comm is not null
                or sal <= 2000
              )
          and deptno=20
 
        EMPNO ENAME  JOB     MGR  HIREDATE      SAL       COMM  DEPTNO
        ----- ------ ----- -----  ----------- ----- ----------  ------
         7369 SMITH  CLERK  7902  17-DEC-1980   800                 20
         7876 ADAMS  CLERK  7788  12-JAN-1983  1100                 20

 

3

4)指定返回列,把所需列放入select子句:

1 select ename,deptno,sal
2   from emp

 

5)别名:当你需要返回的列名更易读和理解时使用别名,其中as可以省略

1 select sal,comm
2   from emp
1 select sal as salary, comm as commission
2   from emp
 
        SALARY   COMMISSION
        -------  ----------
            800
           1600         300
           1250         500
           2975
           1250        1300
           2850
           2450
           3000
           5000
           1500           0
           1100
            950
           3000
           1300

6)别名可以在其它子句中被使用:

1 select *
        2   from (
        3 select sal as salary, comm as commission
        4   from emp
        5        ) x
        6  where salary < 5000

7)连接多列:

DB2, Oracle, PostgreSQL

        1 select ename||' WORKS AS A '||job as msg

        2   from emp

        3  where deptno=10

 

MySQL

        1 select concat(ename, ' WORKS AS A ',job) as msg

        2   from

        3  where deptno=10

 

SQL Server

        1 select ename + ' WORKS AS A ' + job as msg

        2   from emp

        3  where deptno=10

 

8)使用逻辑运算处理返回:

1 select ename,sal,
        2        case when sal <= 2000 then 'UNDERPAID'
        3             when sal >= 4000 then 'OVERPAID'
        4             else 'OK'
        5        end as status
        6   from emp

译者注:when 后面的条件子句和where是一样的,可以使用and,或者or,在mySqloracle中测试:

Oracle/PL/SQL手册中:

Compound IF Statements

--复合if条件语句

If the last name is Vargas and the salary is more than 6500:

-- last name 等于Vargas,并且the salary大于6500

Set department number to 60

. . .

IF v_ename = ’Vargas’ AND salary > 6500 THEN

v_deptno := 60;

END IF;

. . .

9)限制返回行数:

DB2

        1 select *

        2   from emp fetch first 5 rows only

 

MySQL and PostgreSQL

        1 select *

        2   from emp limit 5

 

Oracle

        1 select *

        2   from emp

        3  where rownum <= 5

 

SQL Server

        1 select top 5 *

        2   from emp

Many vendors provide clauses such as FETCH FIRST and LIMIT that let you specify the number of rows to be returned from a query. Oracle is different, in that you must make use of a function called ROWNUM that returns a number for each row returned (an increasing value starting from 1).

Here is what happens when you use ROWNUM <= 5 to return the first five rows:

1.    Oracle executes your query.

2.    Oracle fetches the first row and calls it row number 1.

3.    Have we gotten past row number 5 yet? If no, then Oracle returns the row, because it meets the criteria of being numbered less than or equal to 5. If yes, then Oracle does not return the row.

4.    Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).

5.    Go to step 3.

 

Using an equality condition in conjunction with ROWNUM is a bad idea. Here is what happens when you try to return, say, the fifth row using ROWNUM = 5:

1.    Oracle executes your query.

2.    Oracle fetches the first row and calls it row number 1.

3.    Have we gotten to row number 5 yet? If no, then Oracle discards the row, because it doesn't meet the criteria. If yes, then Oracle returns the row. But the answer will never be yes!

4.    Oracle fetches the next row and calls it row number 1. This is because the first row to be returned from the query must be numbered as 1.

5.    Go to step 3.

Study this process closely, and you can see why the use of ROWNUM = 5 to return the fifth row fails. You can't have a fifth row if you don't first return rows one through four!

10)返回任取的n:

DB2

        1 select ename,job

        2   from emp

        3  order by rand() fetch first 5 rows only

 

MySQL

        1 select ename,job

        2   from emp

        3  order by rand() limit 5

 

PostgreSQL

Use the built-in RANDOM function in conjunction with LIMIT and ORDER BY:

        1 select ename,job

        2   from emp

        3  order by random() limit 5

 

Oracle

        1 select *

        2   from (

        3  select ename, job

        4    from emp

        6   order by dbms_random.value()

        7        )

        8   where rownum <= 5

 

SQL Server

        1 select top 5 ename,job

        2   from emp

        3  order by newid()

上面都是基于排序的,下面oracle例子:

 select *

           from (

         select dbms_random.value() num

            from emp

                )

           where rownum <= (5+ num) and rownum >= num

11)     null
1 select *
        2   from emp
        3  where comm is null

12)null转化:

        select case
               when comm is null then 0
               else comm
               end
          from emp
oracle中:
 
1 select nvl(comm,0)
        2   from emp
12)字段字符匹配,like
        1 select ename, job
        2   from emp
        3  where deptno in (10,20)
        4    and (ename like '%I%' or job like '%ER')

 

分享到:
评论

相关推荐

    一个对数据库的操作工具PL/SQLpl/sqL工具

    PL/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    编译原理PL/0源程序

    PL/0语言的设计目标是提供一种简单、易用的语言,来帮助学习者快速掌握编译原理的基础知识。 三、编译原理PL/0源程序结构 编译原理PL/0源程序由多个部分组成,包括: 1. Constants:定义了编译器中使用的常量,...

    oracle10g_pl/sql

    - **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    pl/sql developer11.0

    标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们将深入探讨PL/SQL Developer的功能、特性以及它在Oracle数据库开发中的作用。 PL/SQL(Procedural Language/Structured Query ...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    PL/I Reference Enterprise PL/I for z/OS and OS/390

    - **版本信息**:该文档为 Enterprise PL/I for z/OS and OS/390 的第三版(2001年11月),适用于 Version 3 Release 1 版本及其后续版本,直至新的版本或技术通讯中有其他指示为止。 - **使用须知**:在使用本书...

    Oracle资料学习PL/SQL必备

    PL/SQL(Procedural Language/Structured Query Language)是Oracle专为数据库操作设计的一种过程化编程语言,结合了SQL的强大查询功能与高级编程语言的控制结构,使得数据库管理员和开发人员能够更高效、安全地管理...

    pl/0 词法分析程序

    pl/0是一种简单的编程语言,它是Pascal语言的一个简化版本,由Alfred V. Aho、Monica S. Lam、Ravi Sethi和Jeffrey D. Ullman在《编译器设计》一书中提出,用于教学目的。词法分析是编译器构造过程中的第一阶段,它...

    PL/0编译器C语言版

    这个C语言版本的PL/0编译器是一个实际的应用,用于将PL/0源代码转换成机器可执行的形式。下面我们将深入探讨PL/0语言、C语言实现的编译器以及编译器的工作原理。 PL/0语言是Pascal语言的一个极简版本,它只包含基本...

    清华大学编译原理的PL/0源代码

    PL/0是一种简单的教学用编程语言,由Pascal语言简化而来,常用于编译原理的教学。清华大学出版的《编译原理》教材中,包含了PL/0的源代码实现,这为我们深入理解编译器的工作原理提供了实践基础。 在这个压缩包中,...

    oracle 9i pl/sql程序设计笔记

    **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    ORACLE PL/SQL从入门到精通

    过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...

    Oracle数据库实用教程第三章 PL/SQL程序设计.pptx

    Oracle 数据库实用教程第三章 PL/SQL 程序设计 本章节主要介绍了 PL/SQL 程序设计的基础知识,包括 PL/SQL 的优点、运行 PL/SQL 程序、PL/SQL 块结构、PL/SQL 基本语法、PL/SQL 处理流程、异常处理、游标、存储过程...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    第2章 创建并运行PL/SQL代码 21 第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 第8章 字符串 182 第9...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    PL/SQL VCS插件安装包+PL/SQL

    PL/SQL VCS插件是为开发者提供的一种增强工具,它与PL/SQL Developer整合,目的是为了更好地管理和控制Oracle数据库中的SQL脚本和存储过程的版本。这个安装包结合了Version Control System (VCS)的功能,如Visual ...

Global site tag (gtag.js) - Google Analytics