Orcle第二章.docx
- 文档编号:18076347
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:27
- 大小:27.79KB
Orcle第二章.docx
《Orcle第二章.docx》由会员分享,可在线阅读,更多相关《Orcle第二章.docx(27页珍藏版)》请在冰点文库上搜索。
Orcle第二章
讲义
第二章SQL语言基础
本章内容
2.1SQL概述
2.2SQL*Plus概述
2.3数据操纵SQL
2.4查询
2.1SQL概述
SQL(StructureQueryLanguage)语言是数据库的核心语。
1.SQL语言的特点
①在Oracle数据库中创建、存储、更新、检索和维护数据;
②SQL语句由关键字、表名、字段名、变量名及表达式等构成;
③SQL语言是面向集合的描述性非过程化的4GL。
2.SQL语言共分为五大类:
–数据查询语言DQL(SELECT)
–数据操纵语言DML(INSERT、UPDATE、DELETE)
–数据定义语言DDL(CREATE、ALTER、DROP)
–事务控制语言(COMMIT、ROLLBACK)
–数据控制语言DCL(GRANT、REVOKE)。
3.SQL语言的基本语法
SQL语言的语法比较简单,类似于英文语法,说明如下:
①SQL语句一般由主句和从句组成,主句表示主要功能;
从句表示条件和限定;
②在关键字、变量名、字段名、表名等之间用一个以上
的空格或逗号分隔;
③语句不分大小写(查询的数据内容除外);
④一条语句可写在一行或多行上;
⑤每条语句已分号(;)结束。
例:
Selectspbm,spmc,xsjefromT_SPMLwherexsjg>=100;
------------------------------------------------
主句从句
4.SQL基本数据类型
•常量数值常量、字符常量
•数值型Number整数型、浮点数
•字符型Char、Varchar2固定长、可变长
•日期型DateDD-MM月-YY(MM=1—12)
•长字符型Long长字符串(32767)
•布尔型Boolean真(TRUE)、假(FALSE)
描述格式:
number(m,n)char(n)varchar2(n)
Datelong(n)Boolean
例:
number(6,2)char(8)varchar2(20)long(1000)
种类
运算符
含义
算术
运算符
**
指数
*、/
乘、除
+、-、||
加、减、连接
关系
运算符
<>或!
=
不等于
>、<
大于、小于
>=、<=
大于等、小于等
In
匹配列表
Like
部分匹配
IsNull
空
Between下限and上限
种类
运算符
含义
逻辑
运算符
Not
相反逻辑
And
与
Or
或
其他常
用符号
/*与*/
块注释
--
行注释
:
=
赋值
‘与’
字符串界
.
项分隔
;
语句结束
()
分隔包含
6.常用函数
函数是一种有零个或多个参数并且有一个返回值的程序。
在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL
或PL/SQL语句,函数主要分为两大类,单行函数和组函数。
单行字符函数
单行数字函数
单行日期函数
单行转换函数
组函数(集合函数)
(1).单行函数
①数值函数
MOD—语法:
MOD(m,n)返回m/n的余数;
ROUND—语法:
ROUND(n,m)
返回n四舍五入后取小数点后m位数;
②字符函数
SUBSTR—语法:
SUBSTR(char,m,n)
返回char中第m位开始取n个字符值;
例:
SUBSTR(’12字符’,1,4)返回’12字符’
SUBSTR(‘12345’,1,4)返回‘1234’
SUBSTRB—语法:
SUBSTRB(char,m,n)
返回char中第m位开始取n个字节值。
例:
SUBSTRB(’12字符’,1,4)返回’12字’
SUBSTRB(‘12345’,1,4)返回‘1234’
LENGTH—语法:
LENGTH(char)返回字符长度
③日期函数
SYSDATE—语法:
SYSDATE返回系统当前日期
例:
To_Char(SYSDATE,’YYYYMMDDHH24:
MI:
SS’)
LAST_DAY—语法:
LAST_DAY(日期)
返回该月份的最后一天;
例:
LAST_DAY(SYSDATE)-SYSDATE
④转换函数
TO_CHAR—语法:
TO_CHAR(日期,格式)把日期转换为字符串;
TO_CHAR(数值)把数值转换为字符串;
TO_DATE—语法:
TO_DATE(char,格式)把字符串转换为日期;
TO_NUMBER—语法:
TO_NUMBER(char)把字符串转换为数值。
例:
求某一天的星期TO_CHAR(SYSDATE,'D')
⑤其他函数
NVL—语法:
NVL(表达式1,表达式2)
如果表达式1为空,则返回表达式2,否则返回表达式1;
例:
Selectxsjg*nvl(xssl,0)fromt_spxsrb;
(2).组函数
①取值选项
ALL—在组函数取所有的值,包括重复的值;
DISTINCT—重复值只取一个。
②函数
COUNT—语法:
COUNT([ALL|DISTINCT]表达式)
返回查询行数;
MAX—语法:
MAX(表达式)返回最大值;
MIN—语法:
MIN(表达式)返回最小值;
SUM—语法:
SUM(表达式)返回表达式值的和。
2.2SQL*Plus概述
Oracle的SQL*Plus是标准SQL的一个扩展集,除了符合SQL
标准的语句外,它还提供了一些Oracle的特定的外加语句。
SQL*Plus是用户和数据库服务器之间的友好字符接口。
用
户可以在SQL*Plus窗口编写语句,实现数据的处理和控制等多
种功能。
2.2.1SQL*Plus的启动和关闭
1.菜单方式SQL*Plus的启动
在【开始】菜单的【程序】中运行OracleforOra92Home
组的SQL*Plus程序。
弹出登录窗口,要求输入用户名、口令和
连接字符串。
SQL*Plus连接到连接字符串所对应的数据库。
2.命令行方式启动(DOS方式启动SQL*Plus。
)
.单击[运行]菜单命令,打开运行对话框。
.在”打开”的文本框中输入sqlplus,或输入
sqlplus用户名/密码@连接字符串
例:
c:
\>sqlplusscott/tiger@W
3.SQL*Plus的关闭
在使用完SQL*Plus后,一定要正确关闭会话,才能确保会话使用的数据库资源释放,以便数据库的其他用户访问。
.直接关闭窗口
.在SQL>提示符后键入并执行EXIT命令,窗口自动关闭
2.2.2SQL*Plus常用编辑命令
•SAVE
该命令将当前的命令行保存到操作系统的文件中。
格式:
SAVEfilename[.ext]
其中filename:
将把缓冲区中的内容存入到操作系统目录的文件名。
ext:
文件后缀,缺省的文件后缀为SQL。
2.GET
该命令将操作系统的目录下的命令文件读到缓冲区(但不
执行)。
格式:
GETfilename[.ext]
其中filename:
希望加载到SQL缓冲区的文件名。
ext:
文件的扩展名,缺省为SQL.
3.EDIT
该命令为调用操作系统的编辑指定文件或缓冲区的内容。
格式:
EDIT[filename][.ext]
其中:
如果EDIT后面没有跟文件名,则编辑SQL缓冲区中的
内容,编辑中所做的改变均存入缓冲区。
4.RUN或/
该命令运行指定的文件。
5.SPOOL
SPOOL命令可以实现将屏幕所出现的一切信息记录到操作
系统的文件中直到SPOOLOFF为止。
格式:
SPOOL[filename[.ext]|OFF]
其中filename:
输出(spool)的文件名.ext文件的后缀。
缺省的后缀是LST(或LIS)。
例:
SPOOLtest
/*以下的屏幕显示内容存储到test.lst文件中*/
SPOOLoff
/*结束屏幕显示内容输出到文件中*/
2.3数据库对象创建和操纵
2.3.1创建基表
基表是关系数据库中最重要的数据库对象,其他数据库对
象的创建以及各种操作都是围绕表进行。
1.定义语句格式
CREATETABLE<表名>(
<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]
¡
[,<表级完整性约束条件>])
例:
CreateTableTT_spml(
spbmchar(6),spmcvarchar2(20),
spggvarchar2(15),spcdvarchar2(10),
jldwchar
(2),ghdwchar(6),
xsjgnumber(8,2),zfrqchar(8));
2.描述语句
Oracle对SQL最重要的改进之就是增加了描述(describe)命令,使用describe命令,用户可以快速掌握表及其中所有表列的概要。
describe命令可以列出存储的PL/SQL包中所有的过程和这些过程所使用的输入/输出参数。
例:
显示表商品目录及供货单位的结构
DESCribeT_spml;
DESCribeT_ghdwml;
练习:
在SAM用户下建立表Student,Course,SC
createtableStudent(
Stu_nochar(8),
Stu_namevarchar2(10)notnull,
Stu_agenumber(3),
Stu_sexchar
(2),
CONSTRAINTpk_snoPRIMARYKEY(Stu_no));
createtableCourse(--课程表
Cou_nochar(3),
Cou_namevarchar2(16)notnull,
Cou_teachervarchar2(10),
PRIMARYKEY(Cou_no));
createtableSC(--成绩表
Stu_nochar(8),
Cou_nochar(3),
Gradenumber(3),
PRIMARYKEY(Stu_no,Cou_no),
REFERENCESStudent(Stu_no),
REFERENCESCourse(Cou_no),
CHECK((gradeisnull)or
(gradebetween0and100)));
3.复制表
CreateTable表名1asselect列名1,列名2…from表名2;
例:
CreateTableex_copy_studentasselect*fromex_stu;
4.删除表DropTable语句
格式:
Droptable表名[CascadeConstraint]语句;
CascadeConstraint—当要删除的表与与其他表有
约束条件时同时删除约束条件。
例:
DropTableTT_spml;
例:
CreateTableTT_ghdwmlasSelectdwbm,dwmcfromt_ghdwml;
DropTableTT_ghdwml;
5.表的重命名Rename语句
格式:
Rename原表名To现表名;
例:
RenameTT_ghdwmltoghdwml;
6.数据完整性与约束条件
列级格式:
Createtable表名
(列名1类型约束条件,列名2类型约束条件,…);
表级格式:
Createtable表名
(列名1类型,列名2类型,…)约束条件;
约束条件:
Check–检验取值的正确性;
NotNull–不允许取空值;
Unique–值不允许重复;
PrimaryKey–设定为主键,值不允许重复和空;
ForeignKey–设定为外键,建立表的主从关系,
外键的值必须存在于主表的主键中;
本章所有例子以下列学生选课系统为例。
学生T_XSML(学号XSBH,姓名XSXM,身份证号SFZH,性别XSXB)
课程T_kcml(专业编码ZYBM、专业名称ZYMC、课程编码KCBM)
成绩T_xscjb(学号编号,课程编码,平时成绩PSCJ、考试成绩KSCJ)
•主键PrimaryKey
主键有两个功能:
①能够唯一地标示每一行;
②主键不能是空值。
主键有两个规则:
①每个表只能有一个主键;
②主键可以是一列或多列组合。
例:
创建学生目录表
CreateTableT_xsml(xsbhchar(8)PrimaryKey,
xsxmvarchar2(8),sfzhchar(18),xsxbchar
(1));
CreateTableT_xscjb(--学生成绩表
kcbmchar(4),--课程编码
xsbhchar(8),--学生编号
pscjvarchar2(6),--平时成绩
kscjvarchar2(6),--考试成绩
ConstraintpkPrimaryKey(kcbm,xsbh));
Constraintpk—可以省略
InsertintoT_xscjbValues('1101','20031101','85','90');
InsertintoT_xscjbValues('1101','','85','90');
InsertintoT_xscjbValues('1101','20031102','85','90');
•非空NotNull
非空功能:
列不能是空值。
例:
CreateTableT_xsml(xsbhchar(8)PrimaryKey,
xsxmvarchar2(8),xsxbchar
(1)NotNull);
InsertIntoT_xsmlvalues('20031101','王强','M');
•唯一Unique
功能:
表中所有的行限定唯一的列(列组)不能重复。
:
CreateTableT_xscjb(
kcbmchar(4),--课程编码
xsbhchar(8),--学生编号
pscjvarchar2(6),--平时成绩
kscjvarchar2(6),--考试成绩
ConstraintuqUnique(kcbm,xsbh));
Constraintuq—可以省略
•检查Check
检查功能:
列只能取指定范围的值,可以有多个限定。
例:
CreateTableT_xsml(
xsbhchar(8)PrimaryKey,
xsxmvarchar2(8)Notnull,
xsxbchar
(1),
ConstraintckCheck(xsxbin(‘M’,‘W’)));
Constraintck–可以省略
InsertIntoT_xsmlvalues('20031101','王强','M');
•外键ForeignKey
外键功能:
限定两个表之间的数据关系。
外键可以一列或多列。
删除时应注意表之间的关系
例:
CreateTableT_xscjb(
xsbhchar(8),
kcbmchar(4)ReferencesT_kcml,
--T_kcml课程目录的主键
pscjvarchar2(6),
kscjvarchar2(6));
CreateTableT_kcml(kcbmchar(4)Primarykey,
kcmcvarchar2(20));
CreateTableT_xscjb(
xsbhchar(8),
zybmchar(3),--专业编码
kcbmchar(4),
pscjvarchar2(6),
kscjvarchar2(6),
ForeignKey(zybm,kcbm)
ReferencesT_kcml(zybm,kcbm));--课程目录
CreateTableT_kcml(
zybmchar(3),
zymcvarchar(20),
kcbmchar(4),
primarykey(zybm,kcbm));
注意:
在有多列外键时,所要关联表的主键必须是
相对应多列。
练习:
在SAM用户下建立表Student,Course,SC
createtableStudent(
Stu_nochar(8),
Stu_namevarchar2(10)notnull,
Stu_agenumber(3),
Stu_sexchar
(2),
CONSTRAINTpk_snoPRIMARYKEY(Stu_no));
createtableCourse(--课程表
Cou_nochar(3),
Cou_namevarchar2(16)notnull,
Cou_teachervarchar2(10),
PRIMARYKEY(Cou_no));
createtableSC(--成绩表
Stu_nochar(8),
Cou_nochar(3),
Gradenumber(3),
PRIMARYKEY(Stu_no,Cou_no),
REFERENCESStudent(Stu_no),
REFERENCESCourse(Cou_no),
CHECK((gradeisnull)or
(gradebetween0and100)));
2.3.2修改表结构
•语法
ALTERTABLE[user.]table
[ADD({colum_element|table_constraint}
[,{column_element|table_constraint}]...)]
[MODIFY(column_element[,column_element]...)]
[DROPCONSTRAINTconstraint]...
[PCTFREEinteger][PCTUSEDinteger]
[INITRANSinteger][MAXTRANSinteger]
[STORAGEstorage]
[BACKUP]
•常用格式:
AlterTable表名[Add|Modify|DropColumn]修改内容;
例:
①增加新列
AlterTableT_ghdwmladdswdmchar(15);
例:
②修改列
AlterTableT_ghdwmlmodifyswdmnumber(15);
例:
③删除列
AlterTableT_ghdwmlDropColumnswdm;
2.3.3插入语句
INSERT语句可以完成对表、视图进行数据插入。
语句格式1:
插入一行常数记录。
INSERTINTO[user.]table[@db_link]
[(column1[,column2]...)]
VALUES(express1[,express2]...);
语句格式2:
把一个表的数据插入到另一个表中。
Insertinto表名1(<列名表>)
Select<列名表>From表名2;
例:
插入1条记录于student表中
INSERTintoStudent
VALUES('20026101','李勇',20,'男','计算机');
2.3.4修改数据语句
使用UPDATE语句修改表中的数据
1.格式:
UPDATEtable
SETcolumn=value[,column=value]
[WHEREcondition];
2.使用UPDATE语句应注意以下事项:
.如果要更新数值列,则可以直接提供数值;如果要更新字符列或日期列,则数据必须用单引号。
.当更新数据时,数据必须要与列的数据类型匹配。
.当更新数据时,数据必须要满足约束规则,
例:
将student表中学号为20026101的学生年龄修改为18。
updatestudentsetstu_age=18
wherestu_no='20026101';
将所有选修课程号为a01的成绩加2分,所有选修课程号为a03的成绩加3分。
其余加1分。
updatescsetgrade=
casecou_no
when'a01'thengrade+2
when'a03'thengrade+3
elsegrade+1
end;
2.3.5删除数据
•使用DELETE语句可从表中删除现有的数据。
•用户确定要删除表的所有数据,使用TRUNCATETABLE语句速度更快。
•DELETE语句的操作可以回退,但TRUNCATETABLE语句的操作不能回退。
DELETEFROM表名[WHERE条件];
如果不用where子句,则会删除表中所有的行,
使用where子句只删除满足条件的行。
例:
删除选修课程号为a01学生的成绩记录
deletefromscwherecou_no='a01';
2.3.6索引
•索引的目的
索引主要目的是加快数据的读取速度和完整性检查。
一般
在数据库设计阶段的与数据库结构一道考虑。
应用系统的性能
直接与索引的合理直接有关。
2.索引分类
.按功能分类唯一索引
一般索引
主关键字索引
.按索引对象分类
单列索引(表单个字段的索引)
多列索引(表多个字段的索引)
函数索引(对字段进行函数运算的索引)
3.创建索引
语法:
CREATE[UNIQUE]INDEXindex_name
ONtable_name(column_name[,column_name]¡);
其中
.UNIQUE:
指定索引所基于的列组合值必须唯一;
缺省索引是非唯一索引。
.index_name:
表示创建的索引名字
.table_name:
指要创建索引的表
.Column_name:
索
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Orcle 第二