在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的书写规范的更多相关文章

  1. MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解

    逻辑架构   存储引擎 查看当前安装的mysql提供的存储引擎 查看当前mysql默认的存储引擎 MyISAM和InnoDB SQL加载执行顺序 sql书写顺序 mysql解析器执行的顺序  考点:m ...

  2. 【知识库】-数据库_MySQL 的七种 join

    掘金作者:haifeisi 文章出处: MySQL 的七种 join Learn [已经过测试校验] 一.内连接 二.左外连接 三.右外连接 四.左连接 五.右连接 六.全连接 七.两张表中都没有出现 ...

  3. 1. 七种join的sql编写

    一.join图 二.sql演示 a.创建演示表及数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ----------------------- ...

  4. Mysql七种 JOIN 连接

    内连接 SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key = B.Key 左外连接 SELECT <se ...

  5. MySQL的七种join

    转载 原文地址 建表 在这里我们先建立两张有外键关联的两张表: CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept` ...

  6. MySQL 的七种 join

    建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` ...

  7. 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 ...

  8. MYSQL 的七种join

    建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` ...

  9. ECMA-262规范定义的七种错误类型

    第一种:Error    所有错误的基本类型,实际上不会被抛出.   第二种:EvalError   执行eval错误时抛出. 第三种:ReferenceError    对象不存在是抛出. 第四种: ...

随机推荐

  1. JavaScript预编译过程理解

    1-JavaScript运行三部曲 语法分析 预编译 解释执行 语法分析很简单,就是引擎检查你的代码有没有什么低级的语法错误: 解释执行顾名思义便是执行代码了: 预编译简单理解就是在内存中开辟一些空间 ...

  2. Volatile如何保证线程可见性之总线锁、缓存一致性协议

    基础知识回顾 下图给出了假想机的基本设计.中央处理单元(CPU)是进行算术和逻辑操作的部件,包含了有限数量的存储位置--寄存器(register),一个高频时钟.一个控制单元和一个算术逻辑单元. 时钟 ...

  3. LWIP再探----内存池管理

    这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件MEM ...

  4. Spring框架整合Mybatis项目

    第一步:导入相关依赖jar包 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybat ...

  5. Trailing commas

    Trailing commas 尾逗号 https://caniuse.com/?search=trailing commas ESlint { "comma-dangle": [ ...

  6. 正则表达式 js 怎么获取匹配的变量

    正则表达式 js 怎么获取匹配的变量 $0 ~ $9 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. illustrating javascript prototype & prototype chain

    illustrating javascript prototype & prototype chain 图解 js 原型和原型链 proto & prototype func; // ...

  8. Web Components & HTML template & HTML slot

    Web Components & HTML template & HTML slot https://github.com/xgqfrms/es-next/issues/2 live ...

  9. (转载)VoLTE简介

    转载地址:http://www.360doc.cn/article/2909773_637471256.html,本文介绍了移动通信领域相关概念,如CS.PS.VoIP.VoLTE.IMS.CSFB. ...

  10. redis源码之SDS

    1:SDS介绍 我们在redis中执行命令 set key name 的时候,key和name都是字符串类型,而且字符串(string)在redis中是会经常用到的类型,那redis是如何保存字符串的 ...