第三章 关系数据库标准语言SQL
2017-11-17 14:41
591 查看
内容一览
概述
结构化查询语言(Structured Query Language,SQL)是关系数据库标准语言。SQL的特点
综合统一:SQL集合数据定义、数据操纵、数据控制于一体,语言风格统一。
高度非过程化
面向集合的操作方式
一种语法多种使用方法:SQL是独立语言,也是嵌入式语言,可以嵌入到多种高级语言如JAVA、C、C++中去。
数据定义
模式定义模式
create schema <模式名> authorization <用户名>
删除模式
drop shcema <模式名> <CASCADE | RESTRICT>
CASCADE 是级联,若删除模式,则把该模式下的所有数据库对象删除,RESTRICT表示限制,若该模式下定义了数据库对象(表、视图)则拒绝删除。
基本表
定义基本表
create table <表名> (<列名> <数据类型>[ 列级完整性约束],....);
修改基本表
alter table <表名> [add [column] <新列名> <数据类型> [完整性约束]] [add <表级完整性约束>] [drop [column] <列名> [CASCADE | RESTRICT] ] [drop constraint<完整性约束名> [CASCADE | RESTRICT] ] [alter column <列名> <数据类型>]
删除基本表
drop table <表名> [RESTRICT | CASCADE]
RESTRICT表示删除是有限制的,要删除的表不能被其他表所引用(如外键),不能有视图、触发器、存储过程、函数等。CASCADE级联表示删除时把相关依赖全部删除。
索引
什么时候需要建立索引?
答:当表的数据量比较大时,查询耗时较长,建立索引可以加快查询,主键是默认建立索引的。
建立索引
create index <索引名> on <表名> (<列名> [次序],<列名> [次序] ....);
次序可选ASC,DESC
修改索引
alter index <旧索引名> rename to <新索引名>
删除索引
drop index <索引名>
数据字典
数据字典是关系数据库管理系统中的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义等。在执行SQL语句的数据定义语句时,实际上就是在更新数据字典中的相应信息。
数据查询
数据查询语句一般格式select [all | distinct] <目标列表达式> [,<目标列表达式>] ... from <表名或视图名> [,<表名或视图名>] | [(< select 语句>) as <别名>] where <条件表达式> [group by <列名> [HAVING 表达式]] [order by <列名> [ASC | DESC]]
单表查询
select * from table_name , “*”表示所以列,也可选择部分列
连接查询
select A.a,B.b from A,B where A.id = B.id
嵌套查询
select A.nam from A where A.id in (select B.id from B where B.id = 1)
集合查询
集合操作包括 union( 并 ) 、intersect(交)、 except (差)
select * from A where A.ID = 1 union select * from B where B.ID = 2
上面的union可以换成intersect 。
union可以自动去掉重复元组,若要保留重复元组,使用union all
基于派生表的查询
派生表是查询语句中临时定义的表,SQL语句执行完后,该定义即被删除,如
select id,name from A , (select id,name from B) as tmp where A.id = tmp.id
数据更新
插入数据insert into <表名> [<属性列1> [,属性列2] ...] values (<常量1> [,常量2] ...)
修改数据
update <表名> set <列名> = <表达式> [,<列名>=<表达式>] ... [wherec<条件>];
若无条件修改所有记录
删除数据
delete from <表名> [where <条件>];
若没有条件删除索引记录
空值
is null is not null
视图
建立视图create view <视图名> [<列名> [...]] as <子查询> [with check option]
with check option表示对视图进行更新、插入、删除时要满足视图中定义的谓语条件
例:
create view is_student as select sno,sname,sage from student where sdept = 'IS'
若上面的视图定义中加上 “with check option” , 那么使用 update is_student set sage = sage+1 where sage > 10 , 默认会把条件 sdept = ‘IS’也带上 。
查询视图
select * from is_student
视图的查询与基本表查询一致
更新视图
视图的更新最终转化为对基本表的更新,但是视图的更新有诸多限制,如DB2规定:
视图由两个基本表导出的话,此视图不允许更新。
视图字段来自表达式或常熟,则不允许对视图执行插入和update。
视图中有字段来自聚集函数,不允许更新。
视图定义中有group by 或distinct , 不允许更新。
删除视图
drop view <视图名> [CASCADE]
基本表删除后,由该基本表导出的视图还存在数据字典中,但是视图已经不能再使用了。
视图的作用
既然使用视图在更新的时候很多限制,很可能出现问题,那么为什么还要使用视图呢?因为视图由以下的优点:
视图可以简化用户操作,不必关心视图是哪些表连接查询而得。
对重构数据库提供了一定程度的逻辑独立:有时候数据库的逻辑结构发生改变,使用视图可以让应用程序不发生改变,只要视图导出的字段还存在于对于的基本表中。
视图可以对机密数据提供保护:视图可以将一张表的不敏感字段数据选择查询出来给用户,而选择性的将敏感字段数据屏蔽,视图不查询敏感字段,这样就起到了隔离用户的作用。
适当使用视图可以让查询表达更清晰。
相关文章推荐
- 数据库 - 关系数据库标准语言SQL
- 数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)
- 第3章 关系数据库标准语言SQL(数据库系统概论)
- [网络问题,截图以后再传]本实验是设计性实验。目的在于使用关系数据库标准语言SQL,掌握视图和索引的操作。
- 3-1关系数据库标准语言SQL
- 对关系数据库标准语言SQL的简单认识
- 文章标题关系数据库标准语言SQL-2
- 关系数据库标准语言SQL的基本问答
- 【数据库系统概论】-关系数据库标准语言SQL(2)
- 数据库复习-5.关系数据库标准语言SQL
- 关系数据库标准语言SQL
- 关系数据库标准语言SQL
- 关系数据库标准语言SQL(二)
- 实验一 关系数据库标准语言SQL
- 关系数据库标准语言SQL
- 【数据库系统概论】-关系数据库标准语言SQL(1)
- 第3章 关系数据库标准语言SQL 练习
- 【数据库系统概论】-关系数据库标准语言SQL(3)
- 关系数据库标准语言SQL基础2
- 数据库(三)关系数据库标准语言SQL(1)