1.1.1结构查询语言SQL
SQL语言是一种使用方便灵活的语言,因为它是一种非过程化程度相当高的语言,使用这种语言编程,用户只需在程序中指出要干什么,至于如何干,用户不必在程序中指出,而由系统来决定完成。
SQL语言可以通过两种方式使用,一种是命令方式,另一种是程序方式。采用命令方式时,用户通过交互来执行该命令。SQL语言还可以嵌入C,COBOL和FORTRAN等高级语言中,组成一个完整的程序。用户可以根据不同需要选择不同的使用方式,以满足不同的要求。
SQL语言还提供了事务控制,以保证数据共享以及并发使用时不产生干扰,也便于对数据库的恢复。此外,SQL语言还提供了授权控制,以保证数据的安全与保密,防止非法用户对数据库的使用与破坏。
正因为SQL语言的这些特点,使它受到人们的广泛重视与欢迎。近几年来,SQL语言已成为标准的数据库语言,现在已有一百多个数据库管理产品支持SQL语言。
1.1.2 启动SQL*PLUS
启动SQL*PLUS的步骤如下:
(1) 将ORACLE软件安装到机器上。
(2) 启动机器进行操作系统登录,成功后用户将在屏幕上看到操作系统的提示符,说明进入操作系统已经成功。
(3) 启动ORACLE数据库系统,将ORACLE RDBMS装入内存中,命令执行后,就可以运行工具软件了。
(4) 在操作系统提示符下执行SQL*PLUS:
$ SQLPLUS [ RETURN]
SQL*PLUS将显示它的版本号、日期和版权信息,并提示你输入用户名。因为ORACLE保护对它所有数据的访问,所以与它连接通常需要一个用户标识(user-name)和口令(password)。
Enter user-name:
输入用户名后按[RETURN],SQL*PLUS提示你输入口令:
Enter password:
如果口令输入正确,SQL*PLUS将宣布你已经与ORACLE连接上了,然后显示:
SQL>
说明现在你已经进入SQL*PLUS中,并等待你的指示。
如果输入的用户名或口令不正确,在向ORACLE三次注册失败后,屏幕上将出现终止服务信息,并退出SQL*PLUS。
在进入SQL*PLUS时,也可以在命令行上直接输入用户名和口令,中间以“/”分隔,比如,你的用户名是SCOTT,口令是TIGER,那么你输入下列命令:
$ SQLPLUS SCOTT/TIGER
就可以进入SQL*PLUS中。
当你想停止工作并离开SQL*PLUS,则可以输入EXIT或QUIT命令。
SQL>EXIT
1.1.3 预备知识
1、基表
ORACLE是一种关系型数据库系统,它以关系的方式组织数据,这里所说的关系,我们称之为基表。一个数据库可以由若干个表组成,用户对数据库的操作也就是对表的操作。
ORACLE用基表的形式存储信息,如表1.1所示。
表1.1 EMP表
EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
7369 | SMITH | CLERK | 7902 | 17-Dec-80 | 800 |
| 20 |
7499 | ALLEN | SLESMAN | 7698 | 20-Feb-81 | 1600 | 300 | 30 |
7521 | WARD | SALESMAN | 7698 | 22-Feb-81 | 1250 | 500 | 30 |
7566 | JONES | MANAGER | 7839 | 2-Apr-81 | 2975 |
| 20 |
7654 | MARTIN | SALESMAN | 7698 | 28-Sep-81 | 1250 | 1400 | 30 |
7698 | BLAKE | MANAGER | 7839 | 1-May-81 | 2850 |
| 30 |
每个基表都有一个表名,以便识别。每个基表都包含一个或一个以上的列,每列包含一类信息,并都有一个列名,以描述保存在那一列中的信息的种类。表名和列名构成了基表的框架,也就是基表的分类信息。具体信息一行一行存放,表的每一行表示一组独立的数据,它由具有不同列值的各列组成。
2、基表之间的关系
在数据库中,数据与数据之间是存在着联系的,我们可以将某个基表中的信息与其他基表中的信息建立关系,例如,在前面的EMP表中,每个雇员均有部门编号(DEPTNO),它对应于DEPT表中的部门编号(DEPTNO),见表1.2。
表1.2 DEPT表
DEPTNO | DNAME | LOC |
40 | OPERATIONS | BOSTON |
30 | SALSE | CHICAGO |
20 | RSESARCH | DALLAS |
10 | ACCOUNTING | NEW YORK |
这样可便于信息的独立组织,因为我们可以在EMP表中存放雇员信息,而无需在基中存放DEPT表中有关部门的信息。当然,我们还可以在多个基表之间建立联系。
3、数据字典
数据字典是ORACLE关系数据库管理系统(RDBMS)最重要的成分之一,是数据库系统的宝贵资源。数据库管理员(DBA)使用它来监视ORALCE RDBMS的使用,并协助用户完成他们的工作。数据字典是由ORALCE自动建立并更新的一组基表和视图,在这里记录了用户的姓名、基表和视图的定义、用户权限以及数据存储等方面的信息。
数据字典中包括下列信息的描述:
(1) ORACLE所有用户的标识及用户的存取权限。
(2) 每个用户所拥有的数据库实体(表、空间定义、视图、索引、聚簇和同义词)的定义。
(3) 为数据库实体分配的空间情况。
我们可以通过查询语句查看数据字典中的有关内容。例如:用户需要查看当前用户创建的所有基表、视图和同义词清单,可以使用下列命令:
SQL>SELECT * FROM CAT;
CAT表中存放的就是有关用户创建的基表、视图和同义词情况的描述。
数据字典由几个基础表及派生出来的视图组成。基础表是由ORACLE RDBMS自动更新,用户基本上不访问基础表,ORACLE RDBMS不断地更新数据字典的基础表,而视图总是引用基础表中的最新数据。
一般来说,用户不能直接更新ORACLE的数据字典,因为用户操作不当、删除或修改了某些数据字典的内容,就会造成数据库的破坏。
1.1.4 SQL*PLUS命令
SQL*PLUS可接收两种类型的命令:SQL命令和SQL*PLUS命令。SQL命令主要用来对数据库进行操作,而SQL*PLUS命令主要用来设置查询结果的显示格式,设置一些环境选项。
1、SQL命令
SQL命令主要用于ORACLE数据库中创建、存储、改变、检索和维护信息。当输入SQL命令时,SQL*PLUS将其保存在内部缓冲区中,这个内部缓冲区称为SQL缓冲区。SQL缓冲区只保存一条SQL命令,当输入新的SQL命令时,原来保存的SQL命令就被删除。用户可以利用SQL缓冲区在不重新输入命令的情况下,编辑、运行上一次执行的SQL命令。
SQL命令可以分一行或多行输入,如果在一行输入,则是
SQL> SELECT EMPNO,ENAME,JOB,SAL,FROM EMP WHERE SAL<2500;
在SQL命令输入过程中,如果按RETURN键,则表示命令分多行输入,在下一行的开始处将自动出现一个行号。如:
SQL>SELECT EMPNO,ENAME,JOB,SAL
2 FROM EMP
3 WHERE SAL<2500;
SQL命令完成,可以用分号(;)、斜线(/)或空行来结束命令的输入。输入分号并按RETURN键,则结束SQL命令的输入,并运行SQL缓冲区中的命令。在单独的一行上键入斜线并按RETURN键,SQL*PLUS将运行SQL命令。如果输入一个空行,即在命令的最后一行后按RETURN键,SQL*PLUS显示一个行号,此时再按RETURN键,SQL*PLUS结束SQL命令的输入,回到SQL*PLUS的提示符状态。
2、SQL*PLUS命令
SQL*PLUS命令用于设置查询结果的输出格式,形成复杂的报表,编辑SQL命令,设置系统变量并可提供帮助信息。
SQL*PLUS的很多命令可简写成一个或几个字母,SQL*PLUS命令的输入与SQL命令不同,例如,我们想改变EMP表的SAL列的显示格式,可以键入:
SQL>COLUMN SAL FORMAT $99,999 HEADING SALARY
COLUMN命令为SAL列的数据显示设置了“$”和“,”,并给出了新的列标题,通过运行前面的SQL命令可以清楚地看到SQL*PLUS命令的结果。
在输入SQL*PLUS命令过程中,按RETURN键表示输入完成,而不必输入分号(;)。
如果命令输入占满一行,光标会自动移到下一行,可以继续输入,直到按RETURN键结束输入。
1.1.5获取帮助
1、随机帮助
在实际使用SQL*PLUS时,有时需要能有一种快捷的方法,获得有关命令的语法、含义的说明。SQL*PLUS提供了HELP命令,为使用者提供随机帮助信息。如果要获取所有SQL和SQL*PLUS命令的信息,只需输入
SQL>HELP
如果希望获取某一个命令的信息,可以在HELP之后输入该命令的名字,例如:
SQL>HELP ACCEPT
2、DESCRIBE 命令
当我们需要对基表进行操作的时候,往往需要获取关于基表的结构信息,可以使用DESCRIBE命令查看基表的结构:
SQL>DESCRIBE DEP
命令执行结果如下:
NAME | NULL? | TYPE |
DEPTNO | NOT NULL | NUMBER (2) |
DNAME |
| CHAR (14) |
LOC |
| CHAR (13) |
基表的结构信息包括:
NAME 列名
NULL 标识该列是否允许为空值,如缺省则表示允许为空值
TYPE 说明该列的数据类型,
可以是字符型:CHAR(w),VARCHAR2(w);
数字型:NUMBER(w,d)
日期型:DATE
原始数据型:RAW以及LONG型等等。
其中w表示列的宽度,d表示小数点之后的位数
还可以使用DESCRIBE命令获取有关函数、过程以及包括描述,例如:要求显示有关函数AFUNC的信息:
SQL>DESCRIBE afunc
结果是
function afunc(F1 CHAR,F2 NUMBER)return NUMBER;
1.1.6编辑SQL*PLUS命令的使用
1、命令行编辑命令
我们可以使用SQL*PLUS的一些行编辑命令编辑SQL缓冲区中的SQL命令,表1.3列出了编辑功能的SQL8PLUS命令。
表1.3
命 令 | 缩 写 | 意 义 |
APPEND text | A text | text行尾增加 |
CHANGE/old/new | C/old/new | 在当前行中将old改为new |
CHANGE/text | C/text | 从当前行中删除text |
CLEAR BUFFER | CL BUFF | 删除SQL缓冲区的所有行 |
DEL | 无 | 删除当前行 |
INPUT | I | 增加一行或多行 |
INPUT text | I text | 增加一个由text组成的行 |
LIST | L | 显示SQL缓冲区的所有行 |
LIST n | L n 或n | 显示一行 |
LIST * | L* | 显示当前行 |
LIST LAST | LAST | 显示最后一行 |
LIST m n | L m n | 显示多行(从m到n) |
(1)显示SQL缓冲区的命令
使用LIST命令可以显示当前SQL缓冲区的内容。如果LIST命令后面不带任何参数,将显示SQL缓冲区中的所有行;如果LIST后面带一个参数(如LIST n),则显示第n行的内容;如果LIST后面带有两个参数(LIST m n),那将显示多行,即从m行到n行。例如:
SQL>LIST
1 SELECT EMPNO,ENAME,JOB,SAL
2 * FROM EMP WHERE SQL <2500;
行号2后面的星号表示第2行为当前行。除LIST命令外,其他编辑命令都只对SQL缓冲区的当前行操作。在SELECT命令尾部输入的分号(;)没有显示,因为SQL*PLUS并不把它保存在SQL缓冲区中,所以在缓冲区未尾增加新行时;不必从最后一行去掉分号,使编辑更为方便。
(2)修改SQL命令
使用CHANGE命令可以从当前行中删除一部分内容,或者用新的内容替换原先的内容。在使用CHANGE命令之前必须先用带一个参数的LIST命令选择当前行。例如,下列命令将DEPTNO错输出DPTNO:
SQL>SELECT DPTNO,ENAME,SAL
2 FROM EMP
3 WHERE DEPTNO=10;
系统给出出错信息:
SELECT DPTNO,ENAME,SAL
*
ERROR at Line 1:
ORA-0904:invalid column name
使用CHANGE命令进行修改:
SQL>CHANGE/DPTNO/DEPTNO
改正后屏幕上显示:
1* SELECT DEPTNO,ENAME,SAL
这时可用RUN命令重新运行修改后的SQL命令。
(3)增加新行
使用INPUT命令可以在SQL缓冲区增加一个或多个新行。如果只输入INPUT,则在当前行之后插入多个新行;如果输入INPUT text,则在当前行之后插入由text组成的新行。
例如,输入INPUT命令:
SQL>INPUT
4
这时在INPUT命令之后出现一个行号,这个行号表明所要插入的行,此时可输入一个或多个新行。输入一行内容后按RETURN键,SQL*PLUS给出一个新行号,如屏幕所示:
4 ORDER BY SAL
5
再按RETURN键,表示插入结束,可用RUN命令重新运行来检验最终的查询结果。
(4)在一行后追加内容
使用APPEND命令可以在SQL缓冲区中的当前行未尾追加内容。首先用LIST命令将需要追加内容的行置为当前行,然后使用APPEND text命令在当前行未尾追加内容。例如,要在第四行未尾追加DESC选项,先将第四行置为当前行:
SQL>LIST 4
4* ORDER BY SAL
然后输入下列命令追加DESC:
SQL>APPEND DESC
4* ORDER BY SAL DESC
最后用RUN命令重新运行。
(5)删除SQL缓冲区中的行
使用DEL命令可以删除SQL缓冲区中的当前行,当前行以下各行的行号顺序减1,如果把第一行设为当前行,连续多次输入DEL后,可以删除SQL缓冲区中的所有行。删除SQL缓冲区中所有行也可以使用CLEAR BUFFER命令,它的作用是将SQL缓冲区清空。
2、EDIT命令
EDIT命令用于调用一个操作系统提供的文本编辑器。编辑SQL缓冲区里的内容或操作系统下的文本文件,并将要编辑的文件名传送给该编辑器。如果文件扩展名(例如. ext)被省略,则系统自动追加.SQL的扩展名,如果文件名和扩展名均省略,则编辑器被调用,并将SQL*PLUS产生的文件名传给它,这个文件中包含着当前缓冲区的内容。如果当前缓冲区为空,且EDIT被调用时没有给出文件名,则EDIT命令失败。
SQL>EDIT
也可以是
SQL>EDIT 文件名
可以使用EDFINE命令设置系统变量_EDITOR来改变文本编辑器的类型,一般在LOGIN.SQL文件中完成它的设置,当SQL*PLUS被调用时将读出这些信息。例如,在UNIX平台上,定义Vi作为SQL *PLUS调用的外部编辑器:
SQL>DEFINE_EDITOR=Vi
3、SAVE命令
如果要把SQL命令存储到磁盘上,或者想使用自己的编辑程序,用户可以通过SAVE命令将内容写到一个文件上。
SQL>SAVE DEPTINFO
这时SQL*PLUS响应:
Create file DEPTINFO
文件名后缀缺省为.SQL。这时用户需要保存的内容已经存入了DEPTINFO.SQL文件中,可以对文件进行编辑、运行。
如果想将修改过的内容保存到原有的命令文件中,则在SAVE命令后增加REPLACE选项:
SQL>SAVE DEPTINFO REPLACE
如果想将SQL缓冲区的内容追加到已经存在的命令文件未尾,则在SAVE命令后增加APPEND选项:
SQL>SAVE file—name APPEND
4、GET命令
GET命令把磁盘上的命令文件内容调入当前缓冲区,并显示在屏幕上,格式是
SQL>GET file—name
文件后缀缺省为.SQL,文件被调入缓冲区后,可以对它进行编辑、运行。
5、运行命令文件
START命令将指定文件调入缓冲区并执行文件内容:
SQL>START file—name
文件后缀缺省为.SQL。也可以使用“@”命令运行文件:
SQL>@ file—name