资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,2.3,关系数据库的数据定义与操纵,1,本 节 要 点,SQL,语言简介,数据定义,数据查询,SQL,视图,2,SQL,语言的发展,1974,1981,today,1974,年 由,CHAMBERLIN,和,BOYEE,提出,当时称为,SEQUEL,(STUCTURED ENGLISH QUERY LANGUAGE),1970s,IBM,公司对其进行了修改,并用于其,SYSTEM R,关系数据库系统中,1981,年,IBM,推出其商用关系关系数据库,SQL/DS,,并将其名字改为,SQL,,由于,SQL,语言功能强大,简洁易用,因此得到了广泛的使用,今天广泛应用于各种大型数据库,如,SYBASE,、,INFORMIX,、,INGRES,ORACLE,、,DB2,等,也用于各种小型数据库,如,FOXPRO,、,ACCESS,SEQUEL,3,SQL,是结构化查询语言(,Structured Query Language,)的缩写,其功能包括,SQL,语言的特点,数据,查询,数据,操纵,数据,定义,数据,控制,SQL,语言风格统一,可以独立完成数据库的全部操作。并且语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。,4,SQL,语言的特点,5,两个基本概念,基本表(,BASE TABLE,),:,是独立存在的表,不是由其它的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。,视图(,VIEW,),:,是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。,6,SQL,语言支持关系型数据库的三级模式结构。其中,外模式对应于,视图,(,View,),和部分,基本表,(,Base Table,),,模式对应于基本表,内模式对应于存储文件。,2.3.1 SQL,语言的数据定义,7,数据定义语言,DDL,用于执行数据定义的操作,如创建或删除表、索引和视图之类的对象,。,1,定义(创建)表,【,格式,】,CREATE TABLE,(,字段级完整性约束条件,字段级完整性约束条件,);,【,功能,】,定义(也称创建)一个表。,数据定义,8,SQL,语句格式的约定符号,语句格式中,中的内容是必须的,是用户自定义语义,;,为任选项,或,分隔符,|,表示必选项,即必选其中之一项,N,表示前面得项可以重复多次,是合法标识符,最多可有,128,个字符,如,S,SC,C,,不允许重名。,列名,(,字母开头,可含字母、数字、,$,、,_=128,字符,),。同一表中不许有重名列。,9,1BYTES,0,至,255,TINYINT,2BYTES,-215,至,215-1,SMALLINT,4BYTES,-231,到,231-1,INT,0,1,NULL,BIT,占用的字节,数据内容与范围,数据类型,各种数据类型的有关,规定,如下表:,实际使用,1BIT,,但会占用,1BYTE,,若一个数据中有数个,BIT,字段,可共占,1,个,BYTE,10,数据类型,数据内容与范围,占用的字节,DATETIME,1753/1/1,至,9999/12/31,8BYTES,SMALLDATETIME,1900/1/1,至,2079/6/6,4BYTES,CHAR,1-8000,个字符,1,个字符占,1B,,尾端空白字符保留,VARCHAR,1-8000,个字符,1,个字符占,1B,,尾端空白字符删除。,TEXT,231-1,个字符,1,个字符占,2B,,最大可存储,2GB,11,数据类型,数据内容与范围,占用的字节,NUMERIC,-1038-1,至,1038-1,1-9,位数使用,5BYTES,10-19,位数使用,9BYTES,20-28,位数使用,13BYTES,29-38,位数使用,17BYTES,DECIMAL,-1038-1,至,1038-1,5-17BYTES,因长度而异,与,NUMERIC,相同,FLOAT,-1.79E+306,至,1.79E+308,最多可表示,53,位数,8BYTES,REAL,-3.40E+38,到,3.40E+38,,最多可表示,24,位数,4BYTES,12,【,例,1】,创建一个表,STUD,(,学生信息表),它由以下字段组成:学号(,C,,,10,);,姓名(,C,,,8,);,性别(,C,,,2,);,班级名(,C,,,10,);,系别代号(,C,,,2,);,地址(,C,,,50,);,出生日期(,D,);,是否团员(,L,);,备注(,M,)。,CREATE TABLE STUD,(,学号,C,(,10,),,姓名,C,(,10,),,性别,C,(,2,),,班级名,C,(,10,),系别代号,C,(,2,),地址,C,(,50,),出生日期,D,是否团员,L,备注,M,照片,G,),;,【,例,2】,创建一个表,SC,(,课程成绩表),它由以下字段组成:学号(,C,,,10,);,课程号(,C,,,2,)。,CREATE TABLE SC,(,学号,C,(,10,),,课程号,C,(,2,),;,13,2,修改表,【,格式,】,ALTER TABLE ADD ,(,,,),完整性约束,NULL|NOT NULLDROP ,完整性约束,MODIFY ,;,【,功能,】,修改表结构。,【,说明,】,ADD,子句用于增加指定表的字段变量名、数据类型、宽度和完整性约束条件;,DROP,子句用于删除指定的的完整性约束条件;,MODIFY,子句用于修改原有的字段变量的值。,【,例,3】,在课程成绩表,SC,中,增加一个成绩字段变量(,N,,,3,)。,ALTER TABLE SC ADD,成绩,N(3);,14,3,创建索引,在日常生活中我们会经常遇到索引,例如,图书目录,、,词典索引,等。,借助索引,人们会很快地找到需要的东西。,索引是,数据库随机检索,的常用手段,它实际上就是记录的关键字与其相应地址的对应表。,此外,在,SQL SERVER,中,,行的唯一性,也是通过建立唯一索引来维护的。,索引的,作用,可归纳为:,1.,加快查询速度;,2.,保证行的唯一性。,15,建立索引的语句是,CREATE INDEX,其语法格式为:,CREATE UNIQUE CLUSTER INDEX ON (,次序,次序,),UNIQUE,表明建立唯一索引。,CLUSTER,表示建立聚集索引。,次序用来指定索引值的排列顺序,可为,ASC,(,升序)或,DESC,(,降序),缺省值为,ASC,。,3,创建索引,【,例,4】,为表,SC,在,SNO,和,CNO,上建立唯一索引。,USE STUDENT,CREATE UNIQUE INDEX SCI ON,SC(SNO,CNO),16,4,1,删除数据库,【,格式,】,DROP DATABASE ;,【,功能,】,删除指定数据库的结构和数据。,【,说明,】,谨慎使用。,4,2,删除表,【,格式,】,DROP TABLE ;,【,功能,】,删除指定表的结构和内容(包括在此表上建立的索引)。,【,说明,】,如果只是想删除一个表中的所有记录,则应使用,DELETE,语句。,17,SQL,语言使用,数据定义语言,(,DATA DEFINITION LANGUAGE,,,简称,DDL,),实现其数据定义功能。,操作,对象,操作对象,创建,删除,修改,表,Create table,Drop table,Alter table,视图,Create view,Drop view,索引,Create index,Drop index,数据库,Create database,Drop database,Alter database,18,2.3.2 SQL,数据查询,数据查询是数据库中最常见的操作。,SQL,语言提供,SELECT,语句,通过查询操作可得到所需的信息。,SELECT,语句的一般格式为:,SELECT,列名,,,列名,FROM,表名或视图名,,,表名或视图名,WHERE,检索条件,GROUP BY HAVING,ORDER BY ASC|DESC;,19,SELECT,语句的一般格式:,SELECT,ALL|DISTINCT.,,,FROM,!,,,INNER|LEFT|RIGHT|FULL,JOIN,!,ON,WHERE,AND,GROUP BY,HAVING ,UNION,ORDER BY,ASC|DESC ;,注意:,“,”,内的内容是,任选,的,“,”,内的内容是,必选,的;,语句中若出现多个“,|”,分隔的子句,表示可以选择其中任一子句;,各个子句之间最少需用一个空格隔开;,一个,SQL,语句可以占用多行,但最后一行需用“;”结束(半角字符),20,查询的,结果,是仍是一个,表,。,SELECT,语句的执行过程是,:,根据,WHERE,子句的检索条件,从,FROM,子句指定的基本表或视图中选取满足条件的元组,再按照,SELECT,子句中指定的列,投影得到结果表。,如果有,GROUP,子句,则将查询结果按照,相同的值进行分组。,如果,GROUP,子句后有,HAVING,短语,则只输出满足,HAVING,条件的元组。,如果有,ORDER,子句,查询结果还要按照,的值进行排序。,21,Student,表,查询结果,22,例,1,查询全体学生的学号、姓名和年龄。,SELECT,SNO,SN,AGE,FROM,S,例,2,查询学生的全部信息。,SELECT,*,FROM,S,用*表示,S,表的全部列名,而不必逐一列出。,例,3,查询选修了课程的学生号。,SELECT,DISTINCT,SNO,FROM,SC,查询结果中的重复行被去掉,上述查询均为不使用,WHERE,子句的无条件查询,也称作,投影查询,。,23,另外,利用投影查询可控制列名的顺序,并可通过指定,别名,改变查询结果的列标题的名字。,例,4,查询全体学生的姓名、学号和年龄。,SELECT,SNAME NAME,SNO,AGE,FROM,S,其中,,NAME,为,SNAME,的别名,24,条件查询,当要在表中找出满足某些条件的行时,则需使用,WHERE,子句,指定查询条件。,WHERE,子句中,条件通常通过三部分来描述:,1,列名;,2,比较运算符;,3,列名、常数。,运算符,含义,=,=,85,26,2-2,多重条件查询,当,WHERE,子句需要指定一个以上的查询条件时,则需要使用逻辑运算符,AND,、,OR,和,NOT,将其连结成复合的逻辑表达式。,其,优先级,由高到低为:,NOT,、,AND,、,OR,,,用户可以使用括号改变优先级。,例,7,查询选修,C1,或,C2,且分数大于等于,85,分学生的学号、课程号和成绩。,SELECT SNO,,,CNO,,,SCORE,FROM SC,WHERE,(,CNO=C1,OR,CNO=C2,),AND,SCORE=85,27,2-3,确定范围,例,8,查询工资在,1000,至,1500,之间的教师的教师号、姓名及职称。,SELECT TNO,TN,PROF,FROM T,WHERE SAL,BETWEEN,1000,AND,1500,等价于,SELECT TNO,TN,PROF,FROM T,WHERE SAL=1000,AND,SAL=1500,28,例,9,查询工资不在,1000,至,1500,之间的教师的教师号、姓名及职称。,SELECT TNO,TN,PROF,FROM T,WHERE SAL,NOT BETWEEN,1000,AND,1500,29,2-4,确定集合,利用,“,IN”,操作可以查询属性值属于指定集合的元组。,例,10,查询选修,C1,或,C2,的学生的学号、课程号和成绩
展开阅读全文