约束:
概念
约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的
保证数据库中数据的正确,有效性和完整性。
分类:
非空约束:NOT NULL 限制该字段的数据不能为null 唯一约束: UNIQUE 保证该字段的所有数据都是唯一、不重复的 主键约束:PRRIMARY KEY 主键是一行数据的唯一标识,要求非空且唯一 默认约束:DEFAULT 保存数据时,如果未指定该字段的值,则采用默认值 检查约束:CHECK 保证字段值满足某一个条件 外键约束:FOREIGN KEY 用来让两张表的数据之间建立连接,保证数据的一致性 和完整性
外键约束:
概念
外键用来让两张表中的数据之间建立连接,从而保证数据的一致性和完整性。
语法:
添加外键
CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT][外键名称]FOREIGN(外键字段名)REFERENCES 主表(主表列名) ); ALTER TABLE 表名ADD CONSTRAINT 外键名称 FOREING KEY(外键字段名) REFERENCES 主表(主表列名);
删除外键
ALTER TABLE 表名DROP FOREIGN KEY 外键名称;
删除/更新行为
NO ACTION RESTRICT CASCADE SET NULL SET DEFAULT
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREING KEY (外键名称)REFERNCES 主表名(主表名段名)ON UPDATE CASCADE ON DELETE CASCADE;
多表关系
概述
各个表结构之间相互存在联系有:一对多,多对多,一对一
一对多(多对一)
实现:在多的一方建立外键,指向一的一方的主键 举例:员工和部门
多对多
实现:建立第三张中间表,中间表至少包含两个外键,费别关联两方的主键 案例:学生于课程
一对一
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE) 案例:用户与用户详细信息的关系
多表查询
概述:指从多张表中查询数据
笛卡尔积:在多表查询时,需要消除无效的笛卡尔积
分类
连接查询
内连接:相当于查询A,B交集部分数据 外连接 左外连接:查询左表所有数据,以及两张表交集部分数据 右外连接:查询游标所有数据,以及两张表交集部分数据 自连接:当前表与自身的连接查询,自连接必须使用表别名 子查询
多表查询-内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示内连接
SELECT 字段列表 FROM 表1[INNER]JOIN表2 ON连接条件...;
注意
内连接查询时两张表交集的部分
多表查询-外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER]JOIN表2 ON条件...; 相当于查找表1(左表)的所有数据,包含表1和表2交集部分的数据
多表查询-自连接
语法
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON条件...; 自连接查询,可以是内连接查询,也可以是外连接查询。
联合查询-union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
语法:
SELECT 字段列表 FROM 表A... UNION[ALL] SELECT 字段列表 FROM 表B...;
注意:
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。 union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。
子查询
概念
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。 SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2); 子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。
根据子查询结果不同,分为:
标量子查询(子查询结果为单个值) 列子查询(子查询结果为一列) 行子查询(子查询结果为一行) 表子查询(子查询结果为多行多列)
根据子查询位置,分为
WHERE之后 FROM之后 SELECT之后