约束的概念外加多表查询都在这

本文详细介绍了数据库中的各种约束,包括非空约束、唯一约束、主键约束、默认约束、检查约束和外键约束。通过实例阐述了约束在维护数据正确性、避免冲突和保证数据完整性方面的作用,同时讲解了多表查询、连接查询、联合查询和子查询的用法。
摘要由CSDN通过智能技术生成

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类:
非空约束:not null
限制该字段的数据不能为null

唯一约束:unique
保证该字段的所有数据都是唯一、不重复的

主键约束:primary  key(自增:auto_increment)--mysql里面
主键是一行数据的唯一标识,要求非空且唯一

默认约束:default
保存数据时,如果未指定该字段的值,则采用默认值

检查约束(8.0.16版本之后):check
保证字段值满足某一个条件

外键约束:foreign key
用来让两张表的数据之间建立连接,保证数据的一致性和完整

删除/更新行为
 no action
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与restrict一致)
 restrict
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与no action一致)
 cascade
当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
 set null
当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
set default
父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)

alter table 表名 add constraint外键名称 foreign key(外键字段) references 主表名(主表字段名)on update cascade on delete cascade;

多表查询的概述:指从多张表中查询数据。
笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有组合情况。(在多表查询时,需要消除无效的笛卡尔积)

连接查询-内查询
内连接查询语法:
1.隐式内连接:
select 字段列表 from 表1 ,表2 where 条件 ...;

2.显示内查询:
select 字段列表 from 表1 join 表2 on 连接条件...;
内连接查询的是两张表交集的部分

连接查询-外连接
外连接查询语法:
1.左外连接:
select 字段列表 from 表1 left join 表2 on 条件...;
相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据

2.右外连接:
select 字段列表 from 表1 right join 表2 on 条件...;
相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据

联合查询-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的任何一个。

根据子查询结果不同,分为:
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)

标量子查询:
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。
常用的操作符:=>>=<<=

列子查询:
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符:in , not in ,any , some ,all
in
在指定的集合范围之内,多选一
not in 
不在指定的集合范围之内
any 
子查询返回列表中,有任意一个满足即可
some
与ANY等同,使用some的地方都可以使用any
all
子查询返回列表的所有值都必须满足

行子查询:
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<>、in 、not in  

表子查询:
子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:in


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值