中级 SQL

3.1 连接表达式

SQL 提供了自然连接以外的连接运算形式,包括能够指定显示的连接谓词,能够在结果中包含被自然连接排除在外的元组。

3.1.1 连接条件

SQL 支持可以指定任意的连接条件的连接,on 条件允许在参与连接的关系上设置通用的谓词。该谓词的写法与 where 子句谓词类似,只不过使用的是 on,与 using 条件一样,on 条件出现在连接表达式的末尾。形式如下:

select A1, A2, ..., An
from r join s on P;

3.1.2 外连接

外连接运算通过在结果中创建包含空值的元组的方式,保留了那些在自然连接中丢失的元组。有三种形式的外连接:

  • 左外连接只保留出现在左外连接运算之前(左边)的关系中的元组。
  • 右外连接只保留出现在右外连接运算之后(右边)的关系中的元组。
  • 全外连接保留出现在两个关系中的元组。

此前的不保留未匹配元组的连接运算被称作内连接运算。

右外连接左外连接是对称的,全外连接是左外连接与右外连接类型的组合。

onwhere 在外连接中的表现是不同的,原因是外连接只为那些对相应内连接结果没有贡献的元组补上空值并加入结果。on 条件是外连接声明的一部分,但 where 子句是对谓词中的属性值比较条件逐一进行确认,若不符合则抛弃。

3.1.3 连接类型和条件

SQL 中把常规连接称作内连接。关键词 inner 对应内连接。当 join 子句中没有使用 outer 前缀。默认的连接类型是 inner join

3.2 视图

SQL 允许通过查询来定义 “虚关系”,它在概念上包含查询的结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过执行查询被计算出来。任何像这种不是逻辑模型的一部分,但作为虚关系对用户可见的关系称为视图

3.2.1 视图定义

SQL 中用 create view 命令定义视图。为了定义视图,必须给视图一个名称,并且必须提供计算视图的查询。形式如下:

create view v as
<query expression>;

当视图关系被访问时,其中的元组是通过计算查询结果而被创建出来的。从而,视图关系是爱需要的时候才被创建的。

3.2.2 物化视图

  • 特定数据库系统允许存储视图关系,但是其保证:如果用于定义视图的实际关系改变,视图也跟着修改。这样的视图被称为物化视图
  • 保持物化视图一直在最新状态的过程称为物化视图维护,或者通常简称视图维护。当构成视图定义的任何关系被更新时,可以马上进行视图维护。

3.2.3 视图更新

一般来说,如果定义视图的查询对下列条件都能满足,称这样的 SQL 视图是可更新的(即视图上可以执行插入、删除或者更新):

  • from 子句中只有一个数据库关系。
  • select 子句中只包含关系的属性名,不包含任何表达式、聚集或 distinct 声明。
  • 任何没有出现在 select 子句中的属性可以取空值;即这些属性上没有 not null 约束,也不构成主码的一部分。
  • 查询中不含有 group byhaving 子句。

若尝试向视图插入不满足视图所要求的选择条件的元组,这个元组可以被插入到对应关系中,但不会出现在视图中,在默认情况下,SQL 允许执行上述更新。但是可以通过在视图定义的末尾包含 with check option 子句的方式来定义视图。这样如果向视图中插入一条不满足视图的 where 子句条件的元组,数据库系统将拒绝该插入操作。

3.3 事务

事物由查询和更新语句的序列组成。SQL 标准规定当一条 SQL 语句被执行,就隐式地开始了一个事务。下列 SQL 语句之一会结束一个事务:

  • Commit work:提交当前事务,也就是将该事务所做的更新在数据库中持久保存。在事务被提交后,一个新的事务自动开始。
  • Rollback work:回滚当前事务,即撤销该事务中所有 SQL 语句对数据库的更新。这样,数据库就恢复到执行该事务第一条语句之前的状态。
  • 关键词 work 在两条语句中都是可选的。

一个事务或者在完成所有步骤后提交其行为,或者在不能完成其所有动作的情况下回滚其所有动作,通过这种方式数据库提供了对事务具有原子性的抽象。

3.4 完整性约束

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。因此,完整性约束防止的是对数据的意外破坏。

3.4.1 not null 约束

not null 声明禁止在该属性上插入空值。

3.4.2 unique 约束

SQL 支持如下的完整性约束:

unique (A1, A2, ..., An)

unique 声明指出属性 A1, A2, …, An 形成了一个超码,即在关系中没有两个元组能在所有列出的属性上取值相同,然而唯一属性可以为 null ,除非它们被显式的声明为 not null

3.4.3 check 子句

当应用于关系声明时,check (P) 子句指定一个谓词 P,关系中的每一个元组都必须满足谓词 P。check 子句允许以有力的方式对属性域加以限制。

3.4.4 参照完整性约束

。。。待更

SQL语言快速入门之二   创建表格 SQL语言的create table语句被用来建立新的数据库表格。Create table语句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项: create table tablename (column1 data type [constraint], column2 data type [constraint], column3 data type [constraint]); 举例如下: create table employee (firstname varchar(15), lastname varchar(20), age number(3), address varchar(30), city varchar(20)); 简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。 使用SQL语句创建的数据库表格和表格列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言的保留关键词,如select, create, insert等,作为表格或列的名称。 数据类型用来设定某一个具体列数据的类型。例如,在姓名列只能采用varchar或char的数据类型,而不能使用number的数据类型。 SQL语言较为常用的数据类型为: char(size):固定长度字符串,其括号的size用来设定字符串的最大长度。Char类型的最大长度为255字节。 varchar(size):可变长度字符串,最大长度由size设定。 number(size):数字类型,其数字的最大位数由size设定。 Date:日期类型。 number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。 最后,在创建新表格时需要注意的一点就是表格列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not null和primary key等。Not null用来规定表格某一列的值不能为空。Primary key则为表格的所有记录规定了唯一的标识符。 向表格插入数据 SQL语言使用insert语句向数据库表格插入或添加新的数据行。Insert语句的使用格式如下: insert into tablename (first_column,...last_column) values (first_value,...last_value); 例如: insert into employee (firstname, lastname, age, address, city) values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”); 简单来说,当向数据库表格添加新记录时,在关键词insert into后面输入所要添加的表格名称,然后在括号列出将要添加新值的列的名称。最后,在关键词values的后面按照前面输入的列的顺序对应的输入所有要添加的记录值。 更新记录 SQL语言使用update语句更新或修改满足规定条件的现有记录。Update语句的格式为: update tablename set columnname = newvalue [, nextcolumn = newvalue2...] where columnname OPERATOR value [and|or column OPERATOR value]; 例如: update employee set age = age+1 where first_name= ‘Mary’and last_name= ‘Williams’; 使用update语句时,关键一点就是要设定好用于进行判断的where条件从句。 删除记录 SQL语言使用delete语句删除数据库表格的行或记录。Delete语句的格式为: delete from tablename where columnname OPERATOR value [and|or column OPERATOR value]; 例如: delete from employee where lastname = May; 简单来说,当需要删除某一行或某个记录时,在delete from关键词之后输入表格名称,然后在where从句设定删除记录的判断条件。注意,如果用户在使用delete语句时不设定where从句,则表格的所有记录将全部被删除。 删除数据库表格 在SQL语言使用drop table命令删除某个表格以及该表格的所有记录。Drop table命令的使用格式为: drop table tablename; 例如: drop table employee; 如果用户希望将某个数据库表格完全删除,只需要在drop table命令后输入希望删除的表格名称即可。Drop table命令的作用与删除表格的所有记录不同。删除表格的全部记录之后,该表格仍然存在,而且表格列的信息不会改变。而使用drop table命令则会将整个数据库表格的所有信息全部删除。 以上,我们对SQL语言主要的命令和语句进行了较为详细的介绍。应该说SQL语句的语法结构和风格还是相当简单和直观的,只要用户结合实践多加练习,一定会在短期内迅速掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值