Oracle编程入门经典 第2章 SQLPlus和着力查询

4. 理解NULL

NULL是一个用来讲述没有定义的始末的术语。NULL列意味着没有向列赋值。

在Oracle中,当执行IF
COL_A=<某个值>那样的基准操作时,大概的重返值是TURE、FALSET
UNKNOWN。

是还是不是为空,用IS NULL或IS NOT NULL判断。

7. 自联接

在用户建立的片段表中,用户大概会怀有所谓的自引用外键。那表示一个列可以是相同表主键的一个外键。

2.2.1 格式化用户结果

6. LONG

LONG的暗中同意值是80.若是用户要询问所有LONG列的表只怕视图,那么就只会突显这么些一定列的前80个字符。尽管使LONG列更长,就可以来得那几个列中的越来越多多少。

SQL> select text from all_views where view_name='USER_TABLES';

TEXT

---------------------------------------------------------------------

select o.name, decode(bitand(t.property, 4194400), 0, ts.name, null),

decode(bitand(t.propert

SQL> set pagesize 1000;

SQL> set long 10000;

SQL> select text from all_views where view_name='USER_TABLES';

2. 经过互连网连接

配置C:\oracle\ora92\network\ADMIN的文件sqlnet.ora

# SQLNET.ORA Network Configuration File: C:\oracle\ora92\network\admin\sqlnet.ora

# Generated by Oracle configuration tools.

# NAMES.DEFAULT_DOMAIN = Infomation

# SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

开行配置助理Oracle Net Configuration Assistant,如下图所示:

图片 1

图片 2

图片 3

5. ORDER用户结果

order by <columns,columns..>

2.5.3 联接

笛Carl积

SQL> select t1.empno,t2.dname,t2.loc,t1.ename from emp t1,dept t2 where t1.deptno=t2.deptno;

6. GROUP BY和HAVING

GROUP BY
子句能够用来在询问结果集中对记录进行分组,以集中数据仍旧为整个组显示单选的汇总信息。

HAVING用户可以会同GROUP BY子句提供一个外加的子句,来过滤GROUP
BY查询所重临的行组。这么些HAVING子句只好够用于选取了GROUP
BY子句的询问,并且普通会含有一个SQL集函数,例如AVG、SUM、MAX等。

SQL> select empno,avg(sal) from emp group by empno having avg(sal)>=1000;

EMPNO AVG(SAL)

---------- ----------

7499 1600

7521 1250

7566 2975

7654 1250

7698 2850

7782 2450

7788 3000

7839 5000

7844 1500

7876 1100

7902 3000

7934 1300

已选择12行。

2.8 回滚

回滚事务和交由业务相似,即利用ROLLBACK便可对未提交的工作进行回滚。

2.6 其它DML语句

2.6.2 UPDATE语句

SQL> update dept set DNAME='OPERATION' where deptno=40;

1. UNION

UNION语句可以将率先个查询中的所有行与第一个查询的富有行相加,化解重复行并且重返结果。

SQL> select empno,ename,job from emp where ename like 'F%' union select empno,ename,job from emp where ename like 'A%';

EMPNO ENAME JOB

---------- ---------- ---------

7499 ALLEN SALESMAN

7876 ADAMS CLERK

7902 FORD ANALYST

2.1.1 SQL、PL/SQL和SQL*Plus之间的界别

SQL:结构化查询语言,恐怕是用来将数据放入数据库,从数据库检索数据,控制事务处理以及管理数据库的语言。

PL/SQL:Oracle的进程化编程语言,用户可以使用它编写在数据库中履行的定制程序以及经过代码。

SQL*Plus:是用户能够用来编排SQL和PL/SQL脚本的接口,即一个接口工具。

以账户(即用户名称):scott,私行认同密码(即口令):tiger
登录数据库(创设数据库,会活动分配一个示范账号scott)

SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 12月 29 10:34:34 2012

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

连接到:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL> begin

2 for cur in (select * from DEPT) loop

3 dbms_output.put_line(cur.dname || ' is the department name now.');

4 end loop;

5 end;

6 /

PL/SQL 过程已成功完成。

SQL>

3. PAGESIZE

考试:设置用户页面大小

从数量词典的ALL_OBJECTS视图中选拔ROWNUM和OBJECT_NAME。

SQL> set pagesize 10

SQL> select rownum,object_name from all_objects where rownum<20

2 /

ROWNUM OBJECT_NAME

---------- ------------------------------

1 /1005bd30_LnkdConstant

2 /10076b23_OraCustomDatumClosur

3 /10297c91_SAXAttrList

4 /103a2e73_DefaultEditorKitEndP

5 /10501902_BasicFileChooserUINe

6 /105072e7_HttpSessionBindingEv

7 /106ba0a5_ArrayEnumeration

ROWNUM OBJECT_NAME

---------- ------------------------------

8 /106faabc_BasicTreeUIKeyHandle

9 /10744837_ObjectStreamClass2

10 /1079c94d_NumberConstantData

11 /10804ae7_Constants

12 /108343f6_MultiColorChooserUI

13 /10845320_TypeMapImpl

14 /10948dc3_PermissionImpl

ROWNUM OBJECT_NAME

---------- ------------------------------

15 /1095ce9b_MultiComboBoxUI

16 /109a284b_OracleXMLStaticQuery

17 /109cbb8e_SpanShapeRendererSim

18 /10a45bfe_ProfilePrinterErrors

19 /10a793fd_LocaleElements_iw

已选择19行。

19条记录,2页,这里显示屏幕大小占10行。

工作规律

在我们的第二个会话没有付诸事务处理在此以前,无法在其次个会话中看到对多张表所做的改变。一旦选取COMMIT语句在大家的率先个会话中做到了事务处理,那么大家就可以立时在第四个会话中观望数据。

6. 外联接

外联接扩张了内对接的结果。外联接的结果将会是独具满意联接条件的行,以及存在于一个表中的有的行,它们在别的表中没有相应的行来餍足联接条件。

Select <columns> from <data table> left/right outer join <data table> on <conditional_expression>

SQL> select empno,dname,loc,ename,sal from emp left outer join dept on emp.deptno=dept.deptno;

EMPNO DNAME LOC ENAME SAL

---------- -------------- ------------- ---------- ----------

7934 ACCOUNTING NEW YORK MILLER 1300

7839 ACCOUNTING NEW YORK KING 5000

7782 ACCOUNTING NEW YORK CLARK 2450

7902 RESEARCH DALLAS FORD 3000

7876 RESEARCH DALLAS ADAMS 1100

7788 RESEARCH DALLAS SCOTT 3000

7566 RESEARCH DALLAS JONES 2975

7369 RESEARCH DALLAS SMITH 800

7900 SALES CHICAGO JAMES 950

7844 SALES CHICAGO TURNER 1500

7698 SALES CHICAGO BLAKE 2850

7654 SALES CHICAGO MARTIN 1250

7521 SALES CHICAGO WARD 1250

7499 SALES CHICAGO ALLEN 1600

2.2 快捷而简易地查询数据库

试验:

启动SQL*Plus,使用密码TIGER,作为SCOTT连接数据库(或以win+R,输入sqlplus)。

SQL> select table_name from user_tables;

TABLE_NAME

------------------------------

BONUS

DEPT

EMP

SALGRADE

工作原理

USER_TABLES是Oracle数据词典中的一个视图。当SQL*Plus中相见排版乱序(如行不够突显)特殊题材的时候,可以有三种接纳:

  • 忍受它。
  • 询问少量的列。
  • 格式化结果(用户可以让题目每10、100、10000行再度两回仍旧根本不另行)。

1. 命令行格局的SQL*Plus

  • Unix:$ORACLE_HOME/bin/sqlplus
  • Windows:%ORACLE_HOME5/bin/sqlplus.exe

本条目录应当在用户的PATH环境变量中。

  • SYS是多少词典的主人,只使用于管理的目的。SYS的暗许密码是CHANGE_ON_INSTALL。
  • SYSTME是一个社团者账号。SYSTEM的默许密码是MANAGER。
  • SCOTT是一个演示账号。SCOTT的暗中同意密码是TIGER。

2.6.1 INSERT语句

SQL> insert into dept values(50,'INFORMATION','CHINA');

3. LINESIZE

LINESIZE默许为80。通过此方法,用户不会因为出口数据领先了窗口的右手限制而丢失数据。

3. 利用WHERE子句联接表

select a.*,b.* from a,b where a.ID=b.ID

2. 操作符和准星的预先级

操作优先级:

  • :=、-。
  • *、/。
  • +、-,||。

标准优先级:

  • =、!=、<、>、<=、>=。
  • IS [NOT] NULL、LIKE、[NOT] BETWEEN、[NOT] IN、EXISTS。
  • NOT。
  • AND。
  • OR。

3. INTERSECT

INTERSECT那么些集合操作符会获取八个查询,对值进行集中,并且重返同时存在于七个结果集中的笔录。

SQL> select empno,ename,job from emp where ename like 'F%' or ename like 'A%' intersect select empno,ename,job from emp where ename like 'A%';

EMPNO ENAME JOB

---------- ---------- ---------

7499 ALLEN SALESMAN

7876 ADAMS CLERK

2. 列表名

询问中的列也得以被予以别名。

试验:连接Oracle

(1) 在DOS或然XTERM中,在晋升符下输入sqlplus,打开一个SQL*Plus会话。

(2) 使用用户名SCOTT和密码TIGER登录。

做事规律

2. UNION ALL

UNION
ALL语句与正规的UNION语句工作措施基本相同,只是不会从列表中滤除重复行。

SQL> select empno,ename,job from emp where ename like 'F%' union all select empno,ename,job from emp where ename like 'A%';

EMPNO ENAME JOB

---------- ---------- ---------

7902 FORD ANALYST

7499 ALLEN SALESMAN

7876 ADAMS CLERK

2. PAUSE

SQL> set pause on

一页之后,停止滚屏

SQL> set pause off

全部显示(一页的大小默认PAGESIZE是14)

2.4 表中情节

DESCRIBE <TABLE_NAME> or DESC <TABLE_NAME>

试验:描述表

SQL> describe dept;

名称 是否为空? 类型

----------------------------------------- -------- -------------

DEPTNO NOT NULL NUMBER(2)

DNAME VARCHAR2(14)

LOC VARCHAR2(13)

2.3 什么是SQL

SQL不是Oracle的专有技术;它是关周密据库管理种类的正统语言(最早是由IBM在二十世纪70年份建立,并于随后被ANSI/ISO标准化社团采用,并被愈来愈提炼和升华。

SQL-92 ANSI标准的SQL标准中共有几个层次:

(1) 入门层次。大部分供应商所构建的SQL引擎都会顺应层次1.

(2) 过滤层次。随着天性须要的充实,过滤层次介于入门层次和中间层次之间。

(3)
中间层次。中间层次的SQL-92包容层次要求在数据库中提供多量当先了入门可能过滤包容性的新特点。那么些特征包括但不局限于如下内容:

  • 动态SQL
  • 用于参照完整性的级联删除
  • DATE和TIME数据类型
  • 可变长度字符串
  • CASE表达式
  • 数据类型之间的CAST函数

(4) 完全。那是最高和末段级其余ANSI
SQL-92包容层次。它向中档层次的正式又追加了更多的风味,那些特点蕴含但不局限于如下内容:

  • 一而再管理
  • BIT字符串数据类型
  • 可顺延完整性约束
  • FROM子句中的派生表
  • CHECK子句中的子查询
  • 临时表

以下的列表展示了用户在选取Oracle的时候将会接纳差异类型的SQL:

  • 数码操作语言(DML)
  • 数据定义语言(DDL)
  • 事务处理控制语句
  • 会话控制语句
  • 系统控制语句

2.1 SQL*Plus简介

SQL*Plus是一个用于连接Oracle数据库的工具,具有可以满意Oracle用户和社团者须求的汪洋功用,包蕴:

  • 在数据库中履行SQL和PL/SQL
  • 履新数据库中的数据
  • 实践多少查询
  • 将查询结果集格式化为报表
  • 建立、编辑、检索和执行SQL脚本
  • 协助Oracle用户调整SQL查询
  • 管理数据库
  • 讲述数据库中的表和PL/SQL对象
  • 将数据从一个数据库复制到另一个数据库
  • 向用户发送消息,接受那一个用户的输入

4. FEEDBACK

查询结果最终输出N行。

SQL> show feedback

用于6或更多行的 FEEDBACK ON

SQL> select empno,ename,job from emp where rownum<7;

SQL> set feedback off

SQL> select empno,ename,job from emp where rownum<7;

SQL> set feedback 3

SQL> select empno,ename,job from emp where rownum<3;

2.5.4 集合操作符

经过应用两个聚众操作符UNION、UNIONALL、INTERSECT和MINUS,Oracle提供将五个可能七个SQL查询结合进一个独门的言语的力量。

动用集合操作符的询问称为复合查询(compound
query)。Oracle提供了一些编纂复合查询时须要依据的指南:

  • 在组成复合查询的相继单独的查询中,SELECT表中值的数码和数据类型必须相匹配。
  • 用户不或然在复合查询所富含的其余单独的查询中规定ORDER BY子句。
  • 用户不或然在BLOB、LONG这样的大数据对象上选择集合操作符。
  • 用户无法在集合操作符SELECT列表中选用嵌套或然数组那样的聚众。

5. 内联接

内连接就如自然联接一样,要在FROM子句中选取联接条件。双表中其中一个条相当主要联接列没有值,则不显得该记录。

Select <columns> from <data table> inner join <data table> where <conditional_expression>

1. 二元操作符

AND

2.1.2 启动SQL*Plus

  • 怎么着使用SQL*Plus工具连接数据库以及实施查询
  • 什么安排SQL*Plus,以格式化查询结果
  • SQL语句的不一样连串
  • 如何在数据库上编制查询来查看数据
  • 什么修改存储在数据库中的数据

3. Oracle 9i 中的ANSI联接

用户可以履行的两样种类的衔接如下所示:

  • 理所当然联接
  • 内连接
  • 外联接
    • 左联接
    • 右联接
    • 全盘联接

4. MINUS

MINUS集合操作符会再次来到所有从第二个查询中的记录,不过没有从第三个查询中回到的那一个记录。

SQL> select empno,ename,job from emp where ename like 'F%' or ename like 'A%' minus select empno,ename,job from emp where ename like 'A%';

EMPNO ENAME JOB

---------- ---------- ---------

7902 FORD ANALYST

2.5.1 查询

SELECT句子有:

  • WITH
  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

2.5.2 WHERE子句

select <columns> from <data table> where <conditional_expression>;
  • A=B
  • B
  • A<B
  • A!=B;A<>B
  • BETWEEN A AND B
  • A LIKE B
  • A NOT <条件表明式>

2.6.3 DELETE语句

SQL> delete from dept where deptno=40;

5. NUMFOFRMAT

NUMFORMAT的默认值是10。

SQL> set numformat 9999999.99

SQL> select sal from emp;

2.5 数据操作语言

1. COLUMN

SQL> select ename,sal from emp where ename like 'A%'

2 /

ENAME SAL

---------- ----------

ALLEN 1600

ADAMS 1100

SQL> column sal format $9,999.99

SQL> select ename,sal from emp where ename like 'A%'

2 /

ENAME SAL

---------- ----------

ALLEN $1,600.00

ADAMS $1,100.00

SQL> describe user_objects

名称 是否为空? 类型

----------------------------------------- -------- ----------------

OBJECT_NAME VARCHAR2(128)

SUBOBJECT_NAME VARCHAR2(30)

OBJECT_ID NUMBER

DATA_OBJECT_ID NUMBER

OBJECT_TYPE VARCHAR2(18)

CREATED DATE

LAST_DDL_TIME DATE

TIMESTAMP VARCHAR2(19)

STATUS VARCHAR2(7)

TEMPORARY VARCHAR2(1)

GENERATED VARCHAR2(1)

SECONDARY VARCHAR2(1)

2.7 提交和回滚

在Oracle中,在用户通报Oracle达成以前,用户对数据所做的改观(例如,INSERT、UPDATE、DELETE)都不会永远改变。那足以选用COMMIT的SQL语句已毕。

当用户在数据库中改变多少的时候,用户大概会发现有些时候会因为如此恐怕那样的案由,要求裁撤已经进展的改观。用户可以选拔ROLLBACK语句。

试验:提交更改

另开辟一个会话(即打开2个会话),用同样帐户登录,第四个会话插入一条记下,首个会话查询。

SQL> insert into dept values(50,'OPERATIONS','BOSTON');

已创建 1 行。

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 OPERATIONS BOSTON

SQL>

首先个会话未COMMIT前,第三个会话的笔录:

SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 31 08:47:08 2012

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

连接到:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

SQL>

首个会话:

SQL> commit;

第三个会话的记录:

SQL> select * from dept;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 OPERATIONS BOSTON

SQL>

1. 表别名

表别名(以前称为相关称号)是在FROM子句中用于各种表的“简短名称”,它们得以唯一地标识数据源,而且可以应用缩写。

4. 理所当然联接

动用当然联接八个表的时候,Oracle就会将率先个表中的那个列与首个表中保有同等名称的列进行衔接。

SQL> select empno,dname,loc,ename,sal from emp natural join dept where sal>1000;

EMPNO DNAME LOC ENAME SAL

---------- -------------- ------------- ---------- ----------

7499 SALES CHICAGO ALLEN 1600

7521 SALES CHICAGO WARD 1250

7566 RESEARCH DALLAS JONES 2975

7654 SALES CHICAGO MARTIN 1250

7698 SALES CHICAGO BLAKE 2850

7782 ACCOUNTING NEW YORK CLARK 2450

7788 RESEARCH DALLAS SCOTT 3000

7839 ACCOUNTING NEW YORK KING 5000

7844 SALES CHICAGO TURNER 1500

7876 RESEARCH DALLAS ADAMS 1100

7902 RESEARCH DALLAS FORD 3000

7934 ACCOUNTING NEW YORK MILLER 1300

已选择12行。

理所当然联接是一个争辨上很好,然则其实应用性很差的特征示例。各个表中的联接列都必有要持有同等的名号。这将会强制设计者将要联接表的连锁列命名为与所联网的表具有相同的称呼。

2.9 小结

小说依照本人通晓浓缩,仅供参考。

摘自:《Oracle编程入门经典》 南开大学出版社 http://www.tup.com.cn/

相关文章