3.1 SQL概述
3.1.1 SQL的产生与发展
1)SQL的概念
SQL语言是结构化查询语言,介于关系代数和关系演算之间的语言,是关系数据库的标准语言。
2)SQL的标准
3)SQL的应用、SQL的命令
⑴数据定义语言(DDL)
创建、修改或删除数据库中各种对象,包括 SQL数据库、模式、基本表、视图、索引等。
⑵查询语言(QL)
按照指定的组合、条件表达式或排序检索 已存在的数据库中数据,不改变数据库中数据。
命令:SELECT FROM WHERE
(3)数据操纵语言(DML)
对已经存在的数据库进行元组的插入、删除、 修改等操作。
命令:INSERT、UPDATE、DELETE
⑷数据控制语言(DCL)
用来授予或收回访问数据库的某种特权,控制事务的提交和回滚。
命令:GRANT、REVOKE、COMMIT、ROLLBACK
3.1.2 SQL的特点
1)SQL的特点
(1) 功能强大
(2) 语言简洁、易学易用
(3)同一语法结构提供两种使用方式
(4) 高度非过程化
(5)面向集合的操作方式
2)SQL对三级模式的支持
3.2 学生课程数据库
学生表:S(sno,sname,age,sex)
课程表:C(cno,cname,tname)
学生选课表:SC(sno, cno,grade)
三表之间联系:
3.3 数据定义
3.3.1 数据库和模式的定义
1)数据库的创建和删除
(1) 创建数据库:
CREATE DATABASE database_name [ ………]
例: CREATE DATABASE student;
(2) 修改数据库:
ALTER DATABASE database_name
(3) 删除数据库:
DROP DATABASE database_name
例: DROP DATABASE student;
2)模式的创建和删除
创建SQL模式即定义一个DB下的命名空间, 在这个空间中可进一步定义该模式包含的各个数据库对象。
(1)创建模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
(2)删除模式
DROP SCHEMA〈模式名〉[CASCADE|RESTRICT]
备注:CASCADE (连锁)方式;RESTRICT (约束,默认)方式
首先要建立用户自己的数据库。一个数据库中可以建立多个模式,用户不指定,系统会自动建立与用户名相同的模式名,并将其后建立的基本表、索引等数据库对象建立在默认模式中。
一个模式下可以包括多个表、视图和索引等数据库对象,可以用数据库模式表(DATABASE.SCHEMA.TABLE) 来引用这些数据库对象。
3.3.2 基本表的定义、删除与修改
1)基本表的创建
CREATE TABLE〈基本表名〉(<列名><数据类型>[列级完整性约束条件],[<列名 ><数据类型>[列级完整性约束条件]]……[,表级完整性约束条件]);
常用完整性约束
-主码约束: PRIMARY KEY
-唯一性约束:UNIQUE
-非空值约束:NULL/NOTNULL
-参照完整性约束:FOREIGN KEY REFERENCES
-检查子句:CHECK
★这些保留字不能用作表名、列名等。
例题:
建立学生关系模式S(sno,sname,age,sex)
CREATE TABLE S
(sno char(4) PRIMARY KEY sname char(8) NOT NULL, age smallint, sex char(2),
PRIMARY KEY(sno));
建立课程关系模式C(cno,cname,tname)
CREATE TABLE C
(cno char(4) NOT NULL, cname char(8) NOT NULL, tname char(10), PRIMARY KEY(cno));
建立选课关系模式SC(sno,cno,grade)
CREATE TABLE SC
(sno char(4) NOT NULL, cno char(4) NOT NULL, grade smallint, PRIMARY KEY (sno,cno), FOREIGN KEY(sno)REFERENCES S(sno), FOREIGN KEY(cno)REFERENCES C(cno), CHECK( (grade IS NULL) OR
(grade BETWEEN 0 AND 100))
);
2)基本表的修改
(1) 对表增加列
ALTER TABLE <表名>ADD〈列名〉<数据类型>[NULL|NOTNULL],...;
ALTER TABLE S ADD addr CHAR(20);
★如果原表中已存在数据,则新定义的列必须设置为NULL,表中原有元组在新增加的列上 的值均被定义为空值。
(2)撤销原有的列
ALTER TABLE〈表名〉DROP COLUMN〈列名〉;
ALTER TABLE S DROP COLUMN addr;
(3)修改原有的类型
ALTER TABLE〈表名〉ALTER COLUMN〈列名〉;
ALTER TABLE S ALTER addr CHAR(10);
3)基本表的删除
DROP TABLE <表名>[CASCADE|RESTRICT]
★ CASCADE(连锁,即与表相关的均删除);RESTRICT(约束)
例如:DROP TABLE SC CASCADE;
当删除表时,表的数据、表上建立的索引和视 图都自动被删除。
3.3.3 索引的定义
1)索引的使用
建立索引是加快查询速度的有效手段。
(1)建立索引
-DBA或表的属主(即建立表的人)根据需要建立。
-有些DBMS自动建立以下列上的索引。
• PRIMARY KEY
• UNIQUE
(2 )维护索引
-索引建立后由DBMS自动维护,不需用户干预。
(3)使用索引
-DBMS自动选择是否使用索引以及使用哪些索引。
2)索引的创建
CREATE [UNIQUE] [CLUSTER] INDEX<索引名> ON〈基本表名〉(<列名1>[ASC|DESC]
[,<列名 2 >[ASC|DESC]]…)
备注:
UNIQUE表示每一个索引值只对应唯一的数据记录。
CLUSTER表示建立的索引是聚簇索引,索引值相同或相邻的数据记录存放在连续的物理块中。
例1:CREATE UNIQUE INDEX SI ON S(sno)// UNIQUE:唯一性索引,SI:索引名
例2:
CREATE UNIQUE INDEX SC_INDDEX1 ON SC(sno ASC, cno DESC)
缺省时,表示升序:ASC不写表示升序
例3:
CREATE CLUSTER INDEX SC_INDDEX2 ON SC(grade)
CLUSTER聚簇索引,相邻成绩存放在同一数据块中
3)索引的删除
语法:DROP INDEX〈表名.索引名〉
例: DROP INDEX SC.SC_INDDEX1 或
DROP INDEX SC_INDDEX1 on SC
删除索引时,系统会同时从数据字典中删除 有关该索引的描述。
3.4数据查询
3.4.1 单表查询
只涉及一个 表的查询称为单表查询
1)简单的单表查询
(1)查询语句的基本结构
SQL的查询语句基本语法结构: SELECT- FROM-WHERE
SELECT Al,A2,...,An //列名
FROM Rl,R2,...,Rn //来源的表
WHERE〈查询条件表达式〉;
//三条语句顺序不可改变
(2)选择表中的列 SELECT
1.查询指定列(或全部列)
例1:查看学生全部信息
SELECT sno,sname,age,sex FROM