SQL第3章表与表数据操作
3.1 表结构和数据类型 3.2 界面方式操作表 3.3 命令方式操作表 3.4 界面方式操作表数据 3.5 命令方式操作表数据 3.1.1 表和表结构 每个数据库包含了若干个表。表是SQL Server中最主要的数据库对象,它是用来 存储数据的一种逻辑结构。表由行和列组成,因此也称为二维表。表是在日常工作 和生活中经常使用的一种表示数据及其关系的形式,表3.1就是用来表示学生情况的 一个学生表。 表3.1 学生表 学 号 姓 名 性 别 出 生 时 间 专 业 总 学 分 备 注 081101 王林 男 1990-02-10 计算机 50 081103 王燕 女 1989-10-06 计算机 50 081108 林一帆 男 1989-08-05 计算机 52 已提前修完一门课 081202 王林 男 1989-01-29 通信工程 40 有一门课不及格,待补考 081204 马琳琳 女 1989-02-10 通信工程 42 下面简单介绍与表有关的几个概念: (1)表结构。组成表的各列的名称及数据类型,统称为表结构。 (2)记录。每个表包含了若干行数据,它们是表的“值?#20445;?#34920;中的一 行称为一个记录。因此,表是记录的有限集合。 (3)字段。每个记录由若干个数据项构成,将构成记录的每个数据项 称为字段。例如,表3.1中表结构为(学号,姓名,性别,出生时间,专业, 总学分,备注),包含7个字段,由5个记录组成。 (4)空值。空值(NULL)通常表示未知、不可用或将在以后添加的数 据。若一个列?#24066;?#20026;空值,则向表中输入记录值时可不为该列给出具体值; 而一个列若不?#24066;?#20026;空值,则在输入时必须给出具体值。 (5)关键字。若表中记录的某一字段或字段组合能唯一标识记?#36857;?则称该字段或字段组合为候选关键字(Candidate key)。若一个表有多个 候选关键字,则选定其中一个为主关键字(Primary key),也称为主键。 当一个表仅?#24418;?#19968;的一个候选关键?#36136;保?#35813;候选关键字就是主关键字。这 里的主关键字与第1章中的主码所起的作用是相同的,都用来唯一标识记 录行。 例如,在学生表中,2个及其以上记录的姓名、性别、出生时间、专 业、总学分和备注这6个字段的值有可能相同,但是“学号”字段的值对 表中所有记录来说一定不同,即通过“学号”字段可以将表中的不同记录 区分开来。所以,“学号”字段是唯一的候选关键字,学号就是主关键字。 再例如,学生成绩表记录的候选关键字是(学号,课程号)字段组合,它 也是唯一的候选关键字。 列的数据类型可以是SQL Server提供的系统数据类型,也可以是用户定义的数 据类型。SQL Server 2008提供了丰富的系统数据类型,现将其列于表3.2中。 表3.2 系统数据类型表 数 据 类 型 符 号 标 识 整数型 bigint, int, smallint, tinyint 精确数值型 decimal, numeric 浮点型 float, real 货币型 money, smallmoney 位型 bit 字符型 char, varchar、varchar(MAX) Unicode字符型 nchar, nvarchar、nvarchar(MAX) 文本型 text, ntext 二进制型 binary, varbinary、varbinary(MAX) 日期时间类型 datetime, smalldatetime, date, time, datetime2, datetimeoffset 时间戳型 timestamp 图像型 image 其他 cursor, sql_variant, table, uniqueidentifier, xml, hierarchyid 在讨论数据类型?#20445;?#20351;用了精度、小数位数和长度3个概念,前两个概念是 针对数值型数据的,它们的含义如下。 l 精度:指数值数据中所存储的十进制数据的总位数。 l 小数位数:指数值数据中小数点右边可以有的数字位数的最大值。例如,数 值数据3890.587的精度是7,小数位数是3。 l 长度:指存储数据所使用的字节数。 下面分别说明常用的系统数据类型。 b 1.整数型 整数型包括bigint、int、smallint和tinyint,从标识符的含义就可以看出, 它们的表示数范围逐渐缩小。 bigint:大整数,数范围为?263~263?1,其精度为19,小数位数为0, 长度为8字节。 int:整数,数范围为?231~231?1,其精度为10,小数位数为0,长度为 4字节。 smallint:短整数,数范围为?215~215?1,其精度为5,小数位数为0, 长度为2字节。 tinyint:微短整数,数范围为0~255,长度为1字节,其精度为3,小数 位数为0,长度为1字节。 b 2.精确数值型 精确数值型数据由整数部分和小数部分构成,其所有的数字都是?#34892;?位,能够以完整的精度存储十进制数。精确数值型包括decimal 和 numeric 两类。在SQL Server 2008中,这两种数据类型在功能上完全等价。 声明精确数值型数据的格式是numeric | decimal(p[,s]),其中,p为精度, s为小数位数,s的默认值为0。例如,指定某列为精确数值型,精度为6, 小数位数为3,即decimal(6,3),那么?#27605;?#26576;记录的该列?#25345;?6.342 689?#20445;?该列?#23548;?#23384;储的是56.3427。 decimal和numeric可存储–1038 +1~1038 –1 的固定精度和小数位的数字 数据,它们的存储长度随精度变化而变化,最少为5字节,最多为17字节。 例如,若有声明numeric(8,3),则存储该类型数据需5字节;而若有声 明numeric(22,5),则存储该类型数据需13字节。 b 3.浮点型 浮点型也称近似数值型。顾名思义,这种类型不能提供精确表示数据 的精度,使用这种类型来存储某些数值?#20445;?#21487;能会损失一些精度,所以它 可用于处理取值范围非常大且对精确度要求不太高的数值量,如一些统计 量。 有两种近似数值数据类型:float[(n)]和real,两者通常都使?#27599;?#23398;计数 法表示数据,即形为尾数E阶数,如5.6432E20,–2.98E10,1.287659E-9等。 l real:使用4字节存储数据,表数范围为–3.40E + 38~3.40E + 38,数据 精度为7位?#34892;?#25968;字。 l float:float型数据的数范围为–1.79E+308~1.79E+308。定义中的n取值 范围是1~53,用于指示其精度和存储大小。当n在1~24之间?#20445;导?#19978;将 定义一个real型数据,存储长度为4字节,精度为7位?#34892;?#25968;字。当n在25~ 53之间?#20445;?#23384;储长度为8字节,精度为15位?#34892;?#25968;字。?#31508;?#30053;n?#20445;?#20195;表n在 25~53之间。 b 4.货币型 SQL Server 2008提供了两个专门用于处理货?#19994;?#25968;据类型:money和 smallmoney,它们用十进制数表示货币值。 l money:数据的数范围为?263~263?1,其精度为19,小数位数为4, 长度为8字节。money的数范围与bigint相同,不同的只是money型有4位 小数,?#23548;?#19978;,money就是按照整数进行运算的,只是将小数点固定在 末4位。 l smallmoney:数范围为–231~231?1,其精度为10,小数位数为4,长 度为4字节。可见smallmoney与int的关系就如同money与bigint的关系一样。 ?#27605;?#34920;中插入money或smallmoney类型的值?#20445;?#24517;须在数据前面?#30001;?货币表示符号($),并且数据中间不能有?#27721;牛?);若货币值为负数, 则需要在符号$的后面?#30001;細汉牛?)。例如,$15 000.32,$680,$-20 000.9088都是正确的货币数据表示形式。 b 5.位型 SQL Server 2008中的位(bit)型数据相当于其他语言中的逻辑型数据, 它只存储0和1,长度为1字节。但要注意,SQL Server对表中bit类型列的存 储进行了优化:如果一个表中有不多于8个的bit列,则这些列将作为1字节 存储;如果表中有9~16个bit列,则这些列将作为2字节存储,更多列的情 况以此类推。 当为bit类型数据赋0?#20445;?#20854;值为0,而赋非0(如100)?#20445;?#20854;值为1。 字符串值TRUE和FALSE可以转换为以下bit 值:TRUE转换为1,FALSE转换为0。 b 6.字符型 字符型数据用于存储字符串,字符串中可包括字?#28014;?#25968;字和其他特殊 符号(如#、@、&等)。在输入字符串?#20445;?#38656;将串中的符号用单引号或双 引号括起来,如 abc 、“Abc