SQL外键约束多表查询级联删除子查询
文章目录
- 一、外键
- 1.创建外键约束
- 2.删除外键约束
- 3.外键约束提示
- 二、级联删除
- 三、多表查询
- 1.笛卡尔积
- 2.内连接查询
- 1.隐式内连接
- 2.显示内连接
- 3.外连接查询
- 1.左外连接
- 2.右外连接
- 四、子查询
- 常见分类
- 1.子查询的结果作为查询条件
- 2.子查询的结果作为一张表
- 3.子查询结果是单行多列
一、外键
- 外键指的是在从表中与主表的主键对应的字段
- 使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性
- 多表关系中的主表和从表
- 主表:主键id所在的表,约束别人的表
- 从表:外键所在的表,被约束的表
1.创建外键约束
- 新建表时候添加外键
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名);
- 已有表添加外键
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
2.删除外键约束
- 删除外键约束
alter table 从表 drop foreign key 外键约束名称
3.外键约束提示
- 从表外键类型必须与主表外键类型一致,否则创建失败
- 添加数据时,应该先添加主表中的数据,再添加从表中的数据
- 删除数据时,应该先删除从表中的数据,再删除主表中的数据
二、级联删除
- 如果想实现删除主表数据的同时,也删除掉从表数据,可以使用级联删除操作
ON DELETE CASCADE
在创建表的同时添加上述格式代码
三、多表查询
1.笛卡尔积
- 概念:
- 举例:
2.内连接查询
- 通过指定的条件去匹配两张表中的数据,匹配上就显示,匹配不上就不显示
1.隐式内连接
- from子句后面直接写多个表名,使用where指定连接条件
SELECT 字段名 FROM 左表, 右表 WHERE 连接条件;
SELECT
p.pname '商品',
p.price '价格',
c.cname '种类'
FROM products p, category c WHERE c.cid = p.category_id AND p.price = 5000;
2.显示内连接
使用inner join …on 这种方式
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件
– inner 可以省略
SELECT * FROM products p INNER JOIN category c ON c.cid = p.category_id AND c.cname = '家电';SELECT * FROM products p INNER JOIN category c ON c.cid = p.category_id
WHERE c.cname = '家电';
3.外连接查询
1.左外连接
- 使用 LEFT OUTER JOIN , OUTER 可以省略
- 以左表为基准, 匹配右边表中的数据,如果匹配的上,就展示匹配到的数据
- 如果匹配不到, 左表中的数据正常展示, 右边的展示为null
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件
SELECT
c.cname AS '商品种类',
p.pname AS '商品名称'
FROM category c LEFT JOIN products p ON p.category_id = c.cid;
2.右外连接
- 右外连接 , 使用 RIGHT OUTER JOIN , OUTER 可以省略
- 以右表为基准,匹配左边表中的数据,如果能匹配到,展示匹配到的数据
- 如果匹配不到,右表中的数据正常展示, 左边展示为null
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件
SELECT
c.cname AS '商品种类',
p.pname AS '商品名称'
FROM products p RIGHT JOIN category c ON p.category_id = c.cid;
四、子查询
- 概念:
- 一条select 查询语句的结果, 作为另一条 select 语句的一部分
- 特点
- 子查询必须放在小括号中
- 子查询一般作为父查询的查询条件使用
常见分类
- where型子查询: 将子查询的结果, 作为父查询的比较条件
- from型子查询 : 将子查询的结果, 作为 一张表,提供给父层查询使用
- exists型子查询: 子查询的结果是单列多行, 类似一个数组, 父层查询使用 IN 函数 ,包含子查询的结果
1.子查询的结果作为查询条件
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
SELECT
*
FROM category c
WHERE c.cid = (SELECT category_id FROM products WHERE price = 5000);
2.子查询的结果作为一张表
SELECT 查询字段 FROM (子查询)表别名 WHERE 条件;
SELECT
*
FROM category c
INNER JOIN (SELECT * FROM products) p
ON c.cid = p.category_id;
3.子查询结果是单行多列
SELECT 查询字段 FROM 表 WHERE 字段 IN(子查询);
SELECT * FROM category
WHERE cid IN (SELECT DISTINCT category_id FROM products);
SQL外键约束多表查询级联删除子查询相关推荐
- sql 外键约束【表关系绑定】
外键 外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行[一条数据]. 主表(父表 ...
- oracle删除库里的所有表,清空mysql指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...
清空mysql指定库里所有表数据-自动删除所有表,有外键约束的表优先删除 由于要清空数据库数据 ,手动非常麻烦.网上找了一下,有一个Oracle的,参照它,在其上修改一下用于Mysql,把代码奉献如下 ...
- sql 外键约束实例
sql外键约束实例 结论 在Oracle中的测试 在MySQL中的测试 结论 当一个表A的列a为另一个表B的列b的外键时 如果A的列a中删除的值在B的b列中存在,执行被禁止 如果B的列b中插入的值在A ...
- My SQL外键约束
外键约束对子表的含义:如果在父表中找不到对应的候选键,则不能对子表进行insert/update操作 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹 ...
- PHPAdmin添加外键约束(建立表-表之间的关系)
在使用PHPAdmin建立数据库之后,要添加外键约束,即建立表与表之间(字段之间的联系) 首先在建立表的过程中也写需要注意的点 1.设置主键 2.有可能会用到的关联字段要记得设置唯一性 3.将所有要建 ...
- MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...
- MYSQL外键约束和表关联
1. 外键约束 约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.关联性 foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让 ...
- mysql 有外键 怎么插入数据_外键约束的表怎么插入数据
有外键的情况应该先添加主表数据,再添加副表数据. 如:有以下两张表 班级表: CLASSID NAME 1 一班 2 二班 学生表: SID NAME CLASSID 1 张三 1 2 李四 1 3 ...
- SQL外键引用无效表???
???SQL外键引用了无效的表
最新文章
- 因论文《致谢》走红全网的中科院博士,如今已是腾讯大佬!
- 人工智能领域的未来和挑战
- Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程
- 回填用土好还是砂石料好_养羊喂撒粉料好还是颗粒料好?
- 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
- Percona XtraDB Cluster(PXC) Mysql 集群
- CentOS安装glibc-2.14
- deepin 使用cuda硬件解码
- 民族学类毕业论文文献有哪些?
- liunx服务器日志在什么位置,系统日志查看位置(Windows+Linux)
- 淘宝店铺如何装修呢?
- css3 描两个边,CSS3 / 指定四条边中图像的显示方法 - 汇智网
- RCF—用于C++的进程间通讯(4)
- ios 通过代码调整焦距
- Service Mesh(服务网格)——后 Kubernetes 时代的微服务
- 性能提升利器之固态硬盘和序列化漫谈
- JAVA Date 工具类 常用
- 如何查看自己电脑的并口端口号?
- iOS 消息转发(Message Forwarding)
- JavaEE学习笔记整理