在mysql中的两表进行连接时,总共有7种连接情况,具体可见下图

  由图的从左到右的顺序

    图1.左连接(left join):返回左表中的所有记录和右表中的连接字符字段相等的记录,若右表没有匹配值则补NULL

    图2.右连接(right join):返回右表中的所有记录和右表中的连接字符字段相等的记录,若左表没有匹配值则补NULL

    图3.内连接(inner join):只有满足条件的巨鹿才会出现在查询结果中,即左表和右表的公共部分

    图4.左表中的独自拥有的部分,去除与右表中的重合部分

    图5.右表中的独自拥有的部分,去除与左表中的重合部分

    图6.左表和右表的重合部分,以及左右表的重和部分(可以看成两表的左连接和右连接的拼接)

    图7.左表和右表的独自拥有部分(可以看成是图4和图5的拼接)

实例详解:

   创建相关表以及插入数据

  

  1. create table student(
  2. sid int(11) primary key auto_increment,
  3. sname varchar(20) not null,
  4. class_id int(11) null
  5. );
  6. create table class(
  7. cid int(11) primary key,
  8. cname varchar(20) not null
  9. );
  10. alter table student add foreign key(class_id) references class(cid);
  11. desc student;
  12. insert into class(cid,cname) values
  13. (1,'一年级'),
  14. (2,'二年级'),
  15. (3,'三年级'),
  16. (4,'四年级'),
  17. (5,'五年级'),
  18. (6,'六年级');
  19. set sql_safe_updates = 0;
  20. insert into student(sid,sname,class_id) values
  21. (1,'张三',1),
  22. (2,'李四',4),
  23. (3,'王五',1),
  24. (4,'赵柳',2),
  25. (5,'孙权',6),
  26. (6,'钱升',null),
  27. (7,'刘备',3),
  28. (8,'周往',5);
  1. #内连接
  2. select
  3. student.*,
  4. class.*
  5. from
  6. student
  7. inner join class
  8. on student.class_id = class.cid;

  1. #左连接
  2. select
  3. student.*,
  4. class.*
  5. from
  6. student
  7. left join class
  8. on student.class_id = class.cid;

  1. #右连接
  2. select
  3. student.*,
  4. class.*
  5. from
  6. student
  7. right join class
  8. on student.class_id = class.cid;

  1. #student数据表锁独有的数据
  2. select
  3. student.*,
  4. class.*
  5. from
  6. student
  7. left join class
  8. on student.class_id = class.cid
  9. where class.cid is null;

  1. #class表锁独有的数据
  2. select
  3. student.*,
  4. class.*
  5. from
  6. student
  7. right join class
  8. on student.class_id = class.cid
  9. where student.class_id is null;

  1. select
  2. student.*,
  3. class.*
  4. from
  5. student
  6. left join class
  7. on student.class_id = class.cid
  8. union
  9. select
  10. student.*,
  11. class.*
  12. from
  13. student
  14. right join class
  15. on student.class_id = class.cid;

  1. select
  2. student.*,
  3. class.*
  4. from
  5. student
  6. left join class
  7. on student.class_id = class.cid
  8. where class.cid is null
  9. union
  10. select
  11. student.*,
  12. class.*
  13. from
  14. student
  15. right join class
  16. on student.class_id = class.cid
  17. 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. zoj-3870 (二进制)

    For an upcoming programming contest, Edward, the headmaster of Marjar University, is forming a two-m ...

  2. Leetcode(870)-优势洗牌

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 1: 输入: ...

  3. 2017.8.11 think list

    递推式与模数不互质,如何利用中国剩余定理综合答案

  4. Linux Schedule Cron All In One

    Linux Schedule Cron All In One 定时任务 / 定时器 GitHub Actions Scheduled events Cron syntax has five field ...

  5. bash for mac

    bash for mac https://sourabhbajaj.com/mac-setup/iTerm/ https://sourabhbajaj.com/mac-setup/iTerm/zsh. ...

  6. Flutter Vignettes

    Flutter Vignettes Flutter Animation https://flutter.gskinner.com/ https://github.com/gskinnerTeam/fl ...

  7. RabbitMq手动确认时的重试机制

    本文转载自RabbitMq手动确认时的重试机制 消息手动确认模式的几点说明 监听的方法内部必须使用channel进行消息确认,包括消费成功或消费失败 如果不手动确认,也不抛出异常,消息不会自动重新推送 ...

  8. 执行Python程序时模块报错

    1. 在执行python程序时遇到 'ModuleNotFoundError: No module named 'xxxxx'' : 例如: 图片中以导入第三方的 'requests' 模块为例,此报 ...

  9. vue-eahars生产编译报错

    { test: /\.js$/, loader: 'babel-loader', include: [resolve('src'), resolve('test'), resolve('node_mo ...

  10. 死磕Spring之IoC篇 - 文章导读

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...