【数据库系统原理】SQL语言

SQL语言

在这里插入图片描述

一、SQL概述

SQL语言最早称为Sequel,是Boyce和Chamberlin在1974年提出
的。1975-1979年IBM公司的San Jose研究实验室研制的关系数据
库管理系统原型系统System R实现了这种语言。此后,Sequel不
断发展,并更名为SQL

1.SQL的功能

  • SQL的数据定义语言(DDL)提供了模式定义、修改和删除,基本表定
    义、修改和删除、域定义修改和删除、 视图的定义和删除
  • SQL的数据操纵语言(DML)提供了数据查询子语言
  • DML还提供数据更新(数据插入、删除和修改)语句,允许用户更新数
  • SQL DML允许用户对视图进行查询和受限的更新操作
  • SQL的数据控制语言(DCL)定义用户对数据对象的访问权限和审计

2.SQL的特点

  • 集多种数据库语言于一体

    • SQL语言集数据定义语言(DDL),数据操纵语言(DML), 数据控制语言(DCL)功能于一体
    • 可以独立完成数据管理的核心操作
    • 用户数据库投入运行后,可根据需要随时逐步修改模式,不影 响数据的运行
    • 数据操作符统一,查找、插入、删除、更新等只需一种操作符
  • 高度非过程化

    • 非关系数据模型的数据操纵语言“面向过程”,必须使用类 似于指针的机制,指定存取路径
    • SQL只要提出“做什么”,无须了解存取路径
    • 系统将考察多种执行方案,选择并运行一个最优的执行方案 得到结果
  • 面向集合的操作方式

    • 非关系数据模型采用面向记录的操作方式,操作对象是一条记录
    • SQL采用集合操作方式
      • 操作对象、查找结果可以是元组的集合
      • 一次插入、删除、更新操作的对象可以是元组的集合
  • 一种语法两种使用方式

    • SQL是独立的语言
    • 能够独立地用于联机交互的使用方式
    • SQL又是嵌入式语言
    • SQL能够嵌入到高级语言(例如C,C++,Java)程序中,供程序员设计程序时使用
  • 功能强大,语言简洁

    • SQL是一种完整地数据库语言,其功能涵盖数据定义、数据 操纵、数据控制等数据管理的主要需求
    • 但SQL语言相对比较简洁,其核心动词只有9个 CREATE,ALTER,DROP,SELECT,INSERT,DELETE,UPDATE,GRANT,REVOKE
    • SQL 语言的语法简单,与英语口语的风格类似,易学易用

二、SQL的数据类型

  • CHAR(n):定长字符串,长度n由用户指定。省略n时,长度为1,CHAR的全称是CHARACTER

  • VARCHAR(n):变长字符串,最大长度n由用户指定,VARCHAR的全称是CHARACTER VARYING定长和变长字符串的差别主要表现在前者需要固定长度的空间,而后者占用的空间在最大长度范围内是可改变的

  • BIT(n):定长二进位串,长度n由用户指定。省略n时,长度为1

  • BIT VARYING(n):变长二进位串,最大长度n由用户指定

  • INT:整数,其值域依赖于具体实现。INT的全称是INTEGER

  • SMALLINT:小整数,其值域依赖于具体实现,但小于INT的值域

  • DEC(p, d):p位有效数字的定点数,其中小数点右边占d位。DEC的全称是DECIMAL

  • FLOAT(n):精度至少为n位数字的浮点数,其值域依赖于实现

  • REAL:实数,精度依赖于实现

  • DOUBLE PRECISION:双精度实数,精度依赖于实现,但精度比REAL高  DATE:日期,包括年、月、日,格式为YYYY-MM-DD

  • TIME:时间,包括时、分、秒,格式为HH:MM:SS。TIME(n)可以表示比秒更小的单位,秒后取n位  TIMESTAMP:时间戳,是DATE和TIME的结合

  • INTERVAL:时间间隔。SQL允许对DATE、TIME和INTERVAL类型的值进行计算

三、表的定义、修改和删除

1.创建表

CREATE TABLE <表名> 
(<列名><数据类型> [DEFAULT <缺省值>] [列级约束定义],
<列名><数据类型> [DEFAULT <缺省值>] [列级约束定义],, 
[<表级约束定义>,, <表级约束定义>])
  • 可选短语“DEFAULT <缺省值>”定义列上的缺省值,<缺省值>是<类型>中的一个特定值或空值(NULL)

  • 列级约束定义和该列相关的完整性约束

    [CONSTRAINT <约束名>] <列约束>
    
    • NOT NULL:不允许该列取空值
    • PRIMARY KEY:指明该列是主码
    • UNIQUE:该列上的值必须惟一
    • CHECK (<条件>):指明该列的值必须满足的条件,其中<条件>是一个涉及该列的布尔表达式
  • 表级约束定义和一个列或者多个列同时相关的完整性约束

    [CONSTRAINT <约束名>] 
    <表约束>
    
    • PRIMARY KEY (A1, …, Ak):说明属性列A1, …, Ak构成该关系的主码

    • UNIQUE (A1, …, Ak):说明属性列A1, …, Ak上的值必须惟一,这相当于说明A1, …, Ak构成该关系的候选码

    • CHECK (<条件>):说明该表上的一个完整性约束条件

    • FOREIGN KEY (A1, …, Ak) REFERENCES <外表名> (<外表主码>) [<参照触发动作>]

2.修改表

ALTER TABLE <表名> [ADD [COLUMN] <列名><数据类型>[列级约束定义]]
[ALTER [COLUMN] <列名> {SET DEFAULT <缺省值> | 
DROP DEFAULT}]
[DROP [ COLUMN ] <列名> {CASCADE | RESTRICT}]
[ADD <表约束定义>]
[DROP CONSTRAINT <约束名>{CASCADE | RESTRICT}]

3.删除表

DROP TABLE <表名> {CASCADERESTRICT}

四、索引的创建和删除

1.索引的创建

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON 
<表名> (<列名> [<次序>]{,<列名> [<次序>]})
  • <索引名>为建立的索引命名

  • <表名>是要建立索引的基本表的名字

  • 索引可以建在该表的一列或多列上,各列名间用逗号分隔;每个<列名>后可以用<次序>指定索引值的排列次序

  • 次序可以是ASC(升序)和DESC(降序),缺省值为ASC

  • UNIQUE 表示该索引为惟一性索引UNIQUE缺省时,创建的索引为非唯一性
    索引

  • CLUSTER表示建立的索引是聚簇索引,缺省时为非聚簇索引

  • 创建索引不仅创建索引结构,而且将索引的定义存储在数据字典中

2.索引删除

DROP INDEX <索引名>

删除索引时,系统将删除索引结构,并同时从数据字典中删去有关该索引的定义

五、SELECT语句

SELECT语句的一般形式如下:

SELECT [ALLDISTINCT] <选择序列>FROM <表引用>,, <表引用> 
[WHERE <查询条件>]
[GROUP BY <分组列> {,<分组列>} [HAVING <分组选择条件>]]
[ORDER BY <排序列> [ASCDESC] {, <排序列> [ASCDESC]}]

六、数据更新

1.插入

向基本表插入单个元组

INSERT INTO T [(A1, ..., Ak) ]VALUES (c1,, ck)

将查询的结果(多个元组)插入基本表

INSERT INTO T [(A1, ..., Ak) ]
<查询表达式>

2.删除

DELETE FROM T
[ WHERE <删除条件> ]

3.修改

UPDATE T
SET A1 = e1,, Ak = ek 
[WHERE <修改条件> ]

七、视图的创建和删除

1.视图的创建

CREATE VIEW <视图名> [ (<列名> ,, <列名>)] 
AS <查询表达式> 
[WITH CHECK OPTION]
  • <视图名>对定义的视图命名
  • <列名>为<查询表达式>结果的诸列命名
  • <查询表达式>通常是一个SELECT查询
  • WITH CHECK OPTION表示该视图是可更新的,并且对视图进行更
    新时要满足<查询表达式>的查询条件

2.视图删除

DROP VIEW <视图名> [ CASCADE | RESTRICT ]
  • CASCADE或RESTRICT是可选的,缺省时为RESTRICT

八、断言与触发器

1.断言

断言(Assertion)是一种命名约束,它表达了数据库状态必须满足的逻辑条件

SQL创建断言的语句具有如下格式:

CREATE ASSERTION <断言名> 
CHECK (<条件>) [<约束性质> ]

可以用如下形式的语句直接删除断言:

DROP ASSERTION <断言名>

2.触发器

创建触发器语句的一般格式如下:

CREATE TRIGGER <触发器名> <触发时间> <触发事件> ON <表名> 
[REFERENCING </新值别名>,, </新值别名>] 
[FOR EACH {ROW | STATEMENT}]
[WHEN (<触发条件>)] <被触发的SQL语句>
  • <触发时间>可以是 BEFORE:事件前, AFTER:事件后

  • <触发事件>可以是T上的INSERT、DELETE、UPDATE或UPDATE OF <触发列>, …, <触发列>  REFERENCING子句创建一些过渡变量用来存放表T和表T的行更新前的旧值和更新后的新值。

  • <旧/新值别名>可以是如下形式之一

    • OLD/NEW [ROW] [AS] <变量>:创建行过渡变量<变量>存放表T的行更新前/后的值
    • OLD/NEW TABLE [AS] <变量>:创建表过渡变量<变量>存放表T更新前/后的值
  • FOR EACH ROW 定义行级触发器,而FOR EACH STATEMENT定义语句级触发器缺省时为语句级触发器

  • WHEN子句说明触发条件,缺省时无条件触发。<触发条件>是一个任意布尔表达式

  • <被触发的SQL语句>是触发动作体,具有如下形式:

    BEGIN ATOMIC
    <可执行的SQL语句>;
    ...
    END
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BkbK-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值