数据库系统原理第一章第5章 SQL.ppt
文本预览下载声明
SQL(Structured Query Language, 结构化查询语言)是关系数据库的标准语言。 1974年首次提出; 1975-1979年IBM公司在System R上首次实现; 1986年ANSI把SQL作为关系数据库的标准语言(SQL-86标准); 1987年把SQL-86定为国际标准; 1989年ANSI发布SQL-89标准; 1992年ANSI发布SQL-92标准; 1999年ANSI发布SQL-99标准; 一、定义数据库 1. 删除数据库语句: drop database 数据库名; go --go是批处理命令,表示先执行上面 --的语句,执行完后再执行下面的语句。 2.定义数据库: create database 数据库名; 3. 例:定义学生选课数据库 drop database 学生选课; go create database 学生选课; go 二、基本表的定义和维护功能 1. 定义基本表语句的一般格式为: CREATE TABLE [〈库名〉]〈表名〉 ( 〈列名1〉〈数据类型1〉[〈列级完整性约束条件〉] [,〈列名2〉〈数据类型3〉[〈列级完整性约束条件〉]] [,…n] [,〈表级完整性约束条件〉][,…n] ); (2) 列级完整性的约束条件:针对属性值设置的限制条件 NOT NULL或NULL约束。NOT NULL约束不允许字段值为空,而NULL约束允许字段值为空。 2) UNIQUE约束。UNIQUE约束是惟一性约束,即不允许列中出现重复的属性值。 3) DEFAULT约束。DEFAULT为默认值约束。 格式为:constraint〈约束名〉default 〈默认值〉 4) CHECK约束。CHECK为检查约束。 格式为:CONSTRAINT〈约束名〉CHECK (〈约束条件表达式〉) --以下检查check约束的效果 insert into 学生(学号,姓名,性别,年龄,所在系) values(‘98002’,‘li’,‘sd’,19,‘IS’);--违反check约束 2 定义课程表 CREATE TABLE 课程 ( 课程号 CHAR(5) PRIMARY KEY, 课程名 CHAR(20), 先行课 CHAR(5) ); 注意单属性主码的另一种定义方法 1)向选课表添加记录,并检查外码约束的效果 Insert into 选课(学号,课程号,成绩) Values(‘98001’,’C01’,90 --以上语句不能成功是因为违反外码约束: --当前课程表中还没有“C01”这门课 Insert into 课程(课程号,课程名) Values(‘C01’,’数据库’) go Insert into 选课(学号,课程号,成绩) Values(‘98001’,’C01’,90) --在课程表中增加“C01”课程后,此插入语句可成功执行 2. 建立索引的原则 1) 索引的建立和维护由DBA和DBMS完成。 2) 大表应当建索引,小表则不必建索引。 3) 对于一个基本表,不要建立过多的索引。 4) 根据查询要求建索引。 CREATE VIEW 学生成绩(学号,姓名,课程名,成绩) AS SELECT 学生.学号,学生.姓名,课程.课程名,选课.成绩 FORM 学生,课程,选课 WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号 AND 学生.所在系=计算机系; --以下定义的视图包含有计算列: 【例5-8】将学生的学号、总成绩、平均成绩定义成一个视图。 视图不仅可以从基本表中导出,也可以从已定义好的视图中导出 --以下是一个从学生成绩统计视图中导出的一个视图: 例: 定义一个平均成绩大于80分的学生视图。 5.3.2 SQL的查询实例及分析 学生选课数据库包括3个基本表,其结构为: 学生(学号,姓名,性别,年龄,所在系); 课程(课程号,课程名,先行课); 选课(学号,课程号,成绩). 为操作方便我们采用以下结构的学生选课数据库为演示数据库: Student(sno, sname, ssex , sage, sdept); Course(cno, cname, cpre); SC(sno, cno, grade). 【例4】求全体学生的姓名及其出生年份。 select sname,2004-sage from student; 4)给列命别名 【例5】求全体学生的姓名及其出生年份,要求输出字段为姓名和出生年份。 select sname 姓
显示全部