SQL 是一种基于关系代数和关系演算的
非过程化语言
(它指定用户对数据进行哪些操作,而不指定如何去操作数据,即非过程化)。
从SQL功能来看,有5种语言子集:
(1)DDL
( Data Definition Language,数据定义语言
):定义、修改、删除数据模式,通常包括 CREATE TABLE、 ALTER TABLE、 DROP TABLE等操作。
(2)DQL
( Data Query Language,数据查询语言
):查询数据。DQL指的是以SELECT命令开始的SQL语句,对数据表中的数据进行投影、选择、连接等操作
(3)DML
(Data Manipulation Language数据操作语言
):插入、删除、更新数据,主要包括 INSERT、 DELETE、 UPDATE等操作
(4)DCL
( Data Control Language,数据控制语言
):控制用户对数据的访问权限,主要包括 GRANT、 REVOKE等操作(5)
DSDL
(数据存储描述语言
):用来定义内模式。
传统的程序设计语言和非关系数据模型的语言都是
面向记录
的:一次处理一个记录。SQL采用
集合操作方式
,其运算对象、运算结果均是元组的集合
。不仅查询的对象和查询的结果是元组的集合,而且插入、删除和修改操作的对象也可以是元组的集合。
数据类型主要用在创建基本表(关系)的时候,指定基本表的每个列(属性)的类型。这些数据类型主要分为
字符串类型
、数值类型
、时间/日期类型
等。
名称 | 概述 |
---|---|
CHAR(n) | 定长字符串类型 ,n指定了定长字符串的长度。如果输入的字符串长度小于n,则在字符串的尾部用空格补齐到n个字符;如果输入的字符串长度大于n,则会从右边自动截断,到仅剩n个字符为止 |
VARCHAR(n) | 变长字符串类型 ,n指定了字符串的最大长度,输入的字符串不会有补齐操作,以变长的形式输出 |
数值类型又可以分成精确数值类型
和近似数值类型
,精确数据类型包括一系列的整数类型(整型)
,而近似数值类型则包括浮点类型
等(需要注意的是,不同的数据库对于数据类型的支持会有细微的差别)
名称 | 概述 |
---|---|
SMALLINT | 整型,长度是2字节,取值范围是[-32768,32767] |
INTERGER | 整型,长度是4字节,取值范围是[-2147483648,2147483647] |
BIGINT | 整型,长度是8字节,取值范围在-263~(263)-1,即[-9223372036854775808,9223372036854775807] |
FLOAT§ | 浮点类型,其中p代表的是浮点类型中小数点前后的总位数之和 |
REAL | 单精度浮点类型,长度为4字节,取值范围是[-3.40E+38 , 3.40E+38] |
NUMERIC(p,s) | p为小数点前后的总位数之和;s为小数点后的位数;p和s的取值范围取决于不同的数据库的实现 |
DECIMAL(p,s) | 和 NUMERIC类似,但数值精度不受p和s的限制,p和s决定了DECIMAL精度的下限 |
DOUBLE PRECISION | 双精度类型,长度为8字节,取值范围是[-1.79E+308,1.79E+308] |
名称 | 概述 |
---|---|
DATE | 日期类型,由年、月、日组成,形如yyyy-mm-dd |
TIME§ | 时间类型,由时、分、秒组成,形如hh:mm:ss |
TIMESTAMP§ | 时间类型,DATE和TIME的结合,由年、月、日、时、分、秒组成,形如yyyy-mm-dd hh:mm:ss,如果指定了精度p,则会保存秒的小数部分 |
INTERVAL | 时间间隔 |
SQL允许对DATE、TIME和INTERVAL类型的值进行计算。例如:x、y都是DTAE类型,则x—y为INTERVAL类型。
名称 | 概述 |
---|---|
BLOB/CLOB | 大对象,BLOB中保存的是二进制文件。CLOB中保存的是文本文件 |
BOOLEAN | 布尔类型,可以取值为TRUE、FALSE、UNKNOWN,通常UNKNOWN和NULL值等价 |
DBMS为关系的命名提供了一个三级层次结构。顶层由目录(catalog)
组成,每个目录中包含一些模式(schema)
,SQL对象
(关系、视图等)都包含在模式内。一个关系由目录名、模式名和关系名唯一确定。
【例】
Catalog.Supply-schema.Suppliers
确定了Catalog目录下的Supply-schema模式中的Suppliers关系。如果关系在默认目录的默认模式中,则可以省略目录名和模式名前缀。
用户连接到数据库时,系统会为该链接建立一个默认的目录和模式。目录的创建、设置和删除依赖于具体实现,不包含在SQL标椎中。但可以用CREATE SCHEMA和DROP SCHEMA创建与删除模式。
语句格式:
CREATE SCHEMA <模式名> [<模式元素>...]
或
CREATE SCHEMA[<模式名>] AUTHORIZATION <用户名> [<模式元素>]
第二种与第一种的区别在于他创建的模式授予<用户名>指定的用户,当<模式名>缺省时,用<用户名>作为模式名。
语句格式:
DROP SCHEMA <模式名> CASCADE|RESTRICT
其中,CASCADE和RESTRICT两者必须选择其一。CASCDE(级联)
删除模式名指定的模式,并删除该模式中所有的数据库对象;RESTRICT(限制)
,仅当该模式不包含任何数据库对象时才能删除,否则拒绝删除。
创建一个基本表要对基本表明明,定义表的每个列,并定义表的完整性约束。
基本格式:
CREATE TABLE <表名>
(
<列名><数据类型>[DEFAULT <缺省值>][列级约束定义],
...,
[<表级约束定义>, ... ,<表级约束定义>]
);
列级约束定义:和该列相关的完整性约束;
表级约束定义:和一个列或多个列同时相关的完整性约束。
缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。
[CONSTRAINT <约束名>] <列约束>
常见的列约束:
[CONSTRAINT <约束名>] <表约束>
常见的表约束:
主码
。候选码
。外码
,<参照触发动作>说明违反参照完整性
时采取的措施。其中外表要提前声明,属性A1,...,Ak要与<外表主码>数据类型一致。
CREATE TABLE Departments
(Dno CHAR(4) PRIMARY KEY,
Dname CHAR(10),
Dheadno CHAR(7)
);
CREATE TABLE Teachers
(Tno CHAR(7) PRIMARY KEY,
Tname CHAR(10) NOT NULL,
Sex CHAR(2) CHEAX (Sex='男' OR Sex='女'),
Birthday DATA,
Title CHAR(6),
Dno CHAR(4),
FOREIGE KEY (Dno) REFERENCES Departments (Dno)
);
ALTER TABLE <表名>
[ADD [COLUMN] <列名> <数据类型> [列级约束定义]]
[ALTER [COLUMN] <列名> {
SET DEFAULT <缺省值> | DROP DEFAULT}]
[DROP [COLUMN] <列名> {
CASCADE | RESTRICT}]
[ADD <表约束定义>]
[DROP CONSTRAINT <约束名> {
CASCADE | RESTRICT}]
解释:
用于向基本表添加新列,要注意的是新添加的列不允许用NOT NULL说明。
【举例】在Courses中增加一个新列 Pno:
ALTER TABLE Courses ADD Pno CHAR (5);
用于修改列名,添加缺省值或删除缺省值。
【举例】在Students 的Sex列设置缺省值 “女 ”可以减少大约一半学生性别的输入:
ALTER TABLE Students ALTER Sex SET DEFAULT ‘女’;
删除已存在的列。
【举例】删除Courses中的 Pno列:
ALTER TABLE Courses DROP Pno;
添加表约束。
【举例】在Students中添加表约束
ALTER TABLE Students ADD FOREIGE KEY (Dno) REFERENCES Departments (Dno);
删除表约束,没有命名的表约束不能删除。
DROP TABLE <表名> {
CASCADE | RESTRICT}
【举例】删除SC表
DROP TABLE SC CASCADE;
SC和依赖于SC的对象都会被彻底删除,以及在该表上建立的视图、索引,且这种删除是
不可恢复
的。
索引类似于书的目录,通常被分为唯一性索引
(每个索引值对应一个数据记录行)和非唯一性索引
(聚簇索引和非聚簇索引)。
通常,DBMS自动为主码建立索引,其他索引用CREATE INDEX语句创建。
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>],...,<列名> [<次序>])
聚簇索引
,缺省时为非聚簇索引
;
聚簇索引比非聚簇索引查询效率快,但维护代价大。一个基本表最多只能建一个聚簇索引。
DROP INDEX <索引名>