目录
前言:前一篇我们讲了简单的单表操作,如新增(C),查询(R),修改(U), 删除(D)。这里的查询只是简单的,单表的查询。接下来,我们要学习给列加上约束,多表的查询。
为何要有约束?
就是让数据库帮助程序猿更好的检查数据是否正确。
1. NOT NULL:指示莫列不能为空。不能保存NULL。
2.UNIQUE:保证莫列的值必须有唯一的值,不能重复。
3.DEFAULT:规定没有给赋值的列,赋值给默认值。
4.PRIMARY KEY:是NOT NULL和UNIQUE的结合,确保莫列(或者莫两个列多个列的结合)有唯一的标识,有助于更容易更快速地找到表中一个特定地记录。
5.FOREGIN KEY: 保证一个表中地数据匹配另一个表中的值的参照完整性。
创建表时:可以指定莫列不为空
当你指定莫列不为空的时候,你再插入NULL值,会报错。
指定莫列为唯一的,不能重复的

指定列插入数据时。该列为空.会自动填入默认值

------是 NOT NULL 和 UNIQUE 的结合

在一个表里,只能有一个主键。
但允许把多个列放在一起同时作为一个主键。这样叫做联合主键。
这也说明,是先查询之前插入的数据,满足再进行插入。

那我如果手动新增一条记录
insert into student values(23,'qiqi',21),那下条自增主键是24?还是4? 
外键用于关联其他表的主键或唯一键
---------foregin key(当前表的列名) reference 主表(列名)
起到约束作用的表叫做主表/父表
被约束的这个表叫做子表。
要想创建外键,就要求主表对应的列得有 UNIQUE 约束,PRIMARY KEY。
一个表里面可以建多个外键。
那如果我想删除主表,直接用 drop table class 可以吗?

看来是不行的。要先删除子表,再删除父表。

一对一:

一对多:

多对多:

1.先确定实体(学生,课表等)
2.再明确实体之间的关系。
3.根据上述内容,套入关系中,表就出来了。
聚合函数用于对一组值进行计算并返回一个汇总值。
| 函数 | 说明 |
| COUNT ([DISTINCT] expr) | 返回查询到的数据的数量(空行也会算上) |
| SUM ([DISTINCT] expr) | 返回查询到数据的总和,不是数字没有意义。 |
| AVG ([DISTINCT] expr) | 返回查询到数据的平均值,不是数字没有意义。 |
| MAX ([DISTINCT] expr) | 返回查询到数据的最大值,不是数字没有意义。 |
| MIN ([DISTINCT] expr) | 返回查询到数据的最小值,不是数字没有意义。 |
这是行之间的计算

使用GRUOP BY 子句可以对指定进行分组查询。需要满足:使用GROUP BY进行分组查询时,SELECT 指定的字段必须是“分组依据的字段”,其他字段若想出现再SELECT 中则必须包含在聚合函数中。
select 列名 聚合函数 from 表名 group by 分组列名

分组前的条件过滤
分组之前进行条件查询。我们用的是where ,那分组之后再想进行条件过滤就要用having。
select 列名 聚合函数 from 表名 group by 分组列名 having 指定条件

联合查询也叫做多表查询。
首先要明白什么叫笛卡尔积:
笛卡尔积是两个表的乘积,列数是两个表的列数之和,行数是两个表的行数之积。
select * from 表名1,表名2;

是这两个表都会有的数据,通过内连接,筛选出有效的数据。

这里是用where 进行内连接
select 指定列名 from 表名1,表名2 .... where 内连接条件
如果几个表名的列名相同,要写 成表名.列名

还可以用 inner join on
select 指定列 from 表名1 (inner) join 表名2 on 指定条件

那where 和join on 有啥区别了?
where:
是先进行笛卡尔积,再执行下一步where挑选出表中的符合内连接的数据,这样比较慢。
join on:
先显示from 后面的这张表,再从 join 后的这张表挑选出返回条件可连接的元素,之后才连接起来,比较快。
where和join on 之间的差距在于效率的高低,而查询结构并没有什么差别.
where 的查询效率低于join on的查询效率。
外连接分为左外连接和右外连接。
左外连接:会把左表的所有连接的结果列出来,若右表中没有对应的记录,就是用null填充。
select * from 左表 left join 右表 on 连接条件;

右外连接:会把右表的所有连接的结果列出来,若左表中没有对应的记录,就是用null填充。
select * from 右表 left join 左表 on 连接条件;

自己和自己笛卡尔积,将自己的行传化为列

子查询是嵌套在其他sql语句中的select 语句,也叫做嵌套查询。
单行子查询:返回一行记录的子查询。
=:
查询李四的成绩

多行子查询:返回多行记录的子查询
IN:
查询英语成绩不及格的同学

联合查询的步骤:
1.先计算笛卡尔积
2.引入连接条件
3.根据需求加入必要条件,将不必要的列去掉。
总结:
以上就是我总结的表的约束的高级查找的知识,若有错误,请各位铁子留言纠错,若感觉不错,请一键三联。