26
SQL 课课课课 课课课课 Sqlplus 课课 / 课课 Table INSERT 课课课课 UPDATE 课课课课 DELETE 课课课课 SELECT 课课课课 WHERE Function 课课 Group Function 课课 Oracle Function 课课 LOAD,UNLOAD 课课课课 Sqlplus 课课 课课课课课

SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

Embed Size (px)

Citation preview

Page 1: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SQL 课程大纲• 如何进入 Sqlplus• 建立 /修改 Table• INSERT 指令介紹• UPDATE 指令介紹 • DELETE 指令介紹• SELECT 指令介紹• WHERE Function 介绍• Group Function 介绍• Oracle Function 介绍• LOAD,UNLOAD 指令介紹• Sqlplus 内的一些命令介绍

Page 2: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

进入 ISQL• sqlplus 1. 常规登陆 sqlplus SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 9 月 17 09:57:02 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

2. 快捷登陆 sqlplus username/passwd username 登陆用户名 passwd 登陆用户密码 SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 9 月 17 09:59:18 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: 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

Page 3: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 修改 Table• 数据类型 :

VARCHAR2(size) 字符类型 ( 变长 ) 例 VARCHAR2(10)

CHAR[(size)] 字符类型 ( 定长 ) 例 CHAR (10)

NUMBER[(p,s)] 数值类型例 : NUMBER(5) 表示 5 位整数例 : NUMBER(15,3) 表 11 位整数 , 3 位小数

DATE 日期时间类型

LONG 变长字符类型 , 最大长度 2G

CLOB 字符类型,最大长度 4G

BLOB 二进制类型,最大长度 4G

ROWID 16 进制字符串,代表在表中的一个行的唯一地址

Page 4: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 更改 Table1. 写好 create table 的 sql 再执行

vi dpe_file.sch /* ========================================================= 档案代号 :dpe_file 档案名称 : 体检项目代号资料档 ==========.===================.=========================== */ create table dpe_file ( dpe01 varchar2(6), /* 体检项目代号 */ dpe02 varchar2(30), /* 说明 */ dpe03 varchar2(01), /*No use */ dpeacti varchar2(01), /* 资料有效码 */ dpeuser varchar2(10), /* 资料所有者 */ dpegrup varchar2(06), /* 资料所有部门 */ dpemodu varchar2(10), /* 资料修改者 */ dpedate date /* 最近修改日 */ ); create unique index dpe_01 on dpe_file (dpe01);

Page 5: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 更改 Table2. 在 unix 环境下 sqlplus ds/ds < dpe_file.sch 即可 create table 了

</u1/topo/apy/sql> sqlplus ds/ds < dpe_file.schSQL*Plus: Release 9.2.0.1.0 - Production on 星期三 9 月 17 10:37:23 2003Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: 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 - ProductionDOC>============================================================ DOC> 档案代号 :dpe_file DOC> 档案名称 : 体检项目代号资料档 DOC>==========.===================.============================== DOC>*/ Table created. Index created. SQL>

Page 6: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 更改 Table3. 在 sqlplus 环境下建立 table SQL> create table dpe_file 2 ( 3 dpe01 varchar2(6), /* 体检项目代号 */ 4 dpe02 varchar2(30), /* 说明 */ 5 dpe03 varchar2(01), /*No use */ 6 dpeacti varchar2(01), /* 资料有效码 */ 7 dpeuser varchar2(10), /* 资料所有者 */ 8 dpegrup varchar2(06), /* 资料所有部门 */ 9 dpemodu varchar2(10), /* 资料修改者 */ 10 dpedate date /* 最近修改日 */ 11 );

Table created. SQL> create unique index dpe_01 on dpe_file (dpe01); Index created. SQL>

Page 7: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 更改 Table

SQL> desc dpe_file; Name Null? Type ----------------------------------------- -------- ---------------------------- DPE01 VARCHAR2(6) DPE02 VARCHAR2(30) DPE03 VARCHAR2(1) DPEACTI VARCHAR2(1) DPEUSER VARCHAR2(10) DPEGRUP VARCHAR2(6) DPEMODU VARCHAR2(10) DPEDATE DATE SQL>

Page 8: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 修改 Table• 修改 table 1.写成 sql 更改 SQL> ed alter_dpe.sch

alter table dpe_file modify (dpe01 varchar2(10)); /* 修改 dpe01*/

alter table dpe_file add (dpe00 varchar2(10)); /* 增加 dep00*/

alter table dpe_file drop (dpe03); /* 删除 dpe03*/

drop index dpe_01; /* 删除索引 */

SQL> @alter_dpe.sch

Table altered.

Table altered.

Table altered.

Index dropped.

Page 9: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 修改 Table

2.进入 sqlplus 更改 SQL> alter table dpe_file modify (dpe01 varchar2(10));

Table altered.

SQL> alter table dpe_file add (dpe00 varchar2(10)); Table altered. SQL> alter table dpe_file drop (dpe03); Table altered. SQL> drop index dpe_01; Index dropped. SQL>

Page 10: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

建立 / 修改 Table

SQL> desc dpe_file; Name Null? Type ----------------------------------------- -------- ---------------------------- DPE01 VARCHAR2(10) DPE02 VARCHAR2(30) DPEACTI VARCHAR2(1) DPEUSER VARCHAR2(10) DPEGRUP VARCHAR2(6) DPEMODU VARCHAR2(10) DPEDATE DATE DPE00 VARCHAR2(10)

Page 11: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

INSERT 指令介绍• INSERT INTO table_name[(column-list)]

VALUES(value-list)

范例 :

1. INSERT INTO dpe_file VALUES('A00003','test','','Y','carrier','1400','','03/09/17‘)

2. INSERT INTO cus_file(cus01,cus02)

VALUES(‘C00002’, ‘ test01’);

Page 12: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

UPDATE 指令介绍• Syntax UPDATE table_name SET col=expr,col=expr [WHERE clause ] 范列說明 : 1.UPDATE dpe_file SET dpe02=‘test02’ WHERE dpe01 LIKE ‘A%1’ 2. UPDATE dpe_file SET dpe02='test02', dpeacti='N‘ WHERE dpe01 like 'A%1' 3. UPDATE dpe_file SET dpeuser='michael‘, dpegrup='2100‘ WHERE (dpe01 = 'A00002' or dpe01 like 'C_000_');

Page 13: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

DELETE 指令介绍• Syntax:

DELETE FROM table_name

[WHERE clause]范例说明 :

1.DELETE FROM dpe_file

[ 注意 ]: 没有 where 条件会将所有资料删除 且无法将资料还原2.DELETE FROM dpe_file

WHERE dpe01 LIKE ‘C%’

Page 14: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介绍• Syntax:• SELECT column,group_function(column) FROM table_name [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column] 范例说明 : 1.SELECT * FROM cus_file order by cus01 ASC 2.SELECT cus01,cus02 FROM cus_file order by cus01 DESC,cus02 3.SELECT last_name,salary,12*salary+100 FROM employee 4.SELECT last_name As name,commission comm FROM employee 5.SELECT last_name||job_id as “Employee Info” FROM employee 6.SELECT last_name || ‘ is a ’||job_id as “Employee Detail” FROM employee 7.SELECT distinct dpe02 FROM dpe_file 8. SELECT last_name,age FROM employee WHERE age<=45

Page 15: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介绍• 范例说明 :

9.SELECT * FROM employee WHERE age between 20 and 65 SELECT * FROM dpe_file WHERE dpe02 is null and (dpeacti=‘Y’ or dpeuser like ‘carr%’) 10.SELECT employee_id,UPPER(last_name) FROM employee WHERE INITCAP(last_name) = ‘Higgins’ SELECT employee_id,CONCAT(first_name,last_name) NAME , job_id,LENGTH(last_name), INSTR(last-name,’a’) “Contain ‘a’?”

FROM employee WHERE SUBSTR(job_id,4)=“REP” SELECT last_name,salary,MOD(salary,5000) FROM employee WHERE job_id=‘SA_REP’ Join table 範例 : 11.SELECT oea01,oeb02,oeb04,oeb12 FROM oea_file,oeb_file WHERE oea01=oeb01 12.SELECT e.employee_id,e.last_name,e.department_id,d.department_id, d.location_id FROM employee e ,department d WHERE e.department_id=d.department_id

Page 16: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介紹• 范例說明 :

13. SELECT e.last_name,e.department_id,d.department_name FROM employee e ,department d WHERE e.department_id(+)=d.department_id SELECT e.last_name,e.department_id,d.department_name FROM employee e ,department d WHERE e.department_id=d.department_id(+) 14.INSERT INTO cus1_file SELECT * FROM cus_file 15.INSERT INTO cua_file(cua01,cua02) SELECT cus01,cus02 FROM cus_file WHERE cus01 MATCHES ‘C*’ 16.SELECT COUNT(*) FROM oea_file WHERE oea02 BETWEEN ’01/01/01’ AND ’01/12/31’ 17.SELECT COUNT(DISTINCT oea03) FROM oea_file WHERE oea02 BETWEEN ’01/01/01’ AND ’01/12/31’ 18.SELECT MAX(oea02),MIN(oea02) FROM oea_file WHERE oea02 BETWEEN ’01/01/01’ AND ’01/12/31’

Page 17: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介紹• 范例說明 :

19. SELECT AVG(oeb12) FROM oea_file,oeb_file WHERE oea02 BETWEEN '010101' AND '011231' AND oea01=oeb01 AND oeb04='11-03-SDD16‘ and oeb12<>0

20.SELECT * FROM oea_file WHERE oea02 = (SELECT MAX(oea02) FROM oea_file WHERE oea02 > = ’01/01/01’) 21.SELECT department_id,AVG(salary) FROM employee GROUP BY department_id

22.SELECT department_id,MAX(salary) FROM employee GROUP BY department_id HAVING MAX(salary)>10000

Page 18: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介紹 ----where

• 比较符号 ‘=’ ‘ >’ ‘ >= ’ ‘< ’ ‘<=’ ‘<>’

• 其它比较符号 BETWEEN .. AND .. WHERE age between 20 and 30

IN (..) WHERE age in (20,21,22,23,24,25,26,27,28,29,30)

LIKE WHERE dpe01 like ‘A_0%’

IS NULL WHERE age is null

Page 19: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

SELECT 指令介紹 ----where

• 逻辑符号 ‘AND’ ‘OR’ ‘NOT’ where dpe01=‘A00001’ AND dpe02=‘test01’

where dpe01=‘A00001’ OR dpe01=‘C00001’

where age not in (20,21,22,23,24,25,26,27,28,29,30)

Page 20: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

Group Function

• AVG

• COUNT

• MAX

• MIN

• STDDEV

• SUM

Page 21: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

Oracle Function---1

• Case-manipulation functions

lower,upper,initcap

• Character-manipulation functions concat,substr,length,

instr,lpad,rpad,trim

Function Result

LOWER(‘SQL Course’) sql course

UPPER(‘SQL Course’) SQL COURSE

INITCAP(‘SQL Course’) Sql Course

CONCAT(‘Hello’,’World’) HelloWorld

SUBSTR(‘Helloworld’,1,5) Hello

LENGTH(‘HelloWorld’) 10

INSTR(‘HelloWorld’,W) 6

LPAD(salary,10,’*’) *****24000

RPAD(salary,10,’*’) 24000*****

TRIM(‘H’ FROM ‘HelloWorld)

elloWorld

Page 22: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

FUNCTION---2• Number Function

ROUND

round(45.926,2) 45.93

TRUNC

trunc(45.926,2) 45.92

MOD

mod(1600,300) 100

Page 23: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

LOAD/UNLOAD 指令介绍• 因为 oracle 没有提供类似 INFORMIX 的 load,unload 语句,所以

在 tiptop 环境下有一些工具1. 使用 load shell,load shell 会去呼叫 $TOP/ora/load.42m 程序使用方式Usage: load database tablename txtfile

Ex : load ds ze_file ze_file.txt

2. 使用 loaddb shell,loaddb shell 会去呼叫 external tools SQL*Loader

使用方式Usage: /u1/topo/ora/bin/loaddb dbname [tablename] [txtfile]

Ex1 : /u1/topo/ora/bin/loaddb ds1

Ex2 : /u1/topo/ora/bin/loaddb ds1 ima_file [ima_file.txt]

Ex3 : /u1/topo/ora/bin/loaddb ds1 i%_file

3. 直接使用 Oracle 提供的 SQL*Loader, 但必须自己编辑 control file,

用法sqlldr ds/ds control=azb_file.ctl log=azb_file.log

Page 24: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

LOAD/UNLOAD 指令介绍control file 格式如下load datainfile '/u1/tiptopo/azb_file.txt 'append into table azb_filefields terminated by '^A'(azb01,azb02,azb06,azbacti,azbuser,azbgrup,azbmodu,azbdate)4. 另外可以在 BDL 程序中使用 channel 的方式来产生 SQL*Loader 所需用的 control

file,再透过 RUN command 的作法来激活 SQL*Loader,channel 的写法可参考 BDL 文件

Page 25: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

Sqlplus 一些命令介绍

• Help index 查询相关命令• @ 运行 .sql 的文件• Ed 类似于 vi• Get 将一句 sql 语句放入 sql 缓冲器• R –run• / 重复上一个在 memory 中的 command• Desc 显示表结构• Spool 记录执行过程• Start get+r• Save 将 memory 中的命令保存在一个文件中• Set 设置一些 oracle 设定

Page 26: SQL 课程大纲 如何进入 Sqlplus 建立 / 修改 Tabl e INSERT 指令介紹 UPDATE 指令介紹 DELETE 指令介紹 SELECT 指令介紹 WHERE Function 介绍 Group Function 介绍

Sqlplus 一些命令介绍示范1. help accept 找寻 accept 的帮助信息2. @c_dpe.sql 执行 c_dpe.sql 中的内容3. ed c_dpe.sql 编辑一个文件 c_dpe.sql4. get c_dpe.sql 将该文件的内容放入 memoery 中5. r 执行 memory 中的命令6. / 同 r7. desc dpe_file 查看 dpe_file 的表结构8. spool file.lst 将在这期间执行的命令及结果放入 file.lst 文件 sqlplus 命令 spool off 9. Start c_dpe.sql 执行 start 后面文件中的内容10. save t1.sql 11. set wrap on 设置可以折行显示12. Set heading off