SQL使用总结word.docx
- 文档编号:3485449
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:79
- 大小:1.46MB
SQL使用总结word.docx
《SQL使用总结word.docx》由会员分享,可在线阅读,更多相关《SQL使用总结word.docx(79页珍藏版)》请在冰豆网上搜索。
SQL使用总结word
第3章关系数据库语言SQL
SQL是StructuredQueryLanguage(结构化查询语言)的缩写。
查询是SQL语言的重要组成部分,但不是全部,SQL还包含数据定义、数据操纵和数据控制功能等部分。
SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。
3.1SQL概述
3.1.1SQL的发展历程
⏹1972,IBM开始研究SystemR系统,配置了数据库语言SQUARE(SpecifyingQueriesAsRelationalExpressions)。
SQUARE使用了大量的数学符号。
⏹1974,Boyce和Chamberlin将SQUARE修改为SEQUEL(StructuredEnglishQueryLanguage),简称为SQL(StructuredQueryLanguage)。
以英语单词和结构式语法代替数学符号查询。
⏹1986.10,美国国家标准局ANSI(AmericanNationalStandardInstitute)的数据库委员会X3H2批准SQL作为关系数据库语言的美国标准。
⏹1987.04,国际标准化组织ISO(InternationalStandardizationOrganization)采纳美国标准为国际标准,后称SQL86。
⏹SQL89提出了完整性特征,SQL92标准逐步完善(基本、标准和完全级),SQL99增加了面向对象等,最新的标准是2003年发布的SQL2003,几千页。
⏹SQL标准只是一个建议标准,主流产品一般也只达到了基本级的要求。
⏹主流的数据库厂商在其产品中全部支持SQL。
例如,Oracle、Sybase、DB2、MSQLServer、VisualFoxPro、Access、MySQL等。
3.1.2SQL的特点和功能
⏹SQL(StructuredQueryLanguage)是一种介于关系代数与关系演算之间的结构化查询语言。
⏹特点
●非过程化语言
●面向集合的操作方式
●一种语法结构提供两种使用方式,即可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用
●语言一体化
●SQL语言简捷,易学易用
⏹功能
●定义:
DDL(DataDefinitionLanguage)语言
●查询:
DQL(DataQueryLanguage)
●操纵:
DML(DataManipulationLanguage)语言
●控制:
DCL(DataControlLanguage)语言
3.1.3SQL关系数据库的三级逻辑结构
⏹一个SQL支持的关系数据库的总体逻辑结构是基本表(Table)的集合,对应于ANSI/SPARC的概念模式。
⏹SQL数据库的底层存储结构采用文件,对应内模式。
⏹用户所见的数据库由权限规定该用户能访问的视图和基本表组成,对应外模式。
用户可以通过SQL对基本表和视图进行操作。
3.1.3SQL关系数据库的三级逻辑结构
⏹基本表
●本身独立存在的表
●SQL中一个关系就对应一个基本表
●一个(或多个)基本表对应一个存储文件
●一个表可以带若干索引
⏹存储文件
●逻辑结构组成了关系数据库的内模式
●物理结构是任意的,对用户透明
⏹视图
●从一个或几个基本表导出的表
●数据库中只存放视图的定义而不存放视图对应的数据
●视图是一个虚表
●用户可以在视图上再定义视图
3.1.4SQL的组成
3.1.5SQL语句的运行
⏹DBMS提供的运行窗口(DBA使用)
●SQLServer查询分析器的窗口中执行
●VisualFoxPro的命令窗口中执行
●Access的【查询】对象->查询窗口->【视图】功能菜单-SQL视图窗口中执行
●Oracle的SQL*Plus或者Worksheet提供的窗口中执行
⏹嵌入到程序开发语言编写的程序中执行
●例如,在ASP程序中嵌入SQL语句访问SQLServer数据库。
<%
DimConnObj,strSql
SetConnObj=Server.CreateObject("ADODB.Connection")
ConnObj.Open"Driver={SQLServer};Server=Business-Server;Database=business;Uid=sa;Pwd=12345;“
…
strSql="SELECT*FROMCUSTOMER"
ConnObj.Execute(strSql)
…
%>
3.2SQL的数据定义
3.2.1定义数据库
1.定义数据库
CREATEDATABASEdatabase_name
ON
[,FILEGROUPfilegroup_name
[LOGON
⏹
包括:
●[PRIMARY]
●(NAME=logical_file_name,
●FILENAME='os_file_name'
●[,SIZE=size]
●[,MAXSIZE={max_size|UNLIMITED}]
●[,FILEGROWTH=growth_increment])
⏹定义数据库实例——建立学生数据库
CREATEDATABASE学生数据库
ONPRIMARY
(NAME=sdb_Data,
FILENAME='d:
\mssql2000\data\sdb_data.mdf',
SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=2MB)
LOGON
(NAME=sdb_Log,
FILENAME='d:
\mssql2000\data\sdb_log.ldf',
SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=1MB)
2.修改数据库
语法格式:
ALTERDATABASE
(ADDFILE
|ADDLOGFILE
|REMOVEFILE
|ADDFILEGROUP
|REMOVEFILEGROUP
|MODIFYFILE
|MODIFYFILEGROUPfilegroup_name
{filegroup_property|NAME=new_filegroup_name}
|MODIFYNAME
3.删除数据库
语法格式:
DROPDATABASE<数据库名>
3.2.1定义模式(Schema)
⏹SQL中的模式(Schema)
●组织数据库对象的一种逻辑结构
●把一个数据库中的所有对象按用途划分为若干集合
●默认模式是DBO
⏹为什么要定义模式?
1.定义模式
CREATESCHEMAschema_name
[AUTHORIZATIONowner_name]
⏹模式通常由DBA创建
⏹也可以由得到CREATESCHEMA授权的用户创建
⏹使用短语AUTHORIZATIONowner_name可以指定模式的管理者(默认是创建者)
2.删除模式
DROPSCHEMAschema_name
⏹只有在模式为空、即模式中不包含任何对象时才可以删除模式。
3.2.3定义基本表
1.定义基本表
⏹语法格式
CREATETABLE[模式名.]<基本表名>
(列名1列数据类型1[列完整性约束1],
列名2列数据类型2[列完整性约束2],
……
[表完整性约束][,…n]])
CREATETABLE[schema_name].table_name
({
[
其中:
computed_column_definition为计算列,?
?
创建基本表:
S
CreateTableS(
SnoChar(3)PrimaryKey,
SnVarchar(8)NOTNULL,
AgeIntCHECK(age>=12ANDage<=40),
SexChar
(2)DEFAULT'男'CHECK(Sex='男'ORsex='女‘),
DnoChar
(1))
⑴定义列(
⏹列名(column_name)和数据类型(
⏹其他项目是各种约束
⑵是否允许空值约束
⑶关于约束名称
⏹列级约束名,名称可以省略
⏹用于命名主关键字、唯一性或参照完整性约束
⏹省略名称不便于管理相应的完整性约束
⑷主关键字和唯一性约束
⏹PRIMARYKEY:
主关键字约束,说明该列是主关键字
⏹UNIQUE:
惟一性约束,说明该列取值必须惟一
⏹PRIMARYKEY和UNIQUE约束的区别?
⏹定义主键,实施实体完整性约束。
不允许主键有空值,记录不可以重复。
⏹[CONSTRAINT约束名]PrimaryKey
CreateTableS(
SnoChar
(2)ConstraintPK_SPrimaryKey,
……
);
⏹唯一性约束:
值不可重复,但可以为空
⏹[CONSTRAINT约束名]UNIQUE
CreateTableDept(
DnoChar
(2)ConstraintPK_DPrimaryKey,
Dept_nameVarchar(20)ConstraintUQ_DUnique)
⑸参照完整性约束
⏹说明外部关键字,FOREIGNKEY可以省略
⏹什么是外部关键字?
外部关键字的作用?
⏹[schema_name.]referenced_table_name[(ref_column)]指出参照的表和列,默认模式时schema_name可以省略,列名相同时(ref_column)可以省略
⏹ONDELETE和ONUPDATE说明在执行删除和更新操作时如何处理参照完整性;NOACTION禁止更新和删除被参照记录;CASCADE级联;SETNULL将外键设为空值;SETDEFAULT将外键设为默认值
⏹删除操作检查的完整性?
⏹更新操作检查的完整性?
⏹参照完整性规则:
外键约束。
表中某列值引用其它表的主键列。
⏹[CONSTRAINT约束名]REFERENTCES<引用表名>(引用字段名[,…])
⑹CHECK约束
⏹用来说明列的取值范围
⏹本约束用逻辑表达式(logical_expression)进行说明
⏹如果列值使表达式为真则是合法值,否则就是非法值
⑺字段默认值
⏹用常量表达式(constant_expression)来说明列的默认取值
⑻定义计算列
⏹其中
●column_name给出计算列的列名,
●computed_column_expression是对应的计算表达式,
●其他选项和定义实列时类似。
定义工资表
CREATETABLEgz(
编号Char
(2)PRIMARYKEY,
姓名Varchar(20),
基本工资Int,
职务补贴Int,
奖金Int,
公积金Int,
税费Int,
实发工资AS基本工资+职务补贴+奖金-公积金-税费)
CREATETABLEgz(
编号Char
(2)PRIMARYKEY,
姓名Varchar(20),
基本工资Int,
职务补贴Int,
奖金Int,
公积金Int,
税费Int,
实发工资AS基本工资+ISNULL(职务补贴,0)+ISNULL(奖金,0)-ISNULL(公积金,0)-ISNULL(税费,0))
⑼定义表级完整性约束
⏹如果某个完整性约束与多个列相关,则这样的完整性约束不能定义在单个列上,这时候就需要表级完整性约束。
⏹单个列上的完整性约束也可以用表级完整性约束的形式来定义
完整性约束定义总结
⏹实体完整性
●主键约束(PrimaryKey)
●唯一键约束(Unique)
⏹参照完整性
●外键约束(ForeignKey)
⏹用户自定义完整性
●检查约束(Check)
●默认约束(DEFAULT)
●空值(NULL|NOTNULL)
定义方法:
•在列上定义完整性约束
•在所有列定义后定义完整性约束。
•定义完整性约束的格式
•[Constraint<约束名>]<约束类型>
•说明
•完整性约束既可以定义在列上,也可以定义在基本表之上。
•列约束:
在每个列的后面定义的列约束,可以有多个约束子句,只对当前列有效。
•表约束:
在全部列定义完成后定义。
可以有多个约束子句分别定义多个列上的约束。
•注意
•在每个列的后面定义的列约束定义时,不能定义多个列上的约束,多个列上的约束必须使用表约束;
•单列上的约束可以用列约束,也可用表约束。
表定义举例
⏹例1:
定义院系表Dept,其中编号DNO为主关键字,名称应该惟一、并且不允许为空值。
CREATETABLEDept
(Dnochar
(2)PRIMARYKEY,
DeptVarchar(30)UNIQUENOTNULL,
Deanchar(10),
AddressVarchar(40))
例2,定义学生表S,结构如下:
CREATETABLES
(Snochar(4)PRIMARYKEY,
Snvarchar(10),
Sexchar
(2)CHECK(Sex='男'ORSex='女'),
AgeIntCHECK(Age>=12ANDAge<=60),
Dnochar
(2)FOREIGNKEYReferencesDept(Dno),
Statechar(4)CHECK(StateIN('正常','留级','休学','退学')),
BPvarchar(20))
例3,定义教师表T,结构如下:
⏹例4,定义课程表C,结构如下:
CREATETABLEC
(CnoChar
(2)PRIMARYKEY,
CnChar
(2),
PERIODIntNOTNULL,
TnoChar(4)ReferencesT(Tno),
ClassChar(8)CHECK(ClassIN('公共基础','专业基础','专业课','专业选修'))
)
例5,定义选课表SC,结构如下:
CREATETABLESC
(Snochar(4)ReferencesS(Sno),
Cnochar
(2)ReferencesC(Cno),
GradeIntCHECK(GradeBETWEEN0AND100)DEFAULTNULL,
PRIMARYKEY(Sno,Cno))
2.修改表结构
ALTERTABLE[schema_name.]table_name
{ALTERCOLUMNcolumn_name
|ADD
|DROP[CONSTRAINT]constraint_name|COLUMNcolumn_name}
ALTERCOLUMN修改已有列的定义,但是只能修改为兼容数据类型或重新定义是否允许空值;
ADD添加新列、或新的计算列或表级完整性约束;
DROP删除指定的完整性约束或指定的列。
AlterTable<表名>
[Add<列定义>]*添加字段
|[AlterColumn<列定义>]*修改字段定义
|[DropColumn<列名>]*删除字段
|[Add<表约束>]*添加约束
|[DropConstraint<约束名>]*删除约束
⑴增加列
⏹语法格式:
AlterTable<表名>
Add<新列名><数据类型>[<完整性约束>]
AlterTableS
AddClassVarchar(10)
AlterTableS
AddPHONVarchar(10)ConstraintUQ_S3UNIQUE
⑵删除列
⏹语法格式:
AlterTable<表名>
DropColumn<列名>
AlterTableS
DropColumnPHON
注意:
删除一个列之前,必须先删除基于该列的所有约束和索引。
⑶修改列
⏹语法格式:
AlterTable<表名>
AlterColumn<列名><数据类型>
●列名不能修改
AlterTableS
AlterColumnageIntNOTNULL
⑷增加约束
⏹语法格式:
AlterTable<表名>
Add<表约束>
●只能增加表约束
●表约束格式与创建表时相同
AlterTableS
AddConstraintPK_SPrimaryKey(Sno)
⑸删除约束
⏹语法格式:
AlterTable<表名>
DropConstraint<约束名>
CreateTableSC(--选课表
SnoChar
(2),
CnoVarchar(8),
Gradeint,
ConstraintFK_SCForeignKey(Sno)ReferencesS(Sno)
OnDeleteCascade,
ConstraintPK_SCPrimaryKey(Sno,Cno)
);
AlterTableSCDropConstraintFK_SC
修改表结构举例
例6:
规定学生表的性别字段不允许为空值。
ALTERTABLE学生ALTERCOLUMN性别char
(2)NOTNULL
⏹是否会影响原先定义在该列上的其他约束?
例7:
删除课程表中的责任教师列。
⏹如果捆绑了其他对象(如列约束),则需要先删除捆绑的对象。
例8:
为课程表增加责任教师列,列描述如下:
⏹字符类型,长度为6;
⏹允许空值;
⏹外部关键字,参照教师表的教师编号列,当删除被参照记录时该列置为空值,当修改被参照记录的主关键字时级联修改参照记录的外部关键字值。
3.删除表
DROPTABLE[schema_name.]table_name[,...n]
一次可以删除多个表。
不能使用DROPTABLE删除被FOREIGNKEY约束参照的表。
如果要在同一个DROPTABLE语句中删除参照表以及被参照表,则必须先列出参照表。
DropTableS
4.数据索引
⏹建立索引
●加快查询速度和保证行的唯一性是建立索引的两个主要目的。
●聚集索引和非聚集索引
●唯一索引和复合索引
⏹删除索引
⏹建立索引
●建立索引CREATEINDEX语句格式
CREATE[UNIQUE][CLUSTERED]
INDEX<索引名>ON<表名>(<字段名>[,…]
●其中:
UNIQUE子句建立惟一索引;CLUSTERED子句建立聚集索引。
●例:
在SC表中分别为学号SNO和课程号CNO建立非聚集索引。
CREATEINDEXSC_snoONSC(sno)
CREATEINDEXSC_cnoONSC(cno)
⏹删除索引
●语法格式:
DROPINDEX表名.索引名[,…]
●实例,在SC表中删除索引SC_cno
CREATEINDEXSC_cnoONSC(cno)
思考题
⏹在SQL中CREATESCHEMA是一条什么命令?
创建的SCHEMA是一种什么对象?
它有什么作用?
⏹在表中定义约束时,PRIMARYKEY和UNIQUE有什么区别?
⏹在CREATETABLE命令中哪些内容与定义参照完整性有关?
讨论它们的具体作用。
⏹约束一般定义在列上,为什么还需要表级约束?
⏹定义计算列时选用关键词PERSISTED有什么作用?
⏹计算列是否可以作为参照列(外部关键字)?
⏹如果在定义约束时没有使用CONSTRAINT短语给出约束名,而事后又要删除该约束应该怎么办?
⏹对已有的表可以进行哪些方面的表结构修改?
3.3数据操作功能及数据完整性的作用
⏹插入操作INSERT及其完整性约束
⏹删除操作DELETE及其完整性约束
⏹更新操作UPDATE及其完整性约束
3.3.1插入操作及其完整性约束
⏹SQL的插入语句是INSERT,常用格式:
INSERTINTO[schema_name.]table_name[(column_list)]
VALUES({expression|DEFAULT|NULL}[,...n])
⏹其中
●schema_name指出模式名
●table_name指出表名
●column_list给出插入操作所涉及列的列表(默认是表的全部列)
●{expression|DEFAULT|NULL}[,...n]给出对应于column_list的各个列的值
3.3.1插入操作及其完整性约束
⏹插入一条新记录的格式
INSERTINTO<表名>(列名1,列名2,……,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 使用 总结 word