文章目录

  • 一、外键
    • 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 查询字段 FROMWHERE 字段=(子查询);

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 查询字段 FROMWHERE 字段 IN(子查询);

SELECT * FROM category
WHERE cid IN (SELECT DISTINCT category_id FROM products);

SQL外键约束多表查询级联删除子查询相关推荐

  1. sql 外键约束【表关系绑定】

    外键 外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行[一条数据]. 主表(父表 ...

  2. oracle删除库里的所有表,清空mysql指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...

    清空mysql指定库里所有表数据-自动删除所有表,有外键约束的表优先删除 由于要清空数据库数据 ,手动非常麻烦.网上找了一下,有一个Oracle的,参照它,在其上修改一下用于Mysql,把代码奉献如下 ...

  3. sql 外键约束实例

    sql外键约束实例 结论 在Oracle中的测试 在MySQL中的测试 结论 当一个表A的列a为另一个表B的列b的外键时 如果A的列a中删除的值在B的b列中存在,执行被禁止 如果B的列b中插入的值在A ...

  4. My SQL外键约束

    外键约束对子表的含义:如果在父表中找不到对应的候选键,则不能对子表进行insert/update操作 外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹 ...

  5. PHPAdmin添加外键约束(建立表-表之间的关系)

    在使用PHPAdmin建立数据库之后,要添加外键约束,即建立表与表之间(字段之间的联系) 首先在建立表的过程中也写需要注意的点 1.设置主键 2.有可能会用到的关联字段要记得设置唯一性 3.将所有要建 ...

  6. MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

    一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...

  7. MYSQL外键约束和表关联

    1. 外键约束 约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.关联性 foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让 ...

  8. mysql 有外键 怎么插入数据_外键约束的表怎么插入数据

    有外键的情况应该先添加主表数据,再添加副表数据. 如:有以下两张表 班级表: CLASSID NAME 1 一班 2 二班 学生表: SID NAME CLASSID 1 张三 1 2 李四 1 3 ...

  9. SQL外键引用无效表???

    ???SQL外键引用了无效的表

最新文章

  1. 因论文《致谢》走红全网的中科院博士,如今已是腾讯大佬!
  2. 人工智能领域的未来和挑战
  3. Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程
  4. 回填用土好还是砂石料好_养羊喂撒粉料好还是颗粒料好?
  5. 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
  6. Percona XtraDB Cluster(PXC) Mysql 集群
  7. CentOS安装glibc-2.14
  8. deepin 使用cuda硬件解码
  9. 民族学类毕业论文文献有哪些?
  10. liunx服务器日志在什么位置,系统日志查看位置(Windows+Linux)
  11. 淘宝店铺如何装修呢?
  12. css3 描两个边,CSS3 / 指定四条边中图像的显示方法 - 汇智网
  13. RCF—用于C++的进程间通讯(4)
  14. ios 通过代码调整焦距
  15. Service Mesh(服务网格)——后 Kubernetes 时代的微服务
  16. 性能提升利器之固态硬盘和序列化漫谈
  17. JAVA Date 工具类 常用
  18. 如何查看自己电脑的并口端口号?
  19. iOS 消息转发(Message Forwarding)
  20. JavaEE学习笔记整理

热门文章

  1. 纸牌魔术 —— 小算数魔术(猜数字)
  2. 今日资本总裁徐新:中华英才网CEO历经两次更迭
  3. python学习笔记之-melt和pivot函数
  4. linux更新项目常用命令汇总
  5. 恐惧症的根源一认知错误
  6. 从同事朋友的电脑里,搜刮来的 10 个 Chrome 插件
  7. Unix 下压缩和解压缩命令
  8. c语言for里的i和j,不明白例子里的for循环里i和j的值是怎么回事
  9. 【拆分表格与批量重命名】
  10. php调用rpc,远程调用RPC