1、CS&T Information Course,Arial 或Frutiger Bold 40pt,黑体简40pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,Arial 或 Frutiger 55 Roman 25pt,华文细黑简25pt,*,第二章 SQL(1),Sql,的产生和发展,最早的版本有,IBM
2、的,San jose,研究室提出,Structured English Query Language,正式发音是“,ess cue ell”,SQL,的标准是由,ANSI,在,1986.10,公布的随后被,ISO,采纳。最新的版本是,SQL-99,2025年1月20日,关于,SQL,的小故事,Ingres,数据库在加州大学伯克利分校诞生,主要的设计者是当时鼎鼎大名的,Michael Stonebraker,教授。可以说,Ingres,数据库软件是上个世纪,80,年代技术上最好的数据库并占有较大的市场分额。,Ingres,使用的是,Stonebraker,发明的,QUEL,(,Query La
3、nguage,)的查询技术。而,IBM,采用的是,SQL,。这两者区别较大,在某些地方,QUEL,甚至要优于,SQL,。,SQL,为什么能够打败,quel,而被广泛接受呢,?IBM,当时担心,Ingres,把,QUEL,变成标准会对自己不利。经过一番衡量,决定把自己的,SQL,提交给数据库标准委员会。而,Stonebraker,教授可不打算把,QUEL,提交给数据库标准委员会,学院派的他认为这麽做实际上是扼杀了创新精神。结果各大数据库厂商分别支持推出,SQL,的产品。,Ingres,不断丢城失地,等到后来推出支持,SQL,数据库的时候为时已晚。,2025年1月20日,SQL,的特点,(,1,)
4、一体化,(,2,)高度的非过程化,(,3,)面向集合的操作方式,(,4,)多种使用方式,(,5,)简洁,2025年1月20日,SQL,的组成部分,数据定义语言,(,Data Definition Language,,,DDL,)。提供定义关系表(,CREATE TABLE,),修改表(,ALTER TABLE,)、删除表(,DROP TABLE,)的命令。,数据操纵语言,(,Data Manipulation Language,,,DML,)。包括对表中的数据进行增(,INSERT,)、删(,DELETE,)、改(,UPDATE,)、查(,SELECT,)的命令。,数据控制语言,(,Data
5、Control Language,,,DCL,)。,说明对关系和视图的访问权的命令,授权(,GRANT,)、收回权限(,REVOKE,)、拒绝权限(,deny,)。,2025年1月20日,SQL,的组成部分,视图定义。包括视图定义(,CREATE VIEW,)的命令。,事务控制。,SQL,提供定义事务的开始(,BEGIN TRANSACTION,)和结束(,COMMIT,)的命令。,嵌入式,SQL,和,动态,SQL,:嵌入式,SQL,和动态,SQL,用于某种通用编程语言中,如,JAVA,、,C,、,C+,、,PL/I,、,COBOL,、,PASCAL,、,FORTRAN,。,完整性。包括定义数
6、据库中的数据必须满足的完整性约束条件的命令。破坏完整性约束条件的更新将被禁止。如:,PRIMARY KEY,,,CHECK,,,NOT NULL,等。,2025年1月20日,Sql,的学习方法,向学习其它的计算机语言一样,多上机试验,2025年1月20日,目录,2.1,背景,2.2,创建表,2.3,单表查询,2.4,多表连接查询,2.5,嵌套子查询,2.6,编辑表中数据,2.7,复杂查询,2.8,创建数据库,2025年1月20日,2.2,创建表,第一张表,数据类型,约束,创建表的实验(企业管理器中试验),创建表的语法结构,创建表的实验(查询分析器中试验),编辑表、编辑表中数据,2025年1月2
7、0日,第一张表 学生信息表,学号,姓名,性别,年龄,系别,9512101,李勇,男,19,计算机系,9512102,刘晨,男,20,计算机系,9512103,王敏,女,20,计算机系,在创建这张表之前我们需要掌握的知识,1.Sql,中的数据类型,2.,表中的约束,2025年1月20日,Sql,中的数据类型,数值型,字符串型,日期型,货币型,2025年1月20日,数值型,SQL Server,SQL92,说明,Bigint,8,字节,存储从,2,63,(,9223372036854775808),到,2,63,-1,(9223372036854775807),范围的整数。,Int,Integer
8、4,字节,存储从,2,31,(2,147,483,648),到,2,31,-1,(2,147,483,647),范围的整数,Smallint,Smallint,2,字节,存储从,2,15,(32,768),到,2,15,-1,(32,767),范围的整数,2025年1月20日,数值型,SQL Server,SQL92,说明,Tinyint,存储从,0,到,255,之间的整数,Bit,Bit,存储,1,或,0,numeric,(,p,q,),或,decimal,(,p,q,),decimal,定点精度和小数位数。使用最大精度时,有效值从,10,38,+1,到,10,38,-1,。其中,,p,为
9、精度,,指定小数点左边和右边可以存储的十进制数字的最大个数。,q,为小数位数,,指定小数点右边可以存储的十进制数字的最大个数,,0=,q,=,p,。,q,的默认值为,0,2025年1月20日,SQL Server,SQL92,或,SQL99,数据类型,说明,float,float,8,字节,存储从,1.79E+308,到,1.79E+308,范围的浮点型数,real,4,字节,存储从,3.40E+38,到,3.40E+38,范围的浮点型数,2025年1月20日,字符串型,:,普通字符编码,和,统一字符编码,(所有字符均,2,字节)。,SQL Server,SQL92,或,说明,char,(,n
10、character,固定长度的字符串类型,,n,表示字符串的最大长度,取值范围为,1,8000,varchar,(,n,),character varying,可变长度的字符串类型,,n,表示字符串的最大长度,取值范围为,1,8000,Char,与,varchar,的优缺点?,2025年1月20日,text,可存储,231-1(2,147,483,647),个字符的大文本,nchar,(,n,),national characte,固定长度的,Unicode,数据,,n,表示字符串的最大长度,取值范围为,1,4000,nvarchar,(,n,),national character v
11、arying,可变长度的,Unicode,数据,,n,表示字符串的最大长度,取值范围为,1,4000,ntext,最多可存储,230-1(1,073,741,823),个字符的统一字符编码文本,2025年1月20日,binary,(,n,),binary,固定长度的二进制字符数据,,n,表示最大长度,取值范围为,1,8000,varbinary,(,n,),binary varying,可变长度的二进制字符数据,,n,的取值范围为,1,8000,image,大容量的、可变长度的二进制字符数据,可以存储多种格式的文件,最大约为,2GB,2025年1月20日,字符串类型的数据两端用单引号括起来,如
12、how are you,1234,等都是字符串的数据,12313,,,2.343,是数值型数据,字符串型,:,2025年1月20日,日期时间类型,SQL Server,的,日期时间数据类型,是将日期和时间合起来存储,它没有单独存储的日期和时间类型,但,SQL92,或,SQL99,是将日期和时间类型分开,没有日期时间合起来存储的类型,在,SQL92,或,SQL99,中日期是,Date,类型,时间是,Time,类型。,2025年1月20日,日期时间类型,SQL Server,说明,Datetime,占用,8,字节空间,存储从,1753,年,1,月,1,日到,9999,年,12,月,31,日的日期
13、和时间数据,精确到百分之三秒(或,3.33,毫秒),Smalldatetime,占用,4,字节空间,存储从,1900,年,1,月,1,日到,2079,年,6,月,6,日的日期和时间数据,精确到分钟,2025年1月20日,日期型数据的格式,Oct 25 2001,2001-10-25,2001/10/25,20011025,2025年1月20日,SQL,的数据类型,货币类型,货币数据类型,表示货币值。货币数据存储的精确度固定为四位小数,实际上货币类型的数据都是有,4,位小数的,decimal,类型的数据。,SQL92,或,SQL99,没有对应的货币类型。,2025年1月20日,货币类型,SQL,
14、说明,money,8,字节,存储的货币数据值介于,263(922,337,203,685,477.5808),与,263-1(+922,337,203,685,477.5807),之间,精确到货币单位的千分之十。最多可以包含,19,位数字,Smallmoney,4,字节,存储的货币数据值介于,214,748.3648,与,+214,748.3647,之间,精确到货币单位的千分之十,2025年1月20日,在企业管理器中演示创建下表的过程,学号,姓名,性别,年龄,系别,9512101,李勇,男,19,计算机系,9512102,刘晨,男,20,计算机系,9512103,王敏,女,20,计算机系,20
15、25年1月20日,试验,在企业管理其中创建如下三张表:图书表(,book,),列名,数据类型,约束,描述,book_ID,CHAR(10),主码,图书编号,name,NVARCHAR(30),非空,图书的名称,author,NVARCHAR(10),图书的作者,publish,NVARCHAR(20),出版社,price,DECIMAL(6,2),大于,0,定价,2025年1月20日,读者表(,reader,),列名,数据类型,约束,描述,Reader_ID,CHAR(10),主码,读者编号,name,NVARCHAR(8),读者姓名,sex,NCHAR(1),读者性别,birthdate,D
16、ATETIME,读者的出生日期,2025年1月20日,借阅表(,borrow,),列名,数据类型,约束,描述,book_ID,CHAR(10),主码;外码,参照,Book,表中的,book_ID,图书编号,Reader_ID,CHAR(10),主码;外码,参照,Reader,表中的,Reader_ID,读者编号,Borrowdate,DATETIME,主码;,借阅日期,2025年1月20日,试验,修改表以及删除表,2025年1月20日,约束,PRIMARY KEY,(,主码,),:,NOT NULL,(非空):限定该列取值不为,null,CHECK,(检查约束):限定该列取值范围,UNIQUE
17、唯一值):限定该列取值不重复,DEFAULT,(默认值):给定默认值,FOREIGN KEY,(外码):,2025年1月20日,举例说明,学号,姓名,性别,年龄,系别,9512101,李勇,男,19,计算机系,9512102,刘晨,男,20,计算机系,9512103,王敏,女,20,计算机系,Primary key,Not null,check,default,check,2025年1月20日,primary key,主码约束,主码:能够惟一的确定表中一条记录的属性列或属性列集合。,一张表只能有一个主码。,2025年1月20日,Foreign key,外码约束,用以建立列之间的参照关系(列
18、一般来自不同的表)。使一个列(,外码列,)的取值受另一个列(,主码列,)的约束。,例:,“学生信息表”中保存的是某校的全部学生。“选课信息表”中保存的是学生的选课信息,由学号、课程、成绩组成。,2025年1月20日,Foreign key,学号,姓名,年龄,001,王鹏,19,002,黎明,19,003,张力,20,学号,课程,成绩,001,数据库原理,90,003,数据库原理,80,004,C,语言,75,选课信息表(学号)应该参照学生信息表(学号),学生信息表 选课信息表,X,主码列,外码列,2025年1月20日,创建数据库,简单语法:,create database,数据库名称,打开数据
19、库:,use,数据库名称,注意:一个用户一次只能打开一个数据库,2025年1月20日,创建表的语法结构,CREATE TABLE ,(,列级完整性约束定义,列级完整性约束,定义,表级完整性约束定义,),2025年1月20日,第一张表 学生信息表,学号,姓名,性别,年龄,系别,9512101,李勇,男,19,计算机系,9512102,刘晨,男,20,计算机系,9512103,王敏,女,20,计算机系,2025年1月20日,学生表的结构,列名,数据类型,约束,说明,学号,CHAR(8),主码,姓名,CHAR(10),非空,姓名信息必须不为空,年龄,INT,大于,10,,小于,60,小于,10,,大
20、于,60,的学生年龄无意义,身份证号,CHAR(18),取值唯一,每个人的身份证号是唯一,系别,VARCHAR(26),default,默认值为“计算机系”,2025年1月20日,在查询分析器中创建图书表,2025年1月20日,练习,使用,sql,完成“图书表”,“读者表”,“借阅表”的创建,2025年1月20日,创建图书表,CREATE TABLE Book(,book_ID CHAR(10)PRIMARY KEY,-book_ID,为主码,name NVARCHAR(30)NOT NULL,-,非空约束,author NVARCHAR(10),publish NVARCHAR(20),pr
21、ice DECIMAL(6,2)CHECK(price0),-CHECK,约束,,price,大于,0,),2025年1月20日,创建读者表,CREATE TABLE Reader(,Reader_ID CHAR(10)PRIMARY KEY,name NVARCHAR(8),sex NVARCHAR(1),birthdate DATETIME,),2025年1月20日,创建借阅表,CREATE TABLE Borrow(,book_ID CHAR(10),Reader_ID CHAR(10),Borrowdate DATETIME,PRIMARY KEY(book_ID,Reader_ID)
22、FOREIGN KEY(book_ID)REFERENCES Book(book_ID),FOREIGN KEY(Reader_ID)REFERENCES Reader(Reader_ID),),2025年1月20日,删除表,DROP TABLE,【,例,2.4】,删除“学生信息表”,DROP TABLE,学生信息表,2025年1月20日,修改表,ALTER TABLE ,-,修改列定义,ALTER COLUMN ,-,添加新列,|ADD ,属性,-,删除列,|DROP COLUMN ,2025年1月20日,修改表,【,例,2.5】,添加“职业”列到,Reader,表中,列的定义为,prof
23、ession CHAR(20),ALTER TABLE Reader,ADD profession CHAR(20),【,例,2.6】,将,profession,列修改为,char(30),ALTER TABLE Reader,ALTER COLUMN profession CHAR(30),【,例,2.7】,删除,profession,列,ALTER TABLE Reader,DROP COLUMN profession,2025年1月20日,插入数据,INSERT,语句的基本语法:,INSERT INTO,表名(列名列表),VALUES,(值列表),注意:列名列表 与 值列表 永远保持一致
24、2025年1月20日,插入数据,【,例,2.8】,试把数据“(,021B310001,张冬,男,1976-11-26,)”插入到,Reader,表中。,INSERT INTO Reader,(,ID,name,sex,birthdate,),VALUES,(,021B310001,张冬,男,1976-11-26,),2025年1月20日,由于这道题目要插入的数据恰好与表的列数以及各列的顺序保持一致,所以“列名列表”也可以省略掉,变成如下的形式:,INSERT INTO Reader,VALUES,(,021B310001,张冬,男,1976-11-26,),2025年1月20日,插入数据,
25、例,2.9】Reader,表中插入下面的数据:,读者编号:,021B310002,读者姓名:牟晓光,读者性别:女,INSERT INTO Reader,(,ID,name,sex,),VALUES,(,021B310002,牟晓光,女),或者:,INSERT INTO Reader,VALUES,(,021B310002,牟晓光,女,NULL,),2025年1月20日,小结,sql,的数据类型,约束的概念,创建表,删除表,修改表,插入数据,2025年1月20日,作业,&,练习,1.,将,31,页表,2-13,,,2-14,,,2-15,的数据分别插入相应的表中。,(,后面的学习以这三张带有数据的表为试验环境,),2.,课后习题,1-6,2025年1月20日,课外作业,设计一个个人帐务系统的数据库,设计一个个人收藏品的数据库,设计一个同学录数据库,设计一个图书信息数据库,2025年1月20日,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,






