数据类型和索引和表.ppt

上传人:小飞机 文档编号:4980283 上传时间:2023-05-27 格式:PPT 页数:84 大小:308KB
返回 下载 相关 举报
数据类型和索引和表.ppt_第1页
第1页 / 共84页
数据类型和索引和表.ppt_第2页
第2页 / 共84页
数据类型和索引和表.ppt_第3页
第3页 / 共84页
数据类型和索引和表.ppt_第4页
第4页 / 共84页
数据类型和索引和表.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《数据类型和索引和表.ppt》由会员分享,可在线阅读,更多相关《数据类型和索引和表.ppt(84页珍藏版)》请在三一办公上搜索。

1、,组长:韩立娜汇报人:于思会组员:韩立娜 于思会 刘述玲 程雁春 桓国艳 赵晴晴,Oracle数据库中常用的基本数据类型,Sqlserver数据库中常用的数据类型,数据类型指定列、存储过程参数及局部变量的数据特性数据按照数据类型存储在列中系统数据类型:系统数据类型是 SQL Server 支持的内置数据类型用户定义的数据类型:用户根据系统数据类型自己定义的数据类型,系统数据类型(1),系统数据类型(2),系统数据类型(3),系统数据类型(4),系统数据类型(5),系统数据类型(6),系统数据类型(7),系统数据类型(8),用户定义的数据类型特性,使用系统数据类型定义具有预定义长度指定其中是否可

2、存储 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_d

3、ata_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的日期及时间值。可进行

4、日期及时间的计算。8字节货币(Currency):货币值。使用货币类型可避免计算时四舍五入。8字节自动编号(AutoNumber):添加记录时的自动序号 递增:添一条记录,字段值增1;随机:添一条记录,字段值为另一随机数。,2.字段的数据类型,是/否(Yes/No):取两种值之一,如 Yes/No、True/False、On/Off。大小为1位。OLE对象(Object):可链接或嵌入其他使用OLE 协议的程序所创建的对象,如Word文档、图象、声音等。最多1G。对象可链接或嵌入到Access表中。但只能在窗体或报表中使用绑定对象框来显示。超链接(Hyperlink):超文本,用作超链接地址。

5、超链接最多包含三部分:显示文本:在字段或控件中显示的文本;地址:到文件(UNC)或页面(URL)的路径;子地址:在文件或页面中的地址。查阅向导(Lookup Wizard):由查阅向导创建。字段的值来自另一个表或数据列表中,可在列表框或组合框中选择一个数据作为其值。,备注型、超链接型和OLE对象型字段不能索引。若在表中输入数据后更改字段的数据类型,则 在保存表时,由于进行大量数据转换,时间较长;若新的“数据类型”属性的设置与段原数据类型冲突,可能会丢失某些数据。Number、Date/Time、Currency和Yes/No类型具有预定义格式。可设置格式,但OLE对象型除外,5.选择数据类型时

6、应注意的问题,MySQL数据类型,数据类型种类数值列类型字符串列类型日期和时间列类型,数据类型种类,数值型分为整型和浮点型整型:可以由十进制和十六进制表示整数由数字序列组成,如:1,100。由十六进制表示方法:0 x且后面加19和AF 的任意数字或字母,并且0 x中的X不能大写。浮点型:浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。,字符串:由单引号或者双引号括起来的字符或者数字。如:”abc”,abc10字符串中要用转义字符才能表示的特殊符号,日期和时间值是存储如“2005-1-1”或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序

7、。NULL值是一种无类型的值,表示“空,什么也没有”。,数值列类型,MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。数值列类型 所有数值列类型的类型名及其说明和所占的字节数见下表:,数值列类型包括整型和浮点型 说明:TINYINT,SAMLLINT,MEDIUMINT,INT,BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。,字符串列类型所有字符串列类型及其说明和所占的字节数见下表:,说明:对于

8、可变长的字符串类型,其长度取决于实际存放在列中的值的长度。此长度在上表中用L来表示。附加若干额外字节,用来记录字符串长度,也就是说总长度等于Ln(n1、2、3、4、8),CHAR和VARCHAR类型CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理存储的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。,BLOB和TEXT类

9、型BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BOLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。ENUM 和SET类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用),日期和时间列类型所有时间和日期列类型的类型名及其说明和所占的字节数见下表:,说明:每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加表示日期时必须先按:年,月,日的顺序给出DATE,TIME,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYY

10、Y-MM-DD”,“hh:mm:ss”和“YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是到2037年的某个时间,主要用于记录更改或创建某个记录,总结:常用数据类型,3.3.3 索引的建立和删除,建立索引是加快查询速度的有效手段建立索引DBA或表的属主(即建立表的人)根据需要建立有些DBMS自动建立以下的索引 PRIMARY KEY UNIQUE,一、建立索引,语句格式CREATE UNIQUE INDEX ON(,);用指定要建索引的基本表名字索引可以建立在该表的一

11、列或多列上,各列名之间用逗号分隔用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据记录,例题,例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;删除索引时,系统会从数据字典中

12、删去有关该索引的描述。例15 删除Student表的stu_sname_index索引。DROP INDEX stu_sname_index;注意:主键索引不能被删除;删除主键约束时,主键索引会被自动删除。,3.4.1 单表查询,查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列二、选择表中的若干元组三、order by 子句四、聚集函数(aggregate functions)五、group by 子句,一、选择表中的若干列,1.查询指定列例1 查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student;例2 查询全体学生的姓名、学号、所在系。SELECT

13、Sname,Sno,SdeptFROM 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 王

14、名 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)

15、/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

16、ALL Sno FROM SC;结果:Sno-95001 95001 95001 95002 95002,例题(续),(2)SELECT DISTINCT Sno FROM SC;结果:Sno-95001 95002,例题(续),注意 DISTINCT短语的作用范围是所有目标列例:查询选修课程的各种成绩错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法 SELECT DISTINCT Cno,Grade FROM SC;,2.查询满足条件的元组,WHERE子句常用的查询条件,(1)比较大小,在WHERE子句的中使用比较运算符=,=,!,!=

17、20;,(2)确定范围,使用谓词 BETWEEN AND NOT BETWEEN AND 例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;,例题(续),例11 查询年龄不在2023岁之间的学生姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;,(3)确定集合,使用谓词 IN,NOT IN:用逗号分隔的一组取值例12查询信息系(IS)、

18、数学系(MA)和计 算机科学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS);,(3)确定集合,例13查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN(IS,MA,CS);,(4)字符串匹配,NOT LIKE ESCAPE:指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,可以用=运算符取代 LIKE 谓词 用!=或 运算符取代 NOT LIKE 谓词,通配符,%(百

19、分号)代表任意长度(长度可以为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=950

20、01;,例题(续),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 _阳%;,例题(

21、续),匹配模板为含通配符的字符串(续)例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 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的

22、学生的学号和相应的课程号。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 Sage20;

23、,改写例12,例12 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS)可改写为:SELECT Sname,SsexFROM StudentWHERE Sdept=IS OR Sdept=MA OR Sdept=CS;,改写例10,例10 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 23;可改写为:SELECT Sna

24、me,Sdept,SageFROM Student WHERE 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

25、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|AL

26、L)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

27、 子句,使用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子句的列名列表中只能出现分组属性和集函数,使用HAV

28、ING短语筛选最终输出结果,例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短语作用于组,从中选择满足条件的组。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号