数据库 关系数据库标准语言SQL(一)

数据库 关系数据库标准语言SQL(一)

一、SQL的特点

  1. 功能综合且风格统一

    SQL语言集数据定义语言、数据操纵语言和数据控制语言的功能于一体,语言风格统一。

  2. 数据操纵高度非过程化

  3. 面向集合的操作方式

  4. 以统一的语法结构提供多种使用方式

  5. 语言简洁且易学易用

\(\text{SQL}\) 功能 动词
数据定义 \(\text{CREATE,\ DROP,\ ALTER}\)
数据查询 \(\text{SELECT}\)
数据操纵 \(\text{INSERT,\ UPDATE,\ DELETE}\)
数据控制 \(\text{GRANT,\ REVOKE}\)

二、数据定义

(1)数据的定义和删除

1. 定义模式

CREATE SCHEMA [<模式名>] AUTHORIZATION <用户名>;

例1

为用户 WANG 定义一个 “学生选课” 模式 \(S-C-SC\)

CREATE SCHEMA "S-C-SC" AUTHORIZATION WANG;

例2

未指定模式名的模式定义示例。

CREATE SCHEMA AUTHORIZATION WANG;

没有定义指定的 <模式名>,所以 <模式名> 隐含为用户名 "WANG"。

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

例3

为用户 ZHANG 创建一个模式 \(\text{Test}\) ,并且在起重工定义一个表 \(\text{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>;

其中 \(\text{CASCADE}\)\(\text{RESTRICT}\) 必选其一。

\(\text{CASCADE}\)级联,表示在删除模式的同时把该模式中所有数据库对象全部删除。

\(\text{RESTRICT}\)限制,表示如果定义了数据库对象(如表、视图等),则删除语句拒绝执行;只有什么对象都没定义才执行。

例4

删除 例3 中建立的模式 \(\text{Test}\)

DROP SCHEMA Test CASCADE;

这语句删除了 \(\text{Test}\)也删除了在该模式中定义的表 \(\text{Tab1}\)

(2)基本表的定义、删除与修改

1. 定义基本表

CREATE TABLE <表名> ( <列名> <数据类型> [列级完整性约束]
                   	  [, <列名> <数据类型> [列级完整性约束]]
                   	  ...
					[, <表级完整性约束>]);

建表的同时,通常可以定义与该表相关的完整性约束,则会写完整性约束被存入系统的数据字典中。

以 “学生选课” 数据库为例讲解 \(\text{SQL}\) 语句。

首先定义 “学生选课” 模式 \(S-C-SC\),该模式包含以下三个表。

“学生” 表:\(\text{Student (}\underline {\text {Sno}}\text{, Sname, Ssex, Sbirthdate, Smajor)}\)

“课程” 表:\(\text {Course (}\underline {\text{Cno}}\text{, Cname, Ccredit, Cpno)}\)

“学生选课” 表:\(\text{SC (} \underline{\text{Sno, Cno}}\text{, Grade, Semester, Teachingclass}\)

关系的主码用下划线表示。

例5

建立一个 “学生” 表

CREATE TABLE Student
( Sno CHAR(8) PRIMARY KEY,	/* 列级完整性约束条件,Sno是主码 */
  Sname VARCHAR(20) UNIQUE, /* Sname取唯一值 */
  Ssex CHAR(6),
  Sbirthdate Date,
  Smajor VARCHAR(40)
);

例6

建立一个 “课程” 表

CREATE TABLE Course
( Cno CHAR(5) PRIMARY KEY,	/* 列级完整性约束条件,Cno是主码 */
  Cname VARCHAR(40) NOT NULL, /* 列级完整性约束条件,Cname不能为空 */
  Ccredit SMALLINT,
  Cpno CHAR(5),
  FOREIGN KEY (Cpno) REFERENCES Course(Cno)
 	/* 表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno */
);

FOREIGN KEY (Cpno) REFERENCES Course(Cno)
表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno

例7

建立 “学生选课” 表

CREATE TABLE SC
( Sno CHAR(8),
  Cno CHAR(5),
  Grade SMALLINT,
  Semester CHAR(5),
  Teachingclass CHAR(8),
  PRIMARY KEY (Sno, Cno),
 		/* 主码由两个属性构成,必须作为表级完整性进行定义 */
  FOREIGN KEY (Sno) REFERENCES Student(Sno),
 		/* 表级完整性约束,Sno是外码,被参照表是Student */
  FOREIGN KEY (Cno) REFERENCES Course(Cno)
		/* 表级完整性约束,Cno是外码,被参照表是Course */
)

PRIMARY KEY (Sno, Cno)
主码由两个属性构成,必须作为表级完整性进行定义
FOREIGN KEY (Sno) REFERENCES Student(Sno)
表级完整性约束,Sno是外码,被参照表是Student
FOREIGN KEY (Cno) REFERENCES Course(Cno)
表级完整性约束,Cno是外码,被参照表是Course

2. 数据类型

这里列几种常见的数据类型。

数据类型 含义
\(\text{CHAR(n), CHARACTER(n)}\) 长度为 \(n\) 的定长字符串
\(\text{VARCHAR(n), CHARACTERVARYING(n)}\) 最大长度为 \(n\) 的变长字符串
\(\text{CLOB}\) 字符串大对象
\(\text{BLOB}\) 二进制大对象
\(\text{INT, INTEGER}\) 整数(4字节)
\(\text{SMALLINT}\) 短整数(2字节)
\(\text{BIGINT}\) 大整数(8字节)
\(\text{NUMERIC(p, d)}\) 定点数,由 \(p\) 位数字组成,小数点后有 \(d\) 位数字
\(\text{DECIMAL(p, d), DEC(p, d)}\) \(\text{NUMERIC(p, d)}\) 类似,但精度不受 \(p\)\(d\) 控制
\(\text{REAL}\) 单精度浮点数
\(\text{DOUBLE PRECISION}\) 双精度浮点数
\(\text{FLOAT(n)}\) 可选精度的浮点数,精度至少为 \(n\) 位数字
\(\text{BOOLEAN}\) 逻辑布尔量
\(\text{DATE}\) 日期,格式为 \(YYYY-MM-DD\)
\(\text{TIME}\) 时间,格式为 \(HH : MM : SS\)
\(\text{TIMESTAMP}\) 时间戳类型
\(\text{INTERVAL}\) 时间间隔类型

3. 修改基本表

ALTER TABLE <表名>
	[ADD[COLUMN] <新列名><数据类型>[完整性约束]]
	[ADD<表级完整性约束>]
	[DROP[COLUMN] <列名>[CASCADE | RESTRICT]]
	[DROP CONSTRAINT <完整性约束名>[CASCADE | RESTRICT]]
	[RENAME COLUMN <列名> TO <新列名>]
	[ALTER COLUMN <列名> TYPE <数据类型>]
  1. $\text{ADD} $ 子句用于增加新列、新的列级完整性约束和新的表级完整性约束
  2. \(\text{DROP COLUMN}\) 子句用于删除表中的列,如果制定了 \(\text{CASCADE}\) 短语,则自动删除引用该列的所有对象。
  3. \(\text{DROP CONSTRAINT}\) 子句用于删除指定的完整性约束
  4. \(\text{RENAME COLUMN}\) 子句用于修改列名
  5. $\text{ALTER COLUMN} $ 子句用于修改列的数据类型

4. 删除基本表

DROP TABLE <表名> [CASCADE | RESTRICT]
posted @ 2025-03-30 23:44  AKgrid  阅读(6)  评论(0)    收藏  举报