3.1SQL特点
- 一体化:DDL(数据定义语言),DML(数据操纵语言),DCL(数据控制语言)
- 高度非过程化
- 面向集合的操作
- 提供多种使用方式
- 功能强大,简洁易用
3.2SQL与数据库三级模式
- 基本表:一个关系对应一个基本表,一个或多个基本表对应一个存储文件
- 视图:一个虚表,由一个或者几个基本表导出的表
- 存储文件:存储文件的逻辑结构组成了关系数据库的内模式
3.3模式的定义和删除
- 创建—create database<模式名>
- 删除—drop database<模式名>
3.4基本表的定义,删除和修改
- 创建:
-
Create table<表名>(列名 <数据类型> [列级完整性约束条件])
- 修改
-
Alter table<表名>(add/drop column)
- 删除
-
Drop table<表名> [restrict | cascade]
restrict(表示限制,要删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除)
Cascade(表示删除该表没有限制,在删除基本表的同时,依赖该表的所有对象一起删除)
主键和外键
Foreign key (<外码列名>)references <主码所在表名>(<主码列名>)
3.5索引的创建与删除
- 创建
create [unique] [cluster] index<索引名> on<表名>(<列名>[<次序>]……)
- 删除
drop index<表名。索引名>
3.6数据查询
Select 语句格式
Select
from
where
group by
order by
单表查询
- 取消重复行:distict
- 确定集合:[not] in//=(常量1,常量2)
- 字符匹配:like谓词和通配符来实现模糊查询
列名 [not] like '<匹配串>' [dscape<'换码字符'>]
%:匹配0个或多个任意字符
_:匹配任意一个字符
- 聚集函数:count/sum/avg/max/min
除count(*)外,其他函数在计算过程中忽略null值,聚集函数不能用于where,只能用于group by 和having中
- 分组查询:group by--将查询结果按照某一列或者多列的值分组,值相同的元组为一组
多表连接查询
Inner join--内连接:显示符合条件的元组,系统默认内连接
Left join--左外连接:显示符合条件的数据行以及左边表中不符合条件的数据行,相应的右边数据行以null来显示
Right join--右外连接
Full join--完全连接
- 等值连接:用=符号,没用就是非等值连接
嵌套查询
先求出内层查询,再求外层查询
子查询的select不能使用order by子句,因为order by字句只能对最终查询结果进行排序
①子查询返回一个值
②子查询返回一组值
③使用exists谓词:若内层查询的结果非空,则外层的where子句返回真值,若内层查询结果为空,则外层where子句返回假值
④子查询不返回任何数据,只产生逻辑真值或者逻辑假值
集合查询
- select语句执行结果是元组集合,当两个查询语句的结果结构完全相同时可以对这两个查询1结果进行union、intersect(交),except(差)
- 存储查询结果到表中--select…into存储到一个新建的数据表或者临时表中
- 基于派生表的查询
子查询不仅可以出现在where子句中,还可以出现在from子句中,将子查询生成的历史派生表作为数据源
3.7数据更新
插入数据
- 插入一个元组-->insert into <表名> [<列名1>[<列名2>….]] values(<值1>[,<值2>]…)
- 插入多个元素-->insert into <表名> [(<列名1>[,<列名2>…)]
删除数据
- Delete from ….
修改数据
Update<表名> set <列名>=<表达式>[,<列名>=<表达式>]… where <条件>
3.8视图
一个虚表,从一个或者几个基本表中导出的表,数据库中只存放视图的定义,不存放视图对应的数据
定义视图
create view<视图名> [<列名>[…]] as 子查询
- 子查询中不允许含有order by 和distict短语
- 带可选项with check option 表示对视图进行更新操作时系统自动加上视图定义中的谓词条件
删除视图
drop view<视图名>
查询视图
select
更新视图
对视图的更新转换成对基本表的更新
- 插入--insert into
- 修改--update set
作用
- 简化用户操作
- 提供数据保密
- 保证数据的逻辑独立性
- 让用户多角度看待同一个数据