- 数据库约束
- 表的关系
- 增删查改
目录
一.数据库约束类型
NOT NULL约束类型
UNIQUE 唯一约束
DEFAULT 默认值约束
PRIMARY KEY:主键约束
FOREIGN KEY :W外键约束
二,查询
count()两种用法
sum,avg,max,min用法
编辑
GROUP BY 子句
HAVING 条件
三,联合查询
内连接
外联结
自连接
子查询
合并查询
一.数据库约束类型
- NOT NULL --只是表的某一列不能储存NULL值
- UNIQUE --保证某列的每行必须有为一值
- DEFAULT -- 规定没有给列赋值时的默认值
- PRIMARY KEY -- 是NOT NULL 与 UNIQUE 的结合。确保某列有唯一标识,有助于快速特定寻找表中一个特定记录
- RFOREIGN KEY --保证一个表中的数据匹配到另一个表中的值的参照完整性
- CHECK --保证列中的值符合特定的条件。
NOT NULL约束类型
创建表时可指定,某列不为空
可以看到报错显示,id这一列不能为空,因为被NOT NULL修饰
UNIQUE 唯一约束
指定某一列的值唯一不可重复
创建stu表,指定name这一列被UNIQUE修饰,表中插入两个‘张三’,所以报错,插入失败。
DEFAULT 默认值约束
最初的默认值为NULL。插入数据时,如果某一列值为空,可以为其设定默认值
通过desc 表名 查看设置成功后的默认值
在未设置默认值前查看初始默认值
设置默认之后查看默认值
PRIMARY KEY:主键约束
指定某一列为主键,主键同时具有NOT NOLL 和UNIQUE的性质
主键通常搭配自增长auto_increment来使用。对于插入的数据对应的字段不给值时,使用最大值加一。
id这一列就是主键
自增长auto_increment什么意思?插入数据时可以不插入主键的值,让数据库自己分配,按照
1,2,3,4.....等顺序的模式,也可以手动指定其他数值,
这幅图中,在顺序插入前四个数据时,在自增主键的作用下再次插入数据是从4开始,还是从101开始嘞?答案是101,自增主键如果不指定数据,则默认从最大的值加一开始插入。
主键通常是某个表里的唯一身份表示,一般不允许存在多个主键,但是数据库里允许把多个列共同作为一个主键(联合主键),一般以数字作为主键,偶尔用字符串为主键。
FOREIGN KEY :W外键约束
外键用于关联其他主键或唯一键
创建父表:
创建子表:
子表中的class引用自父表class中的class列class表中的数据制约啦stu表中的class
在子表中一定要确保插入的数据classid 在父表中存在。
插入:在子表中插入数据会触发对父表的查询,若没有对应的数据会报错
父表:class
在子表插入数据
在子表插入班级为6的学生会报错,因为在插入子表数据时会触发对父表的查询,父表不存在会报错。
在删除附父表中的记录被子表引用,就不能删除啦,应该先删除子表中的数据再回头删除附表中的数据
会报错,此时外键正在引用父表中的数据。
正确删除方法:
一定要确保删除子表再删除父表。
二,查询
- 聚合查询
常见的聚合查询函数有
COUNT([distinct] exper) | 返回查询到的数量 |
SUM ([distinct] exper) | 返回查询到的数量总和 |
AVG ([distinct] exper) | 返回查询到数据的平均值,非数字为意义 |
MAX ([distinct] exper) | 返回查询到数据最大值,非数字无意义 |
MIN ([distinct] exper) | 返回查询到数据最小值,非数组无意义 |
count()两种用法
先对select 进行查询,根据结果再执行count
count(*)/ count(0) null也算进去
count(列名) null不算进去
sum,avg,max,min用法
GROUP BY 子句
select使用GROUP BY 子句可以指定列名进行分组查询。
使用group by 指定某一个列,就会把列值相同的行回到一个组中,分完组后还可以针对每个组进行聚合查询
select 列名 from 表名 group by 列名;
一个查询可以包括分组前的条件和分组后的过滤条件
在上述的条件下,排除张三
HAVING 条件
在GROUP BY 子句进行分组的后,要对分组结果进行条件过滤,不能使用where语句,要使用having
显示平均工资低于10000的角色和他的平均工资
三,联合查询
内连接
实际开发中数据往往来自不同的表,要多表联合查询,用一张表的每个记录去和另一个表的记录一一匹配就是笛卡尔积
以上四个表student包含学生个人信息,classes包含各个班级信息,coures包含课程,score包含个人分数
1.查询许仙的成绩
其中的,可以换成join where可以换成on
2.查询所有同学的成绩及个人信息
外联结
select 字段名 from 表名1 left join 表名2 on 筛选条件
外连接于内连接相似,
查询‘老外学习中文’同学没有开始成绩,但是也要显现出来
自连接
自连接是指同一张表连接自身进行查询
SQL中进行条件查询,是针对列于列之间比较的,不能把比较行,如果把一个表自己与自己链接
就可以比较行。
注意:在进行自连接的过程中,两个表名不能相同,重命名其中一个表
子查询
子查询是嵌入再其他sql语句中的select语句,也叫嵌套查询
select*from 表名 where 列名 = (select 列名 from student where 条件);
查询与‘不行毕业同班同学’
合并查询
实际应用中,为了合并多个执行结果,可以使用集合操作符union,union all
使用union 和union all 要求查询结果集中,字段一致。
select *from course where id<3 union select *from course where name='英文'
union取得结果集的并集,自动去除重复行
union all 不会去除重复行