一、数据完整性
数据库的完整性
指数据的有效性和准确性
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
实体完整性(行完整性)、域完整性(列完整性)、引用完整性(关联表完整性)
主键约束:primary key 行完整性
唯一约束:unique 行完整性
自动增长:auto_increment 行完整性
非空约束:not null 列完整性
默认约束:default 列完整性
数据类型(数值类型、字符串类型、日期类型) 列完整性
外键约束: foreign key 引用完整性
二、多表查询
多表约束:外键列
在实际开发中,为了数据查询效率,一般不设置表的外键列
2.1. 多表的关系
2.1.1 一对多/多对一关系
一对多建表原则:在多的一方创建一个字段,字段作为外键指向一的一方的主键
2.1.2 多对多关系
多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一 方的主键
2.1.3 一对一关系
在实际的开发中应用不多.因为一对一可以创建成一张表
2.2 多表查询
分为:
合并结果集 UNION 、 UNION ALL
连接查询
内联 [INNER] JOIN ON
外联 OUTER JOIN ON
左外联 LEFT [OUTER] JOIN ON
右外联 RIGHT [OUTER] JOIN ON
自然连接
子查询 select的嵌套
2.2.1 合并结果集(用途较少)
作用:合并结果集就是把两个select语句的查询结果合并到一起! 合并结果集有两种方式:
UNION:去除重复记录,例如:SELECT* FROM t1 UNION SELECT * FROM t2
UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2
2.2.2 连接查询(重要!!!!)
连接查询会出现笛卡尔积现象,即表1的每一条数据会去匹配表2的每一条数据,得到个乘积
1.内连接
92版语句:
select 表1.列名,表2.列名 from 表1,表2 where 表1.列名=表2.列名 and......
99版语句:
select 表1.列名,表2.列名 from 表1 inner join 表2 on 表1.列名=表2.列名 where.....
inner可省略,尽量以后都使用这版,目的是结构清晰易读
2.外连接
左外连接
语法:
左外联:select 列名 from 主表 left join 次表 on 主表.列名=次表.列名
主表数据全部显示,次表数据匹配显示,能匹配到的显示数据,匹配不成功的显示null 主表和次表不能随意调换位置
右外连接
left改成right 主表在后
2.2.3 子查询(重要!!!)
一个select语句中包含另一个完整的select语句。
子查询出现的位置:
a. where后,作为条为被查询的一条件的一部分
b. from后,作表;
示例:
工资高于JONES的员工。
分析:
查询条件:工资>JONES工资,其中JONES工资需要一条子查询
第一步:查询JONES的工资
SELECT sal FROM emp WHERE ename='JONES';
第二步:拿所有人的工资和jones的工资比
SELECT * FROM emp WHERE sal > (第一步结果);
结果:
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE
ename='JONES');