最近,突然想起来数据库有好些时间没用到,所以,想把数据库有关的知识回顾一下,所以接下来这个月,基本上会以数据库的帖子来写为主,首先,很多同学都会有个错觉,觉得学习数据库会sql语句的增删改查就够了,其实,这仅仅是片面的认知,掌握了这些还远远不够,sql是你作为谋求生计的基本功,不会也得会,但是,要想变得优秀,还得学习更多的,比如:存储器、索引、事务等等。今天先和大家聊聊面试时技术官常会问你的:你说说看左连接与右连接以及全连接的区别,这个问题不管你是面试开发岗、测试岗甚至是产品岗,都会问到,接下来的慢慢看,就当回顾一下旧知识

  在具体的介绍之前,先准备两张表,拿我自己的举例:test001(看作左表) 、  test002(看作右表)

1.内连接

关键字:inner join

sql语句:select*  from  table_left(表名)   inner join table_right(表名)    on   table_left.id  = table_right.id 

注释说明:结合两张表的记录,返回相关的查询结果,返回的是两个表的交集部分(即阴影部分),见下图

用我刚刚上面举例的两张表查询一下:SELECT* FROM test001 INNER JOIN test002 ON test001.id=test002.id

两张表都有主键id,内连接的查询就是找出相同的主键以及主键附带的字段信息,这里咱们可以把sql再改进一下,让查询结果看起来不是那么累赘

sql语句 :   SELECT test001.id AS ID ,test001.username,test002.job FROM test001 INNER JOIN test002 ON test001.id=test002.id

2.左连接

关键字:left join

sql语句:select*  from  table_left(表名)   left join table_right(表名)    on   table_left.id  = table_right.id 

注释说明:left join 是left outer join 的简写,全称其实是左外连接,属于外连接的一种,左连接查询,左表的信息全部展示出来,右表只会展示符合搜索条件的信息,不足的地方记为NULL

同样的,用我刚刚最上面准备好的两张表查询一下:SELECT test001.id AS ID ,test001.username,test002.job FROM test001 LEFT JOIN test002 ON test001.id=test002.id

3.右连接

关键字:right join

sql语句:select*  from  table_left(表名)   right join table_right(表名)    on   table_left.id  = table_right.id 

注释说明:right join 是right outer join 的简写,全称是右外连接,也属于外连接的一种,右连接查询,右表的信息全部展示出来,左表只会展示符合搜索条件的信息,不足的地方记为NULL

如出一辙,用我刚刚最上面准备好的两张表查询一下:SELECT test002.id AS ID ,test001.username,test002.job FROM test001 RIGHT JOIN test002 ON test001.id=test002.id

看上图的右连接查询结果:右表的信息都有,左表的信息,有的就展示,没有的有用NULL表示,很容易区别

4.全连接

关键字:union / union all

sql语句:(select colum1,colum2,colum3... from  table_left) union (select colum1,colum2,colum3... from  table_right

     (select colum1,colum2,colum3... from  table_left) union all (select colum1,colum2,colum3... from  table_right

全连接:实际上就是把两张表合并,不管有的没的,都先给整上来。

注意事项:①用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并;通常采用union all 进行合并;

        ②被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

      (select  colum1,colum2....from A order by id) union all (select  colum1,colum2... from B order by id); //没有排序效果

       (select colum1,colum2... from A ) union all (select colum1,colum2... from B ) order by id; //有排序效果

同样的,我用最开始最上面准备的两张表,来进行全连接合并

查询结果看上图:左表的字段信息和右表的字段信息都全部显示,如果你想进行id排序也可以,加个order by id

(SELECT test001.id,test001.username FROM test001)UNION ALL (SELECT test002.id,test002.job FROM test002) ORDER BY id

友情提示:union会自动将完全重复的数据去除掉;union all会保留那些重复的数据;所以,建议大家合理使用,根据自己的需求进行sql查询

本文注重原创,本着资源共享的原则,如若需要转载,请注明出处:https://www.cnblogs.com/xj-excellent/p/13292291.html,文中如果有不对的地方请广大网友指出,可直接留言评论,我们一起共勉,共同进步。

Mysql----左连接、右连接、内连接、全连接的区别的更多相关文章

  1. 关于数据库的左,右,内,外连接,Union和Union all---------笔记

    1.左连接 select a.filed1,a.filed2,b.filed1 from a (左表) left join b(右表) on a.commonfiled = b.commonfiled ...

  2. MySQL 进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接

    #进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接 /* 含义: 当查询的字段来自于多个表时, 就会用到连接查询 一: sql 92标准 :等值连接 ,(#内连接) 1 ...

  3. MySQL之表连接-> 内连接,左外连接,右外链接,全连接

    1.首先创建student库 create database student; 2. 在数据库中创建boy表 和 girl表, mysql> create table boy( -> bo ...

  4. PHP左、右、内连接

    left join   :左连接,返回左表中所有的记录以及右表中连接字段相等的记录.right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录.inner join: 内连接,又 ...

  5. 使用navicat连接只开放内网ip连接的数据库

    无法通过Navicat来连接MySQL,比较常见的两种问题? 服务器上自己安装的MySQL数据库,且未开通外网登录账号 直接购买服务商的MySQL数据库不创建公网访问,只有内网访问   背景: 公司数 ...

  6. 云主机不能外网ssh连接,只能内网ssh连接的问题处理

    某台服务器外网无法ssh,内网可以ssh连接,ping值延时比较大 安装iftop查看流量 yum install -y iftop iftop界面含义如下 第一行:带宽显示 中间部分:外部连接列表, ...

  7. Linq左关联 右关联 内关联

    1.左连接: var LeftJoin = from emp in ListOfEmployees join dept in ListOfDepartment on emp.DeptID equals ...

  8. Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...

  9. 性能分析之TCP全连接队列占满问题分析及优化过程(转载)

    前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如何进行分析及解决的. 理解下TCP建立连接过程与队列 从图中明显可以看出建立 TCP 连接的时候, ...

  10. TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?

    前言 网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下: 增大 TCP 半连接队列的方式是增大 /proc/sys/net/ipv4/tcp_max_syn_backlog: 增大 TC ...

随机推荐

  1. 分析ThreadLocal的弱引用与内存泄漏问题

    目录 一.介绍 二.问题提出 2.1内存原理图 2.2几个问题 三.回答问题 3.1为什么会出现内存泄漏 3.2若Entry使用弱引用 3.3弱引用配合自动回收 四.总结 一.介绍 之前使用Threa ...

  2. 深度学习中损失函数之RMS和MES

    学校给我们一人赞助了100美元购买英文原版图书,几方打听后选择了PRML 即Pattern Recognition and Machine Learning.自从拆封这本书开始慢慢的品读,经常会有相见 ...

  3. js中each函数的用法

    官方说明: jQuery.each(object, [callback]) 概述 通用例遍方法,可用于例遍对象和数组. 不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任 ...

  4. JVM之HotSpot虚拟机是如何发起内存回收的?

    1.背景 在上一节中,我们掌握了垃圾收集的一些算法,也弄明白了分代回收的原理, 那么HotSpot虚拟机是如何发起内存回收的? 2.如何找到GC Roots根节点(枚举根节点) 从可达性分析中GC R ...

  5. 深入浅出PyTorch(算子篇)

    Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...

  6. new jup在新一代中存在

    1.灰度发布服务动态路由 动态配置路由规则,实现对调用流量的精确控制.可配置基于版本.IP.自定义标签等复杂的规则.2.服务鉴权示例2需求:服务 provider-demo 只允许来自 consume ...

  7. JavaWeb网上图书商城完整项目--验证码

    1.首先需要集成下面的jar 2.在web.xml配置验证码的servlet <?xml version="1.0" encoding="UTF-8"?& ...

  8. android handle详解2 主线程给子线程发送消息

    按照android handler详解分析的原理我们可以知道,在主线程中创建handle对象的时候,主线程默认创建了一个loop对象使用threalocal函数将loop对象和主线程绑定. 我们能不能 ...

  9. Jmeter系列(30)- 详解 JDBC Request

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 JDBC Request 主要是 ...

  10. Python3-gevent模块-单线程下的"并发"-协程

    博客转载 http://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/tkqasn/p/5705338.h ...