数据库系统原理——关系数据库标准语言SQL

关系数据库标准语言SQL

一、SQL概述

1.SQL的特点

SQL是因为它是一个综合的、功能极强同时又简洁易学的语言。SQL集数据查询(dataquery)、数据操纵(datamanipulation)、
数据定义(data definition) 和数据控制(data control) 功能于一体

其主要特点包括以下几部分:

(1)综合统一

(2)高度非过程化

(3)面向集合的操作方式

(4)以同一种语法结构提供多种使用方式

(5)语言简洁,易学易用

2.SQL的基本概念
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构。其中外模式包括若干视图(view)和部分基本表(base table),数据库模式包括若干基本表,内模式包括若干存储文件(stored file)。

3.数据定义

SQL的数据定义功能包括模式定义、表定义、视图和索引的定义


I.模式的定义与删除

(1)定义模式
在SQL中,模式定义语句如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
如果没有指定<模式名>,那么<模式名>隐含为<用户名>。

要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理
员授予的CREATE SCHEMA的权限。

例题1.为用户 WANG定义一一个学生-课程模式S-T。
CREATE SCHEMA"S-T" AUTHORIZATION WANG

定义模式实际上定义了一个命名空间,在这个空间中可以进一步定 义该模式包含的数
据库对象,例如基本表、视图、索引等。

 

目前,在CREATE SCHEMA中可以接受CREATE TABLE, CREATE VIEW和GRANT
子句。也就是说用户可以在创建模式的同时在这个模式定义中进一步创建基本表、 视图,
定义授权。即
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句> |<视图定义子句>|
<授权定义子句>] ;

例题2.为用户 ZHANG创建一一个 模式TEST,并且在其中定义一个表TAB1。
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);

(2)删除模式

DROP SCHEMA <模式名>;

其中CASCADE和RESTRICT两者必选其一。选择了CASCADE (级联),表示在删除模
式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT (限制),表示如果该
模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当
该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。
例题3. DROP SCHEMA ZHANG CASCADE;
该语句删除了模式ZHANG,同时,该模式中已经定义的表TAB1也被删除了。

Ⅱ基本表的定义、删除与修改

(1)定义基本表


SQL语言使用CREATE TABLE语句定义基本表,其基本格式如下:
CREATE TABLE <表名> (<列名><数据类型> [列级完整性约束条件]
[,<列名><数据类型> [列级完整性约束条件]]

...
[,<表级完整性约束条件>]) ; 

例1.建立学生选课表SC。
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/*表级完整性约束条件,Sno 是外码,被参照表是Student*/a我也你每个
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);

(2)修改基本表

一般格式为:

ALTER TABLE <表名>
[ADD [COLUMN] <新列名><数据类型> [完整性约束]]
[ADD <表级完整性约束> ]
[DROP [COLUMN] <列名> [CASCADEI RESTRICT]]
[DROP CONSTRAINT<完整性约束名> [RESTRICT | CASCADE ]]
[ALTER COLUMN <列名><数据类型>] ;
 

[例1]向Student 表增加“入学时间”列,其数据类型为日期型。ATogr
ALTER TABLE Student ADD S_entrance DATE;
不论基本表中原来是否已有数据,新增加的列一律为空值。
[例2]将年龄的数据类型由字符型 (假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例3]增加课程名称必须取唯值的约束 条件。
ALTER TABLE Course ADD UNIQUE(Cname);
5.删除基本表
当某个基本表不再需要时,可以使用DROP TABLE语句删除它。其一般格式为:
DROP TABLE <表名> [ RESTRICT|CASCADE] ;
[例4]删除Student表。
DROP TABLE Student CASCADE;
基本表定义一旦被删除,不仅表中的数据和此表的定义将被删除,而且此表上建立的
索引、触发器等对象一般也都将被删除。有的关系数据库管理系统还会同时删除在此表上
建立的视图。如果欲删除的基本表被其他基本表所引用,则这些表也可能被删除。例如SC
 

4.数据查询

例1 查询至少选修了学生181002选修的全部课程的学生号码

SELECT SITINCT Sno

FROM SC SCX

WHERE NOT EXISTS

             (SELECT *

               FROM SC SCY

                WHERE SCY.Sno='181002' AND

                               NOT EXISTS

                               (SELECT *

                                  FROM SC SCZ

                                   WHERE SCZ.Sno=SCX.Sno AND 

                                   SCZ.Cno=SCY.Cno));

5.数据更新

①插入数据

(1)插入元组

[例1]将一个新学生元组(学号: 201215128, 姓名:陈冬,性别:男,所在系:IS, 年龄: 18岁)插入到Student表中。
INSERT
INTO Student (Sno,Sname,Ssex ,Sdept,Sage)
VALUES (201215128",陈冬,'男,'IS', 18);
在INTO子句中指出了表名Student,并指出了新增加的元组在哪些属性上要赋值,属
性的顺序可以与CREATE TABLE中的顺序不一样。VALUES子句对新元组的各属性赋值,
字符串常数要用单引号(英文符号)括起来。
(2)插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件(如3.4.3小节所述,
也可以嵌套在INSERT语句中用以生成要插入的批量数据。
插入子查询结果的INSERT语句格式为
INSERT
INTO<表名> [(<属性列1> [,<属性列2>..] ) 
子查询;
[例2]对每一个系,求学生的平均年龄,并把结果存入数据库。
首先在数据库中建立一个新表, 其中一列存放系名, 另一列存放相应的学生平均年龄。
CREATE TABLE Dept age
(Sdept CHAR(15)
Avg age SMALLINT);

然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。
INSERT
INTO Dept age(Sdept,Avg. age)
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;

②修改数据
修改操作又称为更新操作,其语句的一般格式为51815102代辽学城地 Latclel
UPDATE <表名>
SET<列名>=<表达式> [,<列名>=<表达式>] ...
[WHERE <条件>] ;
其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句给出<表达式>的值
用于取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。
1).修改某一个元组的值
[例1]将 学生201215121的年龄改为22岁。
UPDATE Student
SET Sage=22
WHERE Sno=' 201215121 ;
2).修改多个元组的值
[例2]将所有 学生的年龄增加1岁。
UPDATE Student
SET Sage=Sage+1;
3).带子查询的修改语句
子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。
[例3]将计算机科学 系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE Sno IN
( SELETE Sno
FROM Student
WHERE Sdept= 'CS' );
③删除数据
删除语句的一般格式为
DELETE
FROM <表名>
[WHERE <条件>] ;
DELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略
WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,DELETE语
句删除的是表中的数据,而不是关于表的定义。
1).删除某一个元组的值
[例1]删除学 号为201215128的学生记录。现
DELETE
FROM Student
WHERE Sno= '201215128';
2)删除多个元组的值
[例1]删除所有 的学生选课记录。
DELETE
FROM SC;
这条DELETE语句将使SC成为空表,它删除了SC的所有元组。
3).带子查询的删除语句
子查询同样也可以嵌套在DELETE语句中,用以构造执行删除操作的条件。
[例2]删除 计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE Sno IN
( SELETE Sno
FROM Student
WHERE Sdept= 'CS' );
 

你可能感兴趣的:(数据库笔记)