一、返回记录
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,在mySql和oracle中测试:
在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/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
PL/0语言的设计目标是提供一种简单、易用的语言,来帮助学习者快速掌握编译原理的基础知识。 三、编译原理PL/0源程序结构 编译原理PL/0源程序由多个部分组成,包括: 1. Constants:定义了编译器中使用的常量,...
- **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...
标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们将深入探讨PL/SQL Developer的功能、特性以及它在Oracle数据库开发中的作用。 PL/SQL(Procedural Language/Structured Query ...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
- **版本信息**:该文档为 Enterprise PL/I for z/OS and OS/390 的第三版(2001年11月),适用于 Version 3 Release 1 版本及其后续版本,直至新的版本或技术通讯中有其他指示为止。 - **使用须知**:在使用本书...
PL/0是一种简单的教学用编程语言,由Pascal语言简化而来,常用于编译原理的教学。清华大学出版的《编译原理》教材中,包含了PL/0的源代码实现,这为我们深入理解编译器的工作原理提供了实践基础。 在这个压缩包中,...
pl/0是一种简单的编程语言,它是Pascal语言的一个简化版本,由Alfred V. Aho、Monica S. Lam、Ravi Sethi和Jeffrey D. Ullman在《编译器设计》一书中提出,用于教学目的。词法分析是编译器构造过程中的第一阶段,它...
这个C语言版本的PL/0编译器是一个实际的应用,用于将PL/0源代码转换成机器可执行的形式。下面我们将深入探讨PL/0语言、C语言实现的编译器以及编译器的工作原理。 PL/0语言是Pascal语言的一个极简版本,它只包含基本...
**标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...
Oracle 数据库实用教程第三章 PL/SQL 程序设计 本章节主要介绍了 PL/SQL 程序设计的基础知识,包括 PL/SQL 的优点、运行 PL/SQL 程序、PL/SQL 块结构、PL/SQL 基本语法、PL/SQL 处理流程、异常处理、游标、存储过程...
第2章 创建并运行PL/SQL代码 21 第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 第8章 字符串 182 第9...
- **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...
PL/SQL VCS插件是为开发者提供的一种增强工具,它与PL/SQL Developer整合,目的是为了更好地管理和控制Oracle数据库中的SQL脚本和存储过程的版本。这个安装包结合了Version Control System (VCS)的功能,如Visual ...
PL/JSON是一个在Oracle数据库中处理JSON数据的开源库,专为那些需要在数据库内进行JSON数据操作的应用程序设计。这个库提供了丰富的功能,包括JSON数据的解析、创建、修改和输出,使得与JSON格式的数据交互变得更加...