七种join的书写规范
在mysql中的两表进行连接时,总共有7种连接情况,具体可见下图
由图的从左到右的顺序
图1.左连接(left join):返回左表中的所有记录和右表中的连接字符字段相等的记录,若右表没有匹配值则补NULL
图2.右连接(right join):返回右表中的所有记录和右表中的连接字符字段相等的记录,若左表没有匹配值则补NULL
图3.内连接(inner join):只有满足条件的巨鹿才会出现在查询结果中,即左表和右表的公共部分
图4.左表中的独自拥有的部分,去除与右表中的重合部分
图5.右表中的独自拥有的部分,去除与左表中的重合部分
图6.左表和右表的重合部分,以及左右表的重和部分(可以看成两表的左连接和右连接的拼接)
图7.左表和右表的独自拥有部分(可以看成是图4和图5的拼接)
实例详解:
创建相关表以及插入数据
- create table student(
- sid int(11) primary key auto_increment,
- sname varchar(20) not null,
- class_id int(11) null
- );
- create table class(
- cid int(11) primary key,
- cname varchar(20) not null
- );
- alter table student add foreign key(class_id) references class(cid);
- desc student;
- insert into class(cid,cname) values
- (1,'一年级'),
- (2,'二年级'),
- (3,'三年级'),
- (4,'四年级'),
- (5,'五年级'),
- (6,'六年级');
- set sql_safe_updates = 0;
- insert into student(sid,sname,class_id) values
- (1,'张三',1),
- (2,'李四',4),
- (3,'王五',1),
- (4,'赵柳',2),
- (5,'孙权',6),
- (6,'钱升',null),
- (7,'刘备',3),
- (8,'周往',5);
- #内连接
- select
- student.*,
- class.*
- from
- student
- inner join class
- on student.class_id = class.cid;
- #左连接
- select
- student.*,
- class.*
- from
- student
- left join class
- on student.class_id = class.cid;
- #右连接
- select
- student.*,
- class.*
- from
- student
- right join class
- on student.class_id = class.cid;
- #student数据表锁独有的数据
- select
- student.*,
- class.*
- from
- student
- left join class
- on student.class_id = class.cid
- where class.cid is null;
- #class表锁独有的数据
- select
- student.*,
- class.*
- from
- student
- right join class
- on student.class_id = class.cid
- where student.class_id is null;
- select
- student.*,
- class.*
- from
- student
- left join class
- on student.class_id = class.cid
- union
- select
- student.*,
- class.*
- from
- student
- right join class
- on student.class_id = class.cid;
- select
- student.*,
- class.*
- from
- student
- left join class
- on student.class_id = class.cid
- where class.cid is null
- union
- select
- student.*,
- class.*
- from
- student
- right join class
- on student.class_id = class.cid
- where student.class_id is null;
七种join的书写规范的更多相关文章
- MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解
逻辑架构 存储引擎 查看当前安装的mysql提供的存储引擎 查看当前mysql默认的存储引擎 MyISAM和InnoDB SQL加载执行顺序 sql书写顺序 mysql解析器执行的顺序 考点:m ...
- 【知识库】-数据库_MySQL 的七种 join
掘金作者:haifeisi 文章出处: MySQL 的七种 join Learn [已经过测试校验] 一.内连接 二.左外连接 三.右外连接 四.左连接 五.右连接 六.全连接 七.两张表中都没有出现 ...
- 1. 七种join的sql编写
一.join图 二.sql演示 a.创建演示表及数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ----------------------- ...
- Mysql七种 JOIN 连接
内连接 SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key = B.Key 左外连接 SELECT <se ...
- MySQL的七种join
转载 原文地址 建表 在这里我们先建立两张有外键关联的两张表: CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept` ...
- MySQL 的七种 join
建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` ...
- MySQL七种join理论
1. 内连接 select * from A inner join B where A.key=B.key; 2. 左连接 select * from A left join B on A.key=B ...
- MYSQL 的七种join
建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` ...
- ECMA-262规范定义的七种错误类型
第一种:Error 所有错误的基本类型,实际上不会被抛出. 第二种:EvalError 执行eval错误时抛出. 第三种:ReferenceError 对象不存在是抛出. 第四种: ...
随机推荐
- zoj-3870 (二进制)
For an upcoming programming contest, Edward, the headmaster of Marjar University, is forming a two-m ...
- Leetcode(870)-优势洗牌
给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 1: 输入: ...
- 2017.8.11 think list
递推式与模数不互质,如何利用中国剩余定理综合答案
- Linux Schedule Cron All In One
Linux Schedule Cron All In One 定时任务 / 定时器 GitHub Actions Scheduled events Cron syntax has five field ...
- bash for mac
bash for mac https://sourabhbajaj.com/mac-setup/iTerm/ https://sourabhbajaj.com/mac-setup/iTerm/zsh. ...
- Flutter Vignettes
Flutter Vignettes Flutter Animation https://flutter.gskinner.com/ https://github.com/gskinnerTeam/fl ...
- RabbitMq手动确认时的重试机制
本文转载自RabbitMq手动确认时的重试机制 消息手动确认模式的几点说明 监听的方法内部必须使用channel进行消息确认,包括消费成功或消费失败 如果不手动确认,也不抛出异常,消息不会自动重新推送 ...
- 执行Python程序时模块报错
1. 在执行python程序时遇到 'ModuleNotFoundError: No module named 'xxxxx'' : 例如: 图片中以导入第三方的 'requests' 模块为例,此报 ...
- vue-eahars生产编译报错
{ test: /\.js$/, loader: 'babel-loader', include: [resolve('src'), resolve('test'), resolve('node_mo ...
- 死磕Spring之IoC篇 - 文章导读
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...