一、SQL概述
1.特点
结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能不仅仅是查询,而是包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
SQL集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,其主要特点:
1)综合统一:数据库系统的主要功能是通过数据库支持的数据语言来实现的。语言风格统一。
2)高度非过程化:用SQL进行数据操作时, 只要提出“做什么” , 而无须指明“怎么做” , 因此无须了解存取路径。
存取路径的选择以及SQL的操作过程由系统自动完成。大大减轻了用户负担,且有利于提高数据独立性。
3)面向集合的操作方式:都是针对集合操作。
4)以同一种语法结构提供多种使用方式:SQL既是独立的语言, 又是嵌入式语言。
5)语言简洁,易学易用。
2.模式结构
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构。其中外模式包括若干视图(view)和部分基本表(base table),模式包括若干基本表,内模式包括若干存储文件(stored file)。
用户可以用SQL对基本表和视图进行查询或其他操作, 基本表和视图一样, 都是关系。
基本表是本身独立存在的表, 在关系数据库管理系统中一个关系就对应一个基本表。一个或多个基本表对应一个存储文件, 一个表可以带若干索引, 索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。 存储文件的物理结构对最终用户是隐蔽的。
视图是从一个或几个基本表导出的表。 它本身不独立存储在数据库中, 即数据库中只存放视图的定义而不存放视图对应的数据。 这些数据仍存放在导出视图的基本表中, 因此视图是一个虚表。 视图在概念上与基本表等同, 用户可以在视图上再定义视图。
二、学生—课程数据库
以学生-课程数据库为例来学习SQL的数据定义、 数据操纵、 数据查询和数据控制语句。
1.数据库
首先要定义一个学生-课程模式S-T。
学生-课程数据库中包括以下三个表:
学生表: Student(Sno,Sname,Ssex,Sage,Sdept)
课程表: Course(Cno,Cname,Cpno,Ccredit)
学生选课表: SC(Sno,Cno.Grade)
2.数据定义
SQL的数据定义功能包括模式定义、 表定义、 视图和索引的定义:
模式定义:CREATE SCHEMA<模式名> AUTHORIZATION <用户名〉;
模式删除:DROP SCHEMA 模式名xCASCADE | RESTRICT>; 其中CASCADE和RESTRICT两者必选其一。选择了 CASCADE (级联),表示在删除模 式的同时把该模式中所有的数据库对象全部删除;选择了 RESTRICT (限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
基本表定义:建立一个“课程”表Course
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列级完整性约束条件,Cno是主码*/
Cname CHAR(40) NOT NULL, /*列级完整性约束条件,Cname不能取空值*/
Cpno CHAR(4), /* Cpno的含义是先修课*/
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES SC(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是SC,被参照列是Cno */
);
涉及的数据类型:
每一个基本表都属于某一个模式,一个模式包含多个基本表。
数据字典是关系数据库管理系统内部的一组系统表。关系数据库管理系统在执行SQL的数据定义语句时, 实际上就是在更新数据字典表中的相应信息。 在进行查询优化和查询处理时, 数据字典中的信息是其重要依据。
3.数据查询
1)基本使用
数据查询是数据库的核心操作。 SQL提供了 SELECT语句进行数据查询, 该语句具有灵活的使用方式和丰富的功能。
如查询计算机科学系全体学生的名单: SELECT Sname FROM Student WHERE Sdept=‘CS’;
根据WHERE子句的条件表达式,从FROM子句指定的基本表、 视图或派生表中,找出满足条件的元组。
2)聚集函数
如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。 如果不指定DISTINCT短语或指定ALL短语(ALL为默认值) , 则表示不取消重复值。
如查询学生总人数:SELECT COUNT(*) FROM Student;
4.数据更新
数据更新操作有三种: 向表中添加若干行数据、 修改表中的数据和删除表中的若干行数据。
1)INSERT:如将学生张成民的信息插入到Student表中:INSERT into Student VALUES('201215126','张成民','男',18, 'CS');
2)UPDATE:如将学生201215121的年龄改为22岁:UPDATE Student SET Sage=22 WHERE Sno='201215121'
3)DELETE:如删除学号为201215128的学生记录:DELETE FROM Student WHERE Sno='201215128';
三、视图
视图是从一个或几个基本表(或视图) 导出的表。 它与基本表不同, 是一个虚表。 数据库中只存放视图的定义, 而不存放视图对应的数据, 这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化, 从视图中查询出的数据也就随之改变了。 从这个意义上讲, 视图就像一个窗口, 透过它可以看到数据库中自己感兴趣的数据及其变化。
视图一经定义, 就可以和基本表一样被查询、 被删除。 也可以在一个视图之上再定义新的视图, 但对视图的更新(增、 删、 改) 操作则有一定的限制。
作用:
1)视图能够简化用户的操作:简单清晰看数据,不用管具体的语句、存储结构等
2)视图使用户能以多种角度看待同一数据
3)视图对重构数据库提供了一定程度的逻辑独立性:数据库重造,用户程序不受影响。
4)视图能够对机密数据提供安全保护:重要的数据不用出现在视图上。