3.1 SQL 概述#

3.1.2 特点##

1 综合统一

非关系型语言 的数据语言都分为 DDL Scheme Data Definitin Language, 模式DDL
SubScheme Data Definition Language 子模式DDL, DSDK DML
2 高度非过程话

3 面向集合的操作方式

4 用同一种语法结构提供多种功能

3.3 数据定义

一个管理系统实例可以创建多个 数据库

一个数据库可以有多个模式

一个模式包括多个表和视图等对象

3.3.1 定义模式

模式定义
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
模式删除
drop schema <模式名> cascade|restrict

3.3.2基本表的定义 删除 修改##

1 定义基本表:
create table <表名> (<列名> <数据类型> <列级完整性约束条件>
。。。
[表级完整性约束条件] )

2 数据类型
3 模式与表

1 在表名中显式定义所属的模式名
2 在创建模式的时候定义表
3 设置所属的模式,这样在船舰的时候不必给出模式名

show search_path 显示搜索的默认值 $user,PUBLIC 含义是首先搜索与用户同名的模式名,然后使用public模式
管理员可以是设置搜索路径:
set search_path TO "S-T" ,PUBLIC

4 修改基本表

alter table <表名>
[ADD column <新列名> <数据类型>[完整性约束]]
[add <表级完整性约束>]
[drop column <列名> [cascade|restrict ]
[drop consrtrainit <完整性约束名>[restrict|cascade ]]
[alter column <列名> <数据类型>]

5 删除基本表
drop table <表名> [restrict|cascade]

3.3.3 索引的建立与删除##

1 建立索引
create [unique][cluster] index<索引名>
on <表名> (列名,次序[,列名 ,次序])
unique 表名每一个索引值对应一个唯一的数据记录
cluster 代表聚簇索引

2 修改索引
alter index <旧索引名> rename to <新锁引名>
3 删除索引
drop index< 索引名>

3.4 数据查询

select [all|distinct] <目标列表达式> [,<目标列表达式>] ...
from <表名或视图名> [,<表名或视图名>]
[where <条件表达式>]
[GROUP BY <列名1>[ HAVING<条件表达式<]
[GROUP BY <列名2>[ ASC|DESC]

3.4.1 单表查询##

1 选择表中的若干列
2 选择元组中的若干元组
(1) 使用distinct 消除重复的行
(2)条件表达

4 聚簇函数

3.4.2# 连接查询##

1 等值连接与非等值连接
[<表名1>.]<列名1> <比较运算符> [·<表·名2>]

[<表名1>.]<列名1> between [·<表·名2>] and [<表名3>. 列明> ]

2 自身连接
3 外连接
要以学生为主题进行查询(即使该学生没有选课,仍要有该学生的null 信息 (而不是舍弃)

from student Left outer join sc on (Student.Sn=Sc.Sno)
左外连接列出左边元组的所有信息。

4 多表连接
5 嵌套查询

3.4.3 嵌套查询##

需要指出 子查询不可以用select 语句进行查询

相关子查询和不相关子查询

如果子查询的查询条件依赖于 父查询 就成为 相关子查询
否则就是不相关子查询。(相关嵌套查询)

3 any 和some 谓词
4 exists 谓词的使用
5
选择选修了 全部课程的学生

对于任意的XX 都满足

非( 存在一个XX 不满足)

查询至少选修了 学生X 选修了全部课程的学生号码
蕴含逻辑
若果 X 选修了a 那么Y 也选修了a

对于任意课程y 满足(如果A选了 -> B选了)
等价于
不存在课程y (Ax选了-> B 没选)

3.4.4 集合查询##

包括并 交 差
union 会自动去掉重复元素 使用alll 关键字保留重复元素

3.4.5 基于派生表的查询##

子查询出现在from 中称为派生表

3.4.6 select 的一般格式##

3.5 数据更新#

1插入元组
insert into <表名> [ <属性列1>,<属性列2>...)]
2 插入子查询结过
insert into table <表名>[<属性列1>,<属性列2>...] 子查询;

3.5.2 修改数据##

update <表名> set <列明>=<表达式>
where

3.5.3删除数据##

drop from table < 表名>
where

3.7 视图#

3.7.1 定义视图##

1 建立试图
create view <视图名> [(列名) ...]
as <子查询>
[with check option]
选择了with check option 会再更新插入删除的时候 自动加上限制条件

必须指定组成视图的所有列名
(1) 某一个目标列不是单纯的属性名 ,是局促函数或者是列表达式
(2)选择了同名的字段
(3)要启动更加适合的名字
如果一个视图仅仅是去掉了表中的某些行或者列 就成为 行列子集视图

不存在的列 - 》 带表达式的视图
有groupby字句的视图-》 分组视图
2 删除视图

删除基本表后 ,视图不会清楚,
需要显示的调用drop view 来清除视图

3.7.2 查询视图##

视图消解 view resolution

都属关系对行列子集视图的查询都可以正确转换,但是非行列子集视图就不一定可以正确转换了,

视图一旦定义,就永久保存在数据字典中
派生表再语句执行中临时定义,执行后删除

3.7.4 视图的作用##

简化用户操作
使用户以多角度看同意数据
对重构提供了一定程度的逻辑独立性
对机密数据提供安全保护
更清晰的表达查询