SQL定义及其特点
Structured Query Languague,结构化查询语言。
主要特点有:
- 综合统一:把定义、修改、删除、连接、安全性、完整性、事务控制、动态SQL等统一起来(体现在语言风格统一和操作过程统一)
- 高度非过程化:无需指明底层实现,而层次模型和网络模型是过程化的。
- 面向集合的操作方式
- 一种语法结构,多种使用反射:SQL即可以独立使用,又可以嵌入到其他编程语言中使用
- 语言简洁、易学易用
数据库基本操作命令
SQL语言集成DDL、DML和DCL于一体,由以下9个单词引导的操作语言来构成:
- DDL(数据库定义语言):CREATE、ALTER、DROP
模式的定义和删除,包括定义数据库、表、视图、索引、完整性约束条件等,也包括定义对象(RowType行对象、Type列对象) - DML(数据库操纵语言):INSERT、DELETE、UPDATE、SELECT
各种方式的更新与检索、各种复杂条件的检索、各种聚集操作(求和、求平均等)、分组聚集、分组过滤 - DCL(数据库控制语言):GRANT、REVOKE
安全性控制:授权和撤销授权 - 备注:CASCADE表示级联,把模式下的表和视图全部删除/修改;RESTRICT表示限制,如果模式下有表和视图,则停止执行。
在增删改查之前,有几个数据库的基本定义先要搞清楚:
- 基本表:存在于外模式/模式中,是用于存储数据的二维表。
- 视图:存在于外模式中,是一个虚表,数据是从其他基本表中导入的,不是一个真正的表(可在视图上再定义视图),视图可以简化操作、用不同角度看待同一数据、提供一定程度逻辑独立性、安全性、可读性
- 属性名/属性值:列名、列值
- 元组(表结构):属性名的集合为表结构,除表结构外每一行为元组
- 存储文件:数据库文件,包含了以上内容
- 索引:索引是为了加快查询的速度
- 数据字典:DBMS中的系统表,包含了数据库中所有的定义信息
- 数据查询
- AS:可省略,为属性名起别名
DISTINCT:对属性值进行去重,每个属性值只能出现一次
条件查询
- WHERE:根据条件查询,使用连接词OR和AND进行布尔运算
- BETWEEN…AND:取值区间
- IN:是否在集合中
- LIKE:模糊匹配,%代表任意长度字符,_代表任意单个字符
- NOT:与2、3、4配合是否表示否定
- \:用于转义,使通配符可以作为普通字符使用
- IS:用于判断是否为空值
- ORDER BY:查询结果排序,DESC表示降序,默认为ASC升序,可以使用多个关键字排序
- 聚合函数:求和SUM、求平均AVG、统计次数COUNT等,通常配合GROUP BY使用,进行分类汇总;HAVING则是用于分组之后再进行筛选
- 多表连接查询:select * from A, B,对A和B表进行笛卡尔积
- 自然连接:假设A、B表中只有Sno列相同,那么自然连接可写为where A.Sno=B.Sno或A natural join B,舍弃重复属性
- 等值连接:内连接,同自然连接,不舍弃重复属性。A inner join B on A.Sno=B.Sno,inner可省略
- 外连接:full join…on
- 左/右外连接:left/right outer join…on,outer可省略
自连接:查询至少选修C2和C4的学生
select A.Sno
from Students A, Students B
where A.Sno=B.Sno and A.Cno='C2' and B.Cno='C4'
嵌套查询:select * from A where A.Sno in (select Sno from B)
- EXISTS:相关子查询,判断查询是否返回结果,exists(select …)。常用于除法,如查询选修了全部课程的学生:
/* 我们将查询选修了全部课程的同学转化为查询没有一门课没选修的同学,双重否定表肯定,所以使用两个NOT EXISTS */
select Sno from Student
where not exists(
select * from Course
where not exist(
select * from SC
where SC.Sno=Student.Sno and SC.Cno=Course.Cno
)
)
- 集合查询(都是在多个查询语句间进行使用)
- 并集:UNION
- 交集:INTERSECT
- 差集:EXCEPT
- 数据更新(可以结合select查询结果进行使用)
- 指定列插入:insert into table(attr, attr, attr…) values(value, value, value…)
- 所有列插入:insert into table values(value, value, value…)
- 修改:update table set attr=value [where attr=value]
- 删除:delete from table [where attr=value]
- 数据定义
```sql — 创建CREATE CREATE DATABASE 数据库名; CREATE TABLE 表名( 列名 数据类型 [完整性约束条件] [, 列名 数据类型 [完整性约束条件]] );
CREATE VIEW <视图名> [(列名…)] AS 子查询 [WITH CHECK OPTION] — 防止视图对不属于视图范围内的基本表进行修改(检查是否满足修改条件)
— 修改ALTER ALTER database 数据库名 MODIFY name=新的数据库名;
ALTER table 表名 ADD 列名 数据类型 [默认值] [列约束]
ALTER table 表名 ADD CONSTRAINT 约束名 约束
ALTER table 表名 DROP 列名
ALTER table 表名 DROP 约束名
ALTER table 表名 DROP PRIMARY KEY ```