外连接(outer join)

left join:左外连接(左连接),以左表为主表

right join:右外连接(右连接),以右表为主表

基本语法:左表 left/right join 右表 on 左表.字段=右表.字段;

-- 左连接

select s.*,c.name as c_name,c.room -- 字段的别名

from my_student as s left join my_class as c -- 左表为主表,最终记录数至少不少于左表已有的记录数

on s.c_id=c.id;

-- 右连接

select s.*,c.name as c_name,c.room -- 字段的别名

from my_student as s right joinmy_class as c -- 右表为主表,最终记录数至少不少于右表已有的记录数

on s.c_id=c.id;

-- 左右连接互转

select s.*,c.name as c_name,c.room -- 字段的别名

from my_class as c right join my_student as s -- 右表为主表,最终记录数至少不少于右表已有的记录数

on s.c_id=c.id;

自然连接(natural join)

自然内连接:左表 natural join 右表;

自然外连接:左表 natural left/right join 右表;

模拟自然连接:左表 left/right/inner join 右表 using(字段名);

-- 自然内连接

select * from my_student natural join my_class;

-- 修改班级表的name字段名为c_name

alter table my_class change name c_name varchar(20) not null;-- alter table my_class change c_name name varchar(20) not null;(修改班级表的c_name字段名为name)

-- 自然左外连接(基本不用)

select * from my_student natural left join my_class;

-- 外连接模拟自然外链:using

select * from my_student left join my_class using(id);

新增外键

创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)

在新增表之后增加外键:修改表结构,使用alter table 表名 add [constraint 外键名字] foreign key(外键字段) references 父表(主键字段);

-- 创建外键

create table my_foreign1(

id int primary key auto_increment,

name varchar(20) not null comment '学生姓名',

c_id int comment '班级名', -- 普通字段

-- 增加外键

foreign key(c_id) references my_class(id)

)charset utf8;

追加外键

-- 创建表

create table my_foreign2(

id int primary key auto_increment,

name varchar(20) not null comment '学生姓名',

c_id int comment '班级名' -- 普通字段

)charset utf8;

-- 增加外键

alter table my_foreign2 add

-- 指定外键名

constraint student_class_1

-- 指定外键字段

foreign key(c_id)

-- 引用父表主键

references my_class(id);

删除外键

-- 删除外键

alter table my_foreign1 drop foreign key

my_foreign1_ibfk_1;

在结构上看不出来,要从建表语句来看

外键条件

外键要存在,首先必须保证表的存储引擎是innodb

列类型必须与父表的主键类型一致

一张表中的外键名字不能重复

增加外键的字段数据已经存在,必须保证数据与父表主键要求对应

-- 插入数据:外键字段在父表中不存在

insert into my_foreign2 values(null,'郭富城',5); -- 没有5班级

insert into my_foreign2 values(null,'项羽',1);

insert into my_foreign2 values(null,'刘邦',2);

insert into my_foreign2 values(null,'韩信',2);

-- 更新父表记录

update my_class set id=5 where id=1; -- 失败:id=1的班级记录已经被学生引用

update my_class set id=5 where id=3; -- 可以:没有引用

-- 插入数据

insert into my_foreign1 values(null,'马超',3);

-- 增加外键

alter table my_foreign1 add foreign key(c_id)

references my_class(id);

外键约束

有三种约束模式

district:严格模式(默认的)

cascade:级联模式

set null:置空模式

语法:

foreign key(外键字段) references 父表(主键字段) on delete 模式 on update 模式;

mysql存在外键的连接_MySQL(外连接、自然连接、新增-追加-删除外键、外键条件-约束)...相关推荐

  1. MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)

    本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...

  2. 数据库:笛卡儿积、连接、等值连接、自然连接、外连接、嵌套循环连接、排序合并连接、索引连接和哈希连接

    写在前面 连接是数据库算法的一个重要内容,但数据库的知识有些忘了,最近刚好需要,就又看着笔记重新整理了一遍. 一.笛卡儿积 先来从笛卡儿积开始说起.笛卡儿积是集合的一种基本运算.假设有两个表 R R ...

  3. mysql三表外连接_MySql的join(连接)查询 (三表 left join 写法)

    1.内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集 Select A.name,B.name from A inner join B on A.id=B.id和 Select A.n ...

  4. Mysql表连接:内连接、外连接、交叉连接、自然连接真的都不一样吗

    文章目录 前言 测试环境 创建测试数据 对比测试 内连接 交叉连接 外连接 左外连接 右外连接 自然连接 一般自然连接 自然左外连接 自然右外连接 STRAIGHT_JOIN 逗号分隔连接表 各种连接 ...

  5. 如何画关系代数的连接图?(数据库关系代数中笛卡儿积、θ连接、等值连接、自然连接、外连接)

    摘要:微信搜索[三桥君] 前言:关系代数中的连接是一个重要而且容易混乱的知识点,我通过查阅很多资料总结了与连接有关的知识点,并发现了他们之间的关系.本文通过理论知识先了解连接相关的重要名词意思,然后通 ...

  6. 深入分析内连接、外连接、左连接、右连接、等值连接、自然连接和自连接之间的区别,看这篇就够了!

    多表查询经常用到连接,各种连接之间的区别应该注意总结. 首先大概认识各种连接的关系和由来: 表之间的连接常有以下两种: 一.:在SELECT语句的WHERE子句中使用比较运算符给出连接条件,对表进行连 ...

  7. mysql没多久自动断开服务_mysql 长时间没连接了 就会自动断开服务

    这是因为mysql 长时间没连接了 就会自动断开服务. 解决办法 1.首先,下载必须的jar包 dbcp 包,目前版本是1.2.1:http://jakarta.apache.org/commons/ ...

  8. mysql长连接_mysql.connector 数据库长连接

    最近python服务经常报连接不存在,后来发现原来的同事写的是缓存来存储连接对象,过期就关闭重连,可是有其他线程还在用该连接,于是就出现了连接不存在的错误,于是改进一下: 连接数据库时查看连接对象是否 ...

  9. oracle自连接和自然连接,一个θ连接,equijoin和自然连接之间的区别

    尽pipe解释确切差异的答案没有问题,但我想说明关系代数是如何转化为SQL的,以及这三个概念的实际价值是什么. 你的问题的关键概念是join的想法. 为了理解一个连接,你需要理解一个笛卡尔乘积(这个例 ...

  10. oracle_sqlserver和mysql获取表外键的方法_mysql、sqlserver、oracle三种数据库维护索引、外键、字段语法总结...

    mysql.sqlserver.oracle三种数据库维护索引.外键.字段语法总结 1.     MYSQL数据库 1)    创建索引 CREATE INDEX index_name ON tabl ...

最新文章

  1. qt中label画圆代表指示灯_【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能...
  2. hdu 4468 spy 极其精彩的一道kmp灵活运用题
  3. scrapy的post登录:renren
  4. Java集合框架:LinkedList
  5. 函数重载二义性:error C2668: 'pow' : ambiguous call to overloaded function
  6. Oreo易支付程序开源源码分享发行版V1.3
  7. 10突然只剩下c盘和d盘了_科普:为什么软件不能装C盘?会卡!这是真的吗?
  8. Java Web基础回顾 —JQuery DOM
  9. CSS content 属性 CSS counter-increment 属性 CSS counter-reset 属性
  10. 电源大师课笔记 1.1
  11. 详解如何设计一套健康体检信息管理系统
  12. window10 修改jdk版本,从jdk10降到jdk1.8,java -version版本没有变化的问题解决
  13. MIPS体系结构简介
  14. win7 linux三系统,苹果电脑装windows7,Linux,mac os三系统,不需要BootBoot | MOS86
  15. c语言多组变量输入数据,C/C++中输入多组数据的方法
  16. 淘宝店铺pc端代码详细解析
  17. 川土微|国产数字隔离器兼容ISO7762用于新能源汽车热管理系统
  18. 微软新专利暗示:多功能Surface Pen触控笔可能问世
  19. 监听器(统计在线人数)
  20. 社会知觉:我们如何理解他人

热门文章

  1. MyBatis 学习笔记 - 2021-7-10 - 2021-7-13
  2. CNCC2022全面启动,共同期待贵阳相聚!
  3. Swift 沙盒文件转Data
  4. 【附源码】计算机毕业设计JAVA在线影视点播系统
  5. 加载sklearn 人脸数据集出错 fetch_olivetti_faces() HTTPError: HTTP Error 403: Forbidden解决方案
  6. 鸿蒙支持哪10款机型,鸿蒙2.0支持哪些手机 鸿蒙2.0支持机型列表大全
  7. 安卓安装apk之后直接打开频繁重启、按home键返回,再次打开,重新启动
  8. 消息的同步发送,异步发送以及消息发送的可靠性
  9. java读取aac文件_以AAC格式录制和播放声音
  10. php盯盘,手把手教你如何盯盘,如何提高盘中盯盘效率