数据类型和索引和表.ppt

上传人:za****8 文档编号:16590805 上传时间:2020-10-16 格式:PPT 页数:84 大小:667KB
返回 下载 相关 举报
数据类型和索引和表.ppt_第1页
第1页 / 共84页
数据类型和索引和表.ppt_第2页
第2页 / 共84页
数据类型和索引和表.ppt_第3页
第3页 / 共84页
点击查看更多>>
资源描述
组长:韩立娜 汇报人:于思会 组员:韩立娜 于思会 刘述玲 程雁春 桓国艳 赵晴晴 Oracle数据库中常用的基本数据类 型 数据类型 说明 C h a r ( n ) 用于存储长度为 n 的定长字符串 V a r c h a r 2 ( n ) 用于存储长度为 n 的变长字符串 N u m b e r ( p , s ) 用于存储带符号的整型数或浮点型数, p 指有 效数字位数, s 指小数位数 i n t 用于存储长整型数,也可将其写为 i n t e g e r s m a l l i n t 用于存储短型整数 F l o a t ( n ) 用于存储精度至少为 n 位的浮点型数 d a t e 用于存储日期,包含年、月、日,其格式为 yyyy - mm - dd t i m e 用于存储时间,包含时、分、秒,其格式为 h h : m m : s s Sqlserver数据库中常用的数据类型 数据类型指定列、存储过程参数及局部变 量的数据特性 数据按照数据类型存储在列中 系统数据类型:系统数据类型是 SQL Server 支持的内置数据类型 用户定义的数据类型:用户根据系统数据类型 自己定义的数据类型 系统数据类型 (1) 字符型 描述 所需空间 char 固定长度的字符数据 , 最大长度为 8,000 个字符 。 0 到 8000 字节 varchar 可变长度的数据 , 最大长度为 8000 个字符 输入数据的实 际长度 text 可变长度的数据 , 最大长度为 231-1 个字符 16 字节的指针, 每个初始化列至少 外加 2000 字节 系统数据类型 (2) Unicode 类 型 描述 所需空间 nchar 固定长度的 Unicode 数据 , 最大长度 为 4000 个字符 0 到 4000 字节 ,具体取决于 定义 nvarchar 可变长度的 Unicode 数据 , 最大长 度为 4000 个字符 存储大小是输 入数据的实际 长度 ntext 可变长度的 Unicode 数据 , 最大长度 为 230-1 个字符 16 字节的指针 ,每个初始化 列至少外加 2000 字节 系统数据类型 (3) 日期类型 描述 所需空间 smalldatetime 从 1900.1.1到 2079. 6. 6, 精确到 1 分钟 4 字节 datetime 从 1753. 1.1 到 9999. 12. 31, 精确到 三百分之一秒 , 即 3.33 毫秒 。 8 字节。 系统数据类型 (4) 数字类型 描述 所需空间 int 整型数据 , 从 231 到 231-1 4 字节 smallint 整型数据 , 从 -215 到 215-1 2 字节 tinyint 整型数据 , 从 0 到 255 1 字节 decimal 带定点精度和小数位数的十进制数 字类型 。 5-17 字节 (由 精度决定 ) numeric decimal的同义词 5-17 字节 (由精 度决定 ) bit 整型数据 , 值为 1 或 0 1 字节 系统数据类型 (5) 浮点类型 描述 所需空间 float 浮点精度数字数据 , 从 1.79E+308 到 1.79E+308 8 字节 real 浮点精度数字数据 , 从 3.40E+38 到 3.40E+38 4 字节。 系统数据类型 (6) 货币 类型 描述 所需空间 money 从 263 到 263-1, 精确到每个 货币单位的万分之一 8 字节 smallmoney 从 231 到 231-1 , 精确到每个 货币单位的万分之一 4 字节 系统数据类型 (7) 二进制类型 描述 所需空间 varbinary 可变长度的二进制数据 , 最大长度 为 8000 字节 输入数据的长 度再加 4 字节 binary 固定长度的二进制数据 , 最大 长度为 8,000 字节 0 到 8000 字节 ,具体取决于 定义 image 可变长度的二进制数据,最大长度 为 231-1 字节 16字节的指针 每个初始化列 至少外加 2000 字节 系统数据类型 (8) timestamp 整个数据库范围内的唯一数字 8 字节 特殊类型 描述 所需空间 uniqueidentifier 产生全局唯一的标识符 ( GUID) 16字节 用户定义的数据类型特性 使用系统数据类型定义 具有预定义长度 指定其中是否可存储 null 值 指定是否必须赋予默认值 指定是否要应用现有规则 管理用户定义的数据类型 (1) sp_addtype typename = type, phystype = system_data_type , nulltype = null_type 管理用户定义的数据类型 (2) 参数: typename = type 用户定义数据类型的名称 。 数据类型名称必须遵 循标识符规则 , 并且在每个数据库中必须是唯一 的 。 type 是 sysname, 无默认值 。 phystype = system_data_type 物理或 SQL Server 提供的数据类型 ( decimal、 int 等 ) , 用户定义的数据类型即基于该类型 。 system_data_type 是 sysname, 无默认值 。 nulltype = null_type 指定必须如何处理 null 值 。 null_type 是 varchar(8), 设置值为 NULL( 默认 ) 、 NOT NULL 或 NONULL Access数据库常用数据类型 Access 2000中字段可用的数据类型有以下几种: 文本 (Text): 文本、文本与数字、不必计算的数字,最 长 255个字符。 备注 (Memo): 较长的文本,最长 64,000字符。 数字 (Number)型: 用于算术运算的数字。可在 “ 字段 大小 ” 中分字节、整型、单精度等子类型 日期及时间 (Date/Time): 从 100到 9999的日期及时间值。 可进行日期及时间的计算。 8字节 货币 (Currency): 货币值。使用货币类型可避免计算 时四舍五入。 8字节 自动编号 (AutoNumber): 添加记录时的自动序号 递增: 添一条记录,字段值增 1; 随机: 添一条记录,字段值为另一随机数。 2. 字段的数据类型 是 /否 (Yes/No): 取两种值之一,如 Yes/No、 True/False、 On/Off。大小为 1位。 OLE对象 (Object): 可链接或嵌入其他使用 OLE 协议的 程序所创建的对象,如 Word文档、图象、声音等。最 多 1G。对象可链接或嵌入到 Access表中。但只能在窗 体或报表中使用绑定对象框来显示。 超链接 (Hyperlink): 超文本,用作超链接地址。超链 接最多包含三部分: 显示文本: 在字段或控件中显示的文本; 地址: 到文件( UNC)或页面( URL)的路径; 子地址: 在文件或页面中的地址。 查阅向导 (Lookup Wizard): 由查阅向导创建。字段的 值来自另一个表或数据列表中,可在列表框或组合框 中选择一个数据作为其值。 备注型、超链接型和 OLE对象型字段不能索引。 若在表中输入数据后更改字段的数据类型,则 在保存表时,由于进行大量数据转换,时间较长; 若新的 “ 数据类型 ” 属性的设置与段原数据类型冲突, 可能会丢失某些数据。 Number、 Date/Time、 Currency和 Yes/No类型具有预 定义格式。可设置格式,但 OLE对象型除外 5. 选择数据类型时应注意的问题 MySQL数据类型 数据类型种类 数值列类型 字符串列类型 日期和时间列类型 数据类型种类 数值型 分为整型和浮点型 整型: 可以由十进制和十六进制表示 整数由数字序列组成,如: 1, 100。 由十六进制表示方法: 0 x且后面加 1 9和 A F 的任意数字或字母, 并且 0 x中的 X不 能大写。 浮点型 : 浮点数由一个数字加一个小数点再加上一 个数字组成。两个数字序列不能同时为空。 字符串 : 由单引号或者双引号括起来的字符或者数字。 如: ” abc”,abc10 字符串中要用转义字符才能表示的特殊符号 日期和时间值 是存储如 “ 2005 -1-1” 或者 “ 12:00:00”这样 的数值的值。在 MySQL中日期是按 ” 年 -月 -日 ” 的顺序。 NULL值 是一种无类型的值,表示 “ 空,什么也没 有 ” 。 数值列类型 MySQL为除了 NULL值外的所有通用数据类型 提供了列类型。列类型是一种手段,通过这种手 段可以描述表的列可以包含什么样类型的值。 数值列类型 所有数值列类型的类型名及其说明和所占的 字节数见下表: 数值列类型包括整型和浮点型 说明: TINYINT, SAMLLINT, MEDIUMINT, INT, BIGINT每个数据类型的取值范围不同,故分别可以 表示不同的数值范围。在定义整型列时,可以指定可 选的显示尺寸 M(见上表 ),M是从 1到 255的值,它表示 显示列中值的字符数。 字符串列类型 所有字符串列类型及其说明和所占的字节数见 下表: 说明: 对于可变长的字符串类型,其长度取决于实际存放 在列中的值的长度。此 长度在上表中用 L来表示 。 附加若干额外字节,用来记录字符串长度,也就是 说总长度等于 L n( n 1、 2、 3、 4、 8) CHAR和 VARCHAR类型 CHAR类型和 VARCHAR类型长度范围都是 0255之间 的大小。他们之间的差别在于 MySQL处理存储的方式: CHAR把这个大小视为值的 准确大小 (用空格填补比较短的 值)。 VARCHAR类型把它视为最大值并且只使用了存储字符串实 际上 需要的字节数 (增加了一个额外的字节记录长度)。因 而,较短的值当被插入一个语句为 VARCHAR类型的字段时, 将不会用空格填补(然而,较长的值仍然被截短 )。 BLOB和 TEXT类型 BLOB是 二进制大对象 , 如果想存储二进制数 BLOB将是最佳选择, 而 TEXT与之相同,只是 BOLOB按照二进制编码排序(区分大小写) , TEXT按照字符文本模式排序(不区分大小写) 。 ENUM 和 SET类型 是特殊的串类型,其列值必须从固定的串集中 选择,二者差别为前者必须是只能选择其中的 一个值,而后者可以多选。 ( 不推荐使用 ) 日期和时间列类型 所有时间和日期列类型的类型名及其说明和所 占的字节数见下表 : 说明: 每个时间和日期列类型都有一个零值, 当插入非法数 值时就用零值来添加 表示日期时必须先按:年,月,日的顺序给出 DATE ,TIME ,DATETIME分别是存储日期,时间与日期 和时间的组合,其格式为 “ YYYY-MM-DD”, “ hh:mm:ss”和 “ YYYY-MM-DD hh:mm:ss”,对于 DATETIME类型,日期和时间部分都需要 TIMESTAMP 时间戳列类型以 YYYYMMDDhhmmss的格式来表示 值,其取值范围是 19700101000000到 2037年的某个时 间,主要用于记录更改或创建某个记录 总结:常用数据类型 分类 备注和说明 数据类型 说明 二进制数据类型 存储非子符和文本的数据 BLOB 可用来存储图像 文本数据类型 字符数据包括任意字母、符 号或数字字符的组合 char 固定长度的非 Unicode 字符 数据 varchar 可变长度非 Unicode 数据 text 存储长文本信息 日期和时间 日期和时间在单引号内输入 time 时间 date 日期 datetime 日期和时间 数 值型 数据 该数据仅包含数字,包括正 数、负数以及 浮点数 int smallint 整数 float double 浮点数 货币数据类型 用于 财务数据 decimal 定点数 Bit数据类型 表示是 /否的数据 bit 存储布尔数据类型 3.3.3 索引的建立和删除 建立索引是加快查询速度的有效手段 建立索引 DBA或表的属主 ( 即建立表的人 ) 根据需要建立 有些 DBMS自动建立以下的索引 PRIMARY KEY UNIQUE 一、建立索引 语句格式 CREATE UNIQUE INDEX ON (, ); 用 指定要建索引的基本表名字 索引可以建立在该表的一 列 或多列上 , 各列名之间用逗号分 隔 用 指定索引值的排列次序 , 升序: ASC, 降序: DESC。 缺省值: ASC UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 例题 例 14 为学生 -课程数据库中的 Student, Course两 个表建立索引 。 其中 Student表按姓名升序建索引 , Course表按课程名称降序建唯一索引 。 CREATE INDEX stu_sname_index ON Student(S_name); CREATE UNIQUE INDEX course_cname_index ON Course(C_name desc); 删除索引 DROP INDEX ; 删除索引时,系统会从数据字典中删去有关该 索引的描述。 例 15 删除 Student表的 stu_sname_index索引。 DROP INDEX stu_sname_index; 注意:主键索引不能被删除;删除主键约束时,主键 索引会被自动删除。 3.4.1 单表查询 查询仅涉及一个表 , 是一种最简单的查询操作 一 、 选择表中的若干列 二 、 选择表中的若干元组 三 、 order by 子句 四 、 聚集函数 ( aggregate functions) 五、 group by 子句 一、选择表中的若干列 1.查询指定列 例 1 查询全体学生的学号与姓名 。 SELECT Sno, Sname FROM Student; 例 2 查询全体学生的姓名 、 学号 、 所在系 。 SELECT Sname, Sno, Sdept FROM Student; 例 3 查询全体学生的详细记录 。 SELECT Sno, Sname, Ssex, SBirthday, Sdept FROM Student; 或 SELECT * FROM Student; 2.查询全部列 SELECT子句的 为表达式 算术表达式 字符串常量 函数 列别名 等 3. 查询经过计算的值 3. 查询经过计算的值 例 4 查全体学生的姓名及其年龄 。 SELECT Sname, Ceil(SysDate-Sbirthday)/365) FROM Student; 输出结果: Sname Ceil(SysDate-Sbirthday)/365) - - 李勇 20 刘晨 21 王名 19 张立 19 3. 查询经过计算的值 例 5 查询全体学生的姓名 、 出生年份和所有系 , 要求用小写字母表示所有系名 。 SELECT Sname,age:,Ceil(SysDate- Sbirthday)/365) ,LOWER(Sdept) FROM Student; 例题(续) 输出结果: Sname age: Ceil(SysDate-Sbirthday)/365) LOWER(Sdept) - - - - 李勇 age: 20 cs 刘晨 age: 21 is 王名 age: 19 ma 张立 age: 19 is 例 6 使用列 别名 改变查询结果的列标题 SELECT Sname 姓名 ,Ceil(SysDate-Sbirthday)/365) 年 龄 ,LOWER(Sdept) 所在系 FROM Student; 输出结果: 姓名 年龄 所在系 - - - 李勇 20 cs 刘晨 21 is 王名 19 ma 张立 19 is 二、选择表中的若干元组 消除取值重复的行 查询满足条件的元组 1. 消除取值重复的行 在 SELECT子句中使用 DISTINCT短语 假设 SC表中有下列数据 Sno Cno Grade - - - 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80 ALL 与 DISTINCT 例 6 查询选修了课程的学生学号 。 (1) SELECT Sno FROM SC; 或 (默认 ALL) SELECT ALL Sno FROM SC; 结果: Sno - 95001 95001 95001 95002 95002 例题(续) (2) SELECT DISTINCT Sno FROM SC; 结果: Sno - 95001 95002 例题(续) 注意 DISTINCT短语的作用范围是所有目标列 例:查询选修课程的各种成绩 错误的写法 SELECT DISTINCT Cno, DISTINCT Grade FROM SC; 正确的写法 SELECT DISTINCT Cno, Grade FROM SC; 2.查询满足条件的元组 表 3. 3 常用的查询条件 查 询 条 件 谓 词 比 较 = , , = , = , != , , ! , ! ; N O T + 上述比较运算符 确定范围 B E T WE E N A N D , N O T B E T W E E N A N D 确定集合 IN , N O T I N 字符匹配 L I K E , N O T L I K E 空 值 I S N U L L , I S N O T N U L L 多重条件 AND , OR WHERE子句常用的查询条件 (1) 比较大小 在 WHERE子句的 中使用比较运算符 =, , =, =, != 或 , !, !, 逻辑运算符 NOT + 比较运算符 例 8 查询所有年龄在 20岁以下的学生姓名及其年龄。 SELECT Sname, Sage FROM Student WHERE Sage = 20; (2) 确定范围 使用谓词 BETWEEN AND NOT BETWEEN AND 例 10 查询年龄在 2023岁(包括 20岁和 23岁)之间的学生的姓名、 系别和年龄 。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 例题(续) 例 11 查询年龄不在 2023岁之间的学生姓名 、 系别和年龄 。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; (3) 确定集合 使用谓词 IN , NOT IN : 用逗号分隔的一组取值 例 12查询信息系( IS)、数学系( MA)和计 算机科学系( CS)学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ( IS, MA, CS ); (3) 确定集合 例 13查询既不是信息系 、 数学系 , 也不是计 算 机科学系的学生的姓名和性别 。 SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN ( IS, MA, CS ); (4) 字符串匹配 NOT LIKE ESCAPE :指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时 , 可以用 = 运算符取代 LIKE 谓词 用 != 或 运算符取代 NOT LIKE 谓词 通配符 % (百分号 ) 代表任意长度(长度可以为 0)的字符串 例: a%b表示以 a开头,以 b结尾的任意长度的字符 串。如 acb, addgb, ab 等都满足该匹配串 _ (下横线 ) 代表任意单个字符 例: a_b表示以 a开头,以 b结尾的长度为 3的任意字 符串。如 acb, afb等都满足该匹配串 ESCAPE 短语: 当用户要查询的字符串本身就含有 % 或 _ 时,要使用 ESCAPE 短语对通配符进行转义。 例题 1) 匹配模板为固定字符串 例 14 查询学号为 95001的学生的详细情况 。 SELECT * FROM Student WHERE Sno LIKE 95001; 等价于: SELECT * FROM Student WHERE Sno = 95001; 例题(续) 2) 匹配模板为含通配符的字符串 例 15 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE 刘 %; 例题(续) 匹配模板为含通配符的字符串(续) 例 16 查询姓 欧阳 且全名为三个汉字的学生的姓 名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳 _; 例题(续) 匹配模板为含通配符的字符串(续) 例 17 查询名字中第 2个字为 阳 字的学生的姓名 和学号。 SELECT Sname, Sno FROM Student WHERE Sname LIKE _阳 %; 例题(续) 匹配模板为含通配符的字符串(续) 例 18 查询所有不姓刘的学生姓名。 SELECT Sname FROM Student WHERE Sname NOT LIKE 刘 %; 例题(续) 使用换码字符将通配符转义为普通字符 (续 ) 例 20 查询以 DB_开头,且倒数第 3个字符为 i的 课程的详细情况。 SELECT * FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE ; (5) 涉及空值的查询 使用谓词 IS NULL 或 IS NOT NULL “IS NULL” 不能用 “ = NULL” 代替 例 21 某些学生选修课程后没有参加考试,所以有选课记录,但没有考 试成绩。查询缺少成绩的学生的学号和相应的课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NULL; 例题 (续 ) 例 22 查所有有成绩的学生学号和课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL; (6) 多重条件查询 用逻辑运算符 AND和 OR来联结多个查询条件 AND的优先级高于 OR 可以用括号改变优先级 可用来实现多种其他谓词 NOT IN NOT BETWEEN AND 例题 例 23 查询计算机系年龄在 20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= CS AND Sage=20 AND Sage=23; 三、 order by 子句 使用 ORDER BY子句 可以按 一个或多个属性 列排序 升序: ASC;降序: DESC;缺省值为升序 当排序列含空值时 ASC:排序列为空值的元组最后显示 DESC:排序列为空值的元组最先显示 Order by子句(续) 例 24 查询选修了 3号课程的学生的学号及 其成绩 , 查询结果按分数降序排列 。 SELECT Sno, Grade FROM SC WHERE Cno= 3 ORDER BY Grade DESC; 查询结果 Sno Grade - - 95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55 Order by 子句(续) 例 25 查询全体学生情况 , 查询结果按所在 系的系号升序排列 , 同一系中的学生按年 龄降序排列 。 SELECT * FROM Student ORDER BY Sdept, Sage DESC; 四、聚集函数 5类主要集函数 计数 COUNT( DISTINCT|ALL *) COUNT( DISTINCT|ALL ) 计算总和 SUM( DISTINCT|ALL ) 计算平均值 AVG( DISTINCT|ALL ) 聚集函数 (续) 求最大值 MAX( DISTINCT|ALL ) 求最小值 MIN( DISTINCT|ALL ) DISTINCT短语:在计算时要取消指定列中的重 复值 ALL短语:不取消重复值 ALL为缺省值 聚集函数 (续) 例 26 查询学生总人数 。 SELECT COUNT(*) FROM Student; 例 27 查询选修了课程的学生人数 。 SELECT COUNT(DISTINCT Sno) FROM SC; 注:用 DISTINCT以避免重复计算学生人数 聚集函数 (续) 例 28 计算 1号课程的学生平均成绩 。 SELECT AVG(Grade) FROM SC WHERE Cno= 1 ; 例 29 查询选修 1号课程的学生最高分数 。 SELECT MAX(Grade) FROM SC WHER Cno= 1 ; 五、 group by 子句 使用 GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组 , 集函数将作用于整个查询 结果 对查询结果分组后,集函数将分别作用于每个 组 使用 GROUP BY子句分组 例 30 求各个课程号及相应的选课人数 。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno; 结果 Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48 group by (续) GROUP BY子句的作用对象是查询的中间结果表 分组方法:按指定的一列或多列值分组 , 值相等 的为一组 使用 GROUP BY子句后 , SELECT子句的列名列表 中 只能出现分组属性和集函数 使用 HAVING短语筛选最终输出结果 例 31 查询选修了 3门以上课程的学生学号 。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3; 例题 例 32 查询有 3门以上课程是 90分以上的 学生的学号及 ( 90分以上的 ) 课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3; 使用 HAVING短语筛选最终输出结果 只有满足 HAVING短语指定条件的组才输出 HAVING短语与 WHERE子句的区别:作用对象 不同 WHERE子句作用于基表或视图 , 从中选择 满足条件的元组 。 HAVING短语作用于组 , 从中选择满足条件 的组 。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!