SQL语言具有的功能(sql语言具有的功能有数据)

4.1 SQL语言概述

不同数据库厂商的数据库管理系统提供的SQL语言略有差别,本书主要以Microsoft SQL Server 使用的SQL语言(称为Transact-SQL,简称T-SQL)为主介绍SQL语言的功能

4.1.1 SQL语言特点

SQL之所以能够被用户和业界所接受并成为国际标准,是因为它是一个综合的、功能强大且又比较简单易学的语言。SQL语言集数据定义、数据查询、数据操作和数据控制功能于一身,主要包括如下特点。

1. 一体化

2. 非过程化

3. 语言简洁

4. 提供多种方式使用

4.1.2 SQL语言功能概述

SQL按其功能可分为四大部分:数据定义、数据控制、数据查询和数据操作。如表4-1列出了实现这四部分功能的动词。

SQL语言具有的功能(sql语言具有的功能有数据)

数据定义功能用于定义、删除和修改数据库中的对象;数据查询功能用于实现查询数据的功能,查询数据是数据库中使用最多的操作;数据操作功能用于增加、删除和修改数据;数据控制功能用于控制用户对数据库的操作权限。

4.2 SQL Server 的主要数据类型

SQL Server 提供了多种数据类型,这些数据类型可分为数值类型、字符串类型、日期和时间类型、二进制类型等。下面介绍其中主要的数据类型。

4.2.1 数值类型

数值类型分为准确数值类型和近似数值类型两种。

4.2.2 字符串类型

字符串类型用于存储字符数据,字符可以是各种字母、数字符号、汉字以及各种符号。目前字符的编码方式有两种:一种是普通字符编码,另一种是统一字符编码(unicode)。普通字符编码是指不同国家或地区的编码长度不一样,例如,英文字母的编码是1个字节(8位),中文汉字的编码是2个字节(16位)。统一字符编码是指对所有语言中的字符均采用双字节(16位)编码。

在SQL Server中使用字符数据时,需要将字符数据用英文的单引号括起来,如'Me'。在计算机中,字符编码以数字的形式展示并最终将数字转化为二进制编码。

二进制编码主要用于存储图形、图像数据。二进制编码的字符串数据一般用十六进制表示,若使用十六进制格式,可在字符前加“0x”前缀。

4.2.3 日期和时间类型

如表4-7列出了SQL Server 支持的主要日期和时间类型包括date类型,time[(n)],datetime,smalldatetime类型。

4.3 创建与维护关系表

表是数据库中非常重要的对象,用于存储数据库数据。创建表就是定义表所包含的列的结构,其中,包括列的名称、数据类型、约束等。列的名称是人们为列所取的名字,一般为了便于记忆,最好取有意义的名字,如学号或Sno,而不要取无意义的名字,如a1;列的数据类型说明了列的可取值范围;列的约束更进一步限制了列的取值范围,这些约束包括:列取值是否允许为空、主键约束外键约束、列取值范围约束等。

4.3.1 创建关系表

定义关系表使用SQL语言数据定义功能中的CREATE TABLE语句实现,其一般格式为:

CREATE TABLE [<架构名>.]<表名>(

  { <列名> <数据类型> [ 列级完整性约束定义 [ … n ] ] }

[ 表级完整性约束定义 ] [ ,… n ]

)

注意:默认时SQL语言不区分大小写。

其中:

● <表名>是所要定义的基本表的名字,同样,这个名字最好能表达表的应用语义,如“学生”或“Student”。

● <列名>是表中所包含的属性列的名字,<数据类型>指明列的数据类型。

在创建表的同时可以定义与表有关的完整性约束条件,大部分完整性约束既可以在“列级完整性约束定义”处定义,也可以在“表级完整性约束定义”处定义。

可定义的完整性约束包括:

● NOT NULL:限制列取值非空。

● DEFAULT:指定列的默认值。

UNIQUE:定义列取值不能重复。

● CHECK:定义列的取值范围。

● PRIMARY KEY:定义主键约束。

FOREIGN KEY:定义外键约束。

上述约束中, NOT NULL和DEFAULT约束只能在“列级完整性约束定义”处定义,多列之间的CHECK约束只能在“表级完整性约束定义”处定义,其他约束均可在“列级完整性约束定义”或“表级完整性约束定义”处定义。

1. 主键约束

定义主键的语法格式为:

PRIMARY KEY [(<列名> [, … n])]

如果是在列级完整性约束处定义单列的主键,可省略方括号部分。

2. 外键约束

外键既可以定义在列级完整性约束处,也可以定义在表级完整性约束处。定义外键的语法格式为:

[FOREIGN KEY (列名[,… n])] REFERENCES <外表名>(<外表列名>[,… n])

如果是在列级完整性约束处定义单列的外键,可省略方括号部分。

3. 唯一值约束

UNIQUE约束用于限制列的取值不重复。这个约束通常用在事实上具有唯一性的属性列上,如每个人的身份证号、银行的银行卡号均不能有重复值。

在一个已有主键的表中使用UNIQUE约束定义非主键列取值不重复是很有用的,如学生(学号,姓名,身份证号),如果主键选“学号”,则“身份证号”列不是主键,但它的取值也不能重复,这种情况就需要使用UNIQUE约束限定。

定义唯一值约束的语法格式为:

UNIQUE [(<列名> [, … n] )]

如果在列级完整性约束处定义单列的唯一值约束,则可省略方括号中的内容。

4. 默认值约束

默认值约束用DEFAULT约束实现,它用于提供列的默认值,即当在表中插入数据时,如果没有为有DEFAULT约束的列提供值,则系统将自动使用DEFAULT约束定义的默认值。

一个默认值约束只能为一个列提供默认值,且默认值约束必须是列级完整性约束。

默认值约束的定义有两种形式,一种是在定义表时指定默认值约束,另一种是在修改表结构时添加默认值约束。

(1)在创建表时定义DEFAULT约束。

DEFAULT 常量表达式

(2)为已创建好的表添加DEFAULT约束。

DEFAULT 常量表达式 FOR 列名

5. 列取值范围约束

限制列取值范围用CHECK约束实现,例如,考试成绩的取值是0~100分,工资不能小于3000元(假设最低工资为3000元)等。需要注意的是,CHECK约束限制的列必须在同一个表中。

可以通过任何基于逻辑运算符返回TRUE或FALSE的逻辑(布尔)表达式创建CHECK约束。定义CHECK约束的语法格式为:

CHECK(逻辑表达式)

可以将CHECK约束应用于单个列,还可以通过在表级创建CHECK约束,限定多个列之间的相互取值约束,如“毕业日期”晚于“入学日期”。

例1.用SQL语句创建三张表:学生(Student)表、课程(Course)表和学生修课(SC)表,这三张表的结构和约束如表4-9~表4-11所示。

说明:为了简化,描述学生年龄信息时,选用了整型类型的年龄(整型类型)。在实际应用中一般选择出生日期(日期类型)来描述学生年龄,因为学生的年龄是变化的数据,而出生日期是不变的。这里选用整型类型的年龄,只是为了简化一些操作。

SQL语言具有的功能(sql语言具有的功能有数据)

SQL语言具有的功能(sql语言具有的功能有数据)

SQL语言具有的功能(sql语言具有的功能有数据)

创建满足约束条件的上述三张表的SQL语句如下:

CREATE TABLE Student (

 Sno CHAR(9) PRIMARY KEY,

 Sname NCHAR(5) NOT NULL,

 SID CHAR(18) UNIQUE,

 Ssex NCHAR(1) DEFAULT'男',

 Sage TINYINT CHECK(Sage>=15 AND Sage<=45),

 Sdept NVARCHAR(20) )

CREATE TABLE Course (

 Cno CHAR(6) PRIMARY KEY,

 Cname NVARCHAR(20) NOT NULL,

 Credit NUMERIC(3,1) CHECK(Credit>0),

 Semester TINYINT )

CREATE TABLE SC (

 Sno CHAR(9) NOT NULL,

 Cno CHAR(6) NOT NULL,

 Grade TINYINT CHECK(Grade BETWEEN 0 AND 100),

 PRIMARY KEY (Sno, Cno),

 FOREIGN KEY (Sno) REFERENCES Student(Sno),

 FOREIGN KEY (Cno) REFERENCES Course(Cno) )

4.3.2 修改表结构

在创建好表之后,如果表结构有变化,如增加新列、删除列或修改列数据类型及约束等,则可以使用ALTER TABLE语句对表结构进行修改。不同DBMS的ALTER TABLE语句的格式略有不同,我们这里给出T-SQL支持的ALTER TABLE语句的部分格式。对其他的数据库管理系统,可参考它们的语言参考手册。

ALTER TABLE [<架构名>.]<表名>

{

 ALTER COLUMN <列名> <新数据类型>          — 修改列定义

 | ADD {<列名> <数据类型> [完整性约束定义]} [,…n]   — 添加新列

 | ADD [CONSTRAINT <约束名>] 约束定义          — 添加约束

 | DROP COLUMN <列名> [,…n ]            — 删除列

 | DROP [CONSTRAINT]<约束名> [,…n ]        — 删除约束

}

例2.为SC表添加“修课类别”列,此列的定义为:Type NCHAR(1),允许空。

ALTER TABLE SC ADD Type NCHAR(1)

例3.将新添加的Type列的数据类型改为NCHAR(2)。

ALTER TABLE SC ALTER COLUMN Type NCHAR(2)

例4.为Type列添加限定取值范围为{必修,重修,选修}的约束。

ALTER TABLE SC

  ADD CHECK(Type IN ('必修', '重修', '选修') )

例5.删除SC表的“Type”列。

ALTER TABLE SC DROP COLUMN Type

例6.为T表添加主键约束,主键列为:C1。

ALTER TABLE T

  ADD CONSTRAINT PK_C1 PRIMARY KEY(C1)

例7.删除T表的主键约束。

ALTER TABLE T

  DROP CONSTRAINT PK_C1

4.3.3 删除表

当不再需要某个表时,可以将其删除。删除表的语句格式为:

DROP TABLE <表名> { [, <表名> ] … }

例8.删除test表。

DROP TABLE test

注意:如果被删除的表中有其他表对它的外键引用约束,则必须先删除外键所在的表,然后删除被引用键所在的表。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dasum.com/108980.html