一、概述
特点
**1)综合统一:**数据定义语言(DDL)、操作语言(DML)、控制语言(DCL)功能于一体。
2)高度非过程化:只需提出做什么,无需了解存储路径。
3)SQL采用集合操作方式
**4)提供多种实现方式:**独立语言(可独立用于联机交互)、嵌入式语言(嵌入到高级语言)
5)支持三级模式:视图(外模式)、基本表(模式)、存储文件(内模式)
二、数据定义
模式的定义与删除
定义

删除
sql
drop schema <模式名> <cascade|restrict>
cascade(级联):删除模式的同时把里面所有的数据对象都给删除
restrict(限制):若模式内有内容,则拒绝执行。
基本表的定义、删除与修改
定义表:
sql
create table <表名>(
属性名1 数据类型 列完整性约束,
属性名2 数据类型 列完整性约束,
属性名3 数据类型 列完整性约束,
表完整性约束);
定义表所属模式:

修改表
sql
alter table <表名>
add 新列名 类型 约束 | alter 列名 类型 | drop 完整性约束名
删除表
sql
drop table 表名 [cascade|restrict]
cascade:删除表没限制,与之相关的视图、索引、触发器啥的都一起删除。
restrict:有关联无法删除。
索引的建立与删除
相关内容:DBMS一般自动建立主键和非空的索引,DBMS自动维护索引、DBMS自动选择是否使用哪些索引。
是内部实现技术(属于内模式范畴)
建立索引
sql
create [unique][cluster] index 索引名 on 表名(属性<顺序:desc|asc>...);
一个表只能有一个聚簇索引,建立在经常查询的列上。
删除索引
sql
drop index 索引名
数据查询
1、单表查询
sql
select distinct sname from student
distinct去掉重复的行。
查询条件
1、比较大小 :
2、确定范围:between and not between and
3、确定集合:in (集合) not in
4、字符匹配:like not like _:单个字符 %:任意字符

5、涉及空值的查询:is null is not null (is不能用=代替)
6、多重条件查询:and or
7、排序关键词: order by 属性 asc | desc
8、聚集函数:count、sun、avg、max、min
9、group by子句 Having 条件
having短语作用于组,从中选择满足条件的组,而where是选择满足条件的列。
2、连接查询
等值查询:

自身连接:
一个表与自己连接(需要给表起别名)
外连接:
将主体表中不满足连接条件的元组也一并输出。
sql
select student.sno
from student left out join sc on student.sno=sc.sno;
左外连接、右外连接、全外连接
**复合条件连接:**where有多个条件
3、嵌套查询
子查询:不能用order by语句
不相关子查询:子查询的查询条件不依赖于父查询。
相关子查询:依赖父查询。
**带有比较运算符的子查询:**子查询一定要在运算符之后
带有ANY或ALL谓词的子查询:
**带有exists谓词的子查询:**exists谓词的子查询不返回任何数据,只产生逻辑真值(true)和假值(false),子查询的目标列通常都用*
用exists或not exists实现全称量词(难点)
4、集合查询
union:并操作
intersect:交操作
except:差操作
查询结果的列数和对应的数据类型必须相同。
union:将多个查询结果合起来后自动去除重复元组
union all:保留重复元组。
数据更新
1、插入数据
普通插入元组:
sql
insert into 表名(列名1,列名2...)
values (值1,值2,...)
子查询插入数据
sql
insert into 表名(列名1,列名2...)
子查询;
2、修改数据
sql
update 表名
set 列名1=新值1,列名2=新值2...
where 条件表达式
3、删除数据
删除指定表中满足where子句条件的元组。
sql
delete from 表名
where 条件表达式
视图
虚表:从基本表中导出的表,基表的数据发生变化,视图查询的数据也会改变
视图的操作
1、创建视图
sql
create view 视图名 (列名1,列名2...)
as 子查询
[with check option]
子查询不允许有order by或distinct短语
执行create view时并不执行select语句,只是将视图的定义存入数据字典,查询视图时也是查询基本表中的数据。
with check option的作用:在修改、删除、插入操作时自动加上where中的条件。
基于视图的视图、带表达式的视图、分组视图(group by)、
不指定属性列:

2、删除视图
sql
drop view 视图名 [cascade | restrict]
cascade:将该视图和由他导出的所有视图一起删除。
restrict:有对视图的依赖,则不允许删除。
3、更新视图
允许对行列子集视图进行更新。
但一些视图是不可更新的,因为这些视图不能唯一地有意义地转为对相应基本表的更新。
4、视图的作用
简化用户操作、提供了一定的逻辑独立性、提供安全保护、更清晰的表达查询。