SQL概述
SQL的特点
SQL集数据查询、数据操纵、数据定义和 数据控制功能于一体,其主要特点包含以下几部分:
1、功能统一
SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期内的全部活动。
特别是用户在数据库系统投入运行后还可以根据需要随时地、逐步地修改模式,并不影响数据库的运行。
2、高度非工程话
只要提出“做什么”而无需之命“怎么做”,因此无需了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。
3、面向集合的操作方式
非关系数据型采用的是面向记录的操作方式,操作对象是一条记录。而SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
4、以同一种语言结构提供多种使用方式
SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立的用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言)(例如C、C++、Java)程序中,供程序员设计程序时使用。
5、语言简洁、易学易用
学生课程数据库
本章以学生-课程数据库为例来讲解SQL的数据定义,数据操纵、数据查询和数据控制语句。
为此,首先要定义一个学生-课程模式S-T,学生课程数据库中包含以下三个表:
学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:Course(Cno,Cname,Cpno,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
各个表中的数据:
学号 Sno |
姓名 Sname |
性别 Ssex |
年龄 Sage |
所在系 Sdept |
2017001 | 杜霄霖 | 女 | 22 | 软件工程 |
2017002 | 王磊 | 男 | 22 | 软件工程 |
2017003 | 王嘟嘟 | 男 | 21 | 电子商务 |
2017004 | 都蕾蕾 | 女 | 20 | 计算机科学 |
课程号 Cno |
课程名 Cname |
先修课 Cpno |
学分 Ccredit |
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据处理 | 2 | |
7 | PASCAL语言 | 6 | 4 |
学号 Sno |
课程号 Cno |
成绩 Grade |
2017001 | 1 | 92 |
2017001 | 2 | 85 |
2017001 | 3 | 88 |
2017002 | 2 | 90 |
2017002 | 3 | 80 |
数据定义
关系数据库支持三级模式结构,其模式、外模式和内模式种的基本对象有模式、表、视图、和索引等。因此SQL的数据定义功能包括模式定义、表定义、视图和索引定义。
一个关系数据库管理系统的实例种可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
模式的定义与删除
1、定义模式
(定义了一个命名空间,架构)
在SQL中,模式定义的语句如下: create schema <模式名> authorization <用户名>
如果没有指定<模式名>,那么<模式名>隐含为<用户名>
要创建模式,调用该命令的用户必须拥有数据库管理员的权限,或者获得了数据库管理员授予的 create schema 的权限。
【例】:为用户 wang 定义一个学生-课程模式 S-T
create schema 'S-T' authorization wang;
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。
2、删除模式
SQL中,删除模式的语句如下:drop schema <模式名> <cascade|restrict>
其中cascade和restrict 两者必选其一,选择了cascade(级联),表示在删除模式的同时把该模式中部的所有数据库对象全部删除;选择了restrict (限制)表示如果该模式中已经定义了下属的数据库对象,则拒绝该删除语句的执行。
基本表的定义、删除与修改
1、定义基本表
创建了一个模式就建立的一个数据库命名空间,一个框架。在这个命名空间中首秀按要定义的激素hi该模式包含的数据库基本表。
SQL语言中使用 create table语句定义基本表,其基本格式如下:
create table <表名> (
<列名> <数据类型> [ 列级完整性约束条件 ]
[ ,<列名> <数据类型> [ 列级完整性约束条件 ]]
......
[ ,< 表级完整性约束条件 > ]
);
建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据库字典中,当用户操作表中的数据时又关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
【例】建立一个学生表 Student
create table Student
(
Sno char(9) primary key, //列级完整性约束条件,Sno是主码
Sname char(20) unique, //Sname取唯一值
Ssex char(2),
Sage smallint,
Sdept char(20)
constraint ck_age check (sage>0) //表级约束条件,约束起名为ck-age,约束年龄大于20
);
【例】建立一个课程表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 Course (Cno)
//表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno
);
本例说明参照表和被参照表可以是同一个表;被参照表一定是被声明过的,参照的列必须是表的主码。
2、修改基本表
随着应用环境和应用需求的变化,有时需要修改已建好的基本表。SQL语言用 alter table语句修改基本表,其一般格式为:
alter table <表名>