SQLPlus和中坚查询

  • 什么样利用SQL*Plus工具连接数据库以及执行查询
  • 什么安排SQL*Plus,以格式化查询结果
  • SQL语句的不比档次
  • 如何在数据库上编制查询来查看数据
  • 怎么样修改存储在数据库中的数据

2.1 SQL*Plus简介

SQL*Plus是一个用来连接Oracle数据库的工具,具有可以满意Oracle用户和领队需要的汪洋成效,包罗:

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

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>

2.1.2 启动SQL*Plus

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。

试验:连接Oracle

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

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

行事原理

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,如下图所示:

bifa365必发 1

bifa365必发 2

bifa365必发 3

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行再度一遍仍然根本不另行)。

2.2.1 格式化用户结果

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. PAUSE

SQL> set pause on

一页之后,停止滚屏

SQL> set pause off

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

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行。

3. LINESIZE

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

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;

5. NUMFOFRMAT

NUMFORMAT的默认值是10。

SQL> set numformat 9999999.99

SQL> select sal from emp;

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.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.4 表中情节

DESCRIBE <TABLE_NAME> or DESC <TABLE_NAME>

试验:描述表

SQL> describe dept;

名称 是否为空? 类型

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

DEPTNO NOT NULL NUMBER(2)

DNAME VARCHAR2(14)

LOC VARCHAR2(13)

2.5 数据操作语言

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 <条件表明式>

1. 二元操作符

AND

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

操作优先级:

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

规格优先级:

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

3. 应用WHERE子句联接表

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

4. 理解NULL

NULL是一个用来叙述没有定义的情节的术语。NULL列意味着没有向列赋值。

在Oracle中,当执行IF
COL_A=<某个值>那样的口径操作时,或者的重返值是TURE、FALSET
UNKNOWN。

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

5. ORDER用户结果

order by <columns,columns..>

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.5.3 联接

笛Carl积

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

1. 表别名

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

2. 列表名

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

3. Oracle 9i 中的ANSI联接

用户可以推行的不比体系的衔接如下所示:

  • 本来联接
  • 内连接
  • 外联接
    • 左联接
    • 右联接
    • 全然联接

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行。

自然联接是一个理论上很好,但是实际上应用性很差的特征示例。各个表中的联接列都必有要有所同样的名号。那将会强制设计者将要联接表的连锁列命名为与所联网的表具有同样的称谓。

5. 内联接

内连接就好像自然联接一样,要在FROM子句中使用联接条件。双表中其中一个条第一联接列没有值,则不出示该记录。

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

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

7. 自联接

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

2.5.4 集合操作符

经过行使两个聚众操作符UNION、UNIONALL、INTERSECT和MINUS,Oracle提供将三个恐怕七个SQL查询结合进一个独门的口舌的能力。

采纳集合操作符的询问称为复合查询(compound
query)。Oracle提供了一些编辑复合查询时索要依据的指南:

  • 在整合复合查询的依次单独的询问中,SELECT表中值的数目和数据类型必须相匹配。
  • 用户不可以在复合查询所包涵的别的单独的询问中确定ORDER BY子句。
  • 用户无法在BLOB、LONG那样的大数量对象上应用集合操作符。
  • 用户不或许在集合操作符SELECT列表中运用嵌套大概数组那样的集合。

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. 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

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

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.6 其它DML语句

2.6.1 INSERT语句

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

2.6.2 UPDATE语句

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

2.6.3 DELETE语句

SQL> delete from dept where deptno=40;

bifa365必发,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>

做事规律

在我们的第四个会话没有交给事务处理之前,无法在其次个会话中看到对多张表所做的改观。一旦拔取COMMIT语句在大家的首先个会话中达成了事务处理,那么大家就可以立即在其次个会话中看出数据。

2.8 回滚

回滚事务和付出业务相似,即选取ROLLBACK便可对未提交的工作举办回滚。

2.9 小结

小说按照本人精通浓缩,仅供参考。

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注