SQL——Structured Query Language 结构化查询语言
-
特点:
-
综合统一
- 数据定义语言DDL,数据操纵语言DML,数据控制语言DCL集于一体
- 可独立完成数据库的全部活动
-
高度非过程化
- 只提出作什么,无需了解存取路径
-
面向集合操作方式
- 一次插入,删除,更新的对象是元组的集合
-
多种使用方式
- 交互式SQL
- 直接键入SQL命令进行操作
- 有DBMS进行解释
- 嵌入式SQL
- 将SQL语句嵌入到高级语言
- 使应用程序充分利用SQL访问数据库的能力,宿主语言的过程处理能力
- 一般需要预编译,将嵌入SQL语句转化为宿主语言编译器能处理的语句
- 交互式SQL
-
-
核心功能
- 数据定义:删除,修改基本表,视图,索引
- 数据操纵:数据的增删查改
- 数据控制:权限授予,收回
-
体系结构
- 基本表:
- 本身独立存在的表,一个关系对应一个基本表
- 一个或多个基本表对应一个存储文件
- 一个表可以带若干索引
- 存储文件:
- 逻辑结构组成关系数据库的内模式
- 物理结构任意的,透明的
- 视图:
- 从一个或几个基本表导出来的表
- 数据库中只存放视图的定义而不存放视图的数据
- 视图是一个虚表,用户可以在视图上定义视图
- 基本表:
-
SQL操作
- 数据查询
- 单表查询
- 数据查询
select 指定列 from 表名
select 指定列 别名, 指定列2 别名2 ... from student #这里的指定列的别名用来更改查出来的值的列名
select distinct 列名 from 表名 #distinct 是指去掉表中重复的行
select 列名 from 表名 where 条件表达式 #这里条件表达式有 >= <= = != AND,OR,NOT,LIKE,IN,BETWEEN AND ......
select 列名 from 表名 where 列名 LIKE 'DB\_%i__' ESCAPE '\\' #这里LIKE为比较,%为通配符,ESCAPE '\\' 为换码字符,即转义字符,从查询以DB_ 开头且以 倒数第三个字母为i的字母的行
select 列名 from 表名 where 条件表达式 order by 列名 desc(asc)#指定列升序或者降序排列
#聚集函数:COUNT(),SUM(),AVG(),MAX(),MIN()等
select MAX(属性名) from 表名 where 条件表达式
#GROUP BY 对查询结果进行分组
select 列名 from 表名 group by 列名 having 条件 #对分组进行条件筛选
- 集合查询(UNION,INTERSECT,EXCEPT)
select * from 表 where xxx UNION select * from 表 where xxx #UNION 将多个查询结果合并起来 相当于OR
select * from 表 where xxx INTERSECT select * from 表 where xxx #INTERSECT将多个查询结果合并起来 相当于AND
select * from 表 where xxx EXCEPT select * from 表 where xxx #EXCEPT 差,前者所查询的结果-后者查询到的结果
- 连接查询(多表查询)
#表名1.列名 比较运算符 表名2.列名
select 表1.列, 表2.列 from 表1,表2 where 条件
-
嵌套查询
- select-from-where 为一个查询块,将一个查询块嵌套在另一个where 中称为循环嵌套
select * from 表 where (select * from 表 where xx)
- 不相关子查询:子查询的查询条件不依赖于父查询
- 相关子查询:子查询的条件依赖父查询
- 带有IN的子查询
select * from 表 where 列 IN ( select 列 from 表 where xx)
- 带有比较运算符的子查询
- 能确切的知道内层查询返回的是单值时,可以用比较运算符> < >= …
- 带有ANY或ALL的子查询
- 大于ANY 大于某一个值
- 大于ALL 大于任意一个值
select 列 from 表名 where 列 > ANY( select * from 表 ...)
- 带有EXISTS的子查询
select * from 表 where EXIST (select * from 表 where xx)
-
数据定义
- 模式的定义
create schema 模式名 authorization 用户名 #为用户名定义一个模式,可以没有模式名,模式名默认为用户名
drop schema 模式名 <cascade / restrict> #cascade 级联,删除模式的同时把该模式所有数据都删除,restrict 如果定义了下属的数据库对象,则拒绝删除语句的执行。
- 基本表的定义
- 数据类型
create table 表名 (列名 数据类型 约束条件,...)
alter table 表名 ADD/DROP/ALTER 列名 ...
drop table 表名 restrict/cascade #删除表,restrict 有限值的删除,如果存在依赖该表的对象,则不进行删除,cascade 强制删除
- 数据类型
- 索引的定义:为了加快查询速度
create unique/cluster index 索引名 on 表名(列名...) #cluster聚簇索引,一个基本表最多建立一个,unique 为唯一索引
drop index 索引名
- 模式的定义
-
数据更新
- 插入数据
insert into 表名 (属性列1,属性列2...) values (常量1,常量2...)
- 修改数据
update 表名 set 列名 = 表达式,... where 条件表达式
- 删除数据
delete from 表名 where 条件表达式
-
视图
- 特点
- 从一个或者多个基本表中导出的表
- 只存放视图的定义,不存放视图对应的数据
- 定义视图
create view 视图名 列名1,列名2... as 子查询 with check option #自动检查属性是否为IS
- 删除视图
drop view 视图名
- 查询视图
select 属性列 from 视图名 where 条件
- 更新视图
update 视图名 set 属性列 = 值 ... where 条件表达式e
- 特点
End