最近,突然想起来数据库有好些时间没用到,所以,想把数据库有关的知识回顾一下,所以接下来这个月,基本上会以数据库的帖子来写为主,首先,很多同学都会有个错觉,觉得学习数据库会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. 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...

  2. 关于mybatis使用小于号大于号出错的解决方案

    原文链接:https://blog.csdn.net/weixin_38061311/article/details/99943807 mybatis 使用的xml的映射文件, 所以里面的标签都是在& ...

  3. 解决错误 CS1617 Invalid option '7.1' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6.

    解决错误 CS1617 Invalid option '7.1' for /langversion; must be ISO-1, ISO-2, Default or an integer in ra ...

  4. js Date format(日期格式化:yyyy-MM-dd HH:mm:ss.S)

    今天在做日期显示的时候,那个显示格式困扰了很久,各种组件都尝试了,总是不如意,最后自己网上找了一个,然后稍微修改一下,感觉这个Util挺常用的,这里mark一下 Date.prototype.form ...

  5. 【Python】使用Selenium实现淘宝抢单

    最近,小明为了达成小姐姐的愿望,在某宝买到心仪的宝贝,再加上又迷上了python,就通过python轻而易举地实现了(个人声明:对Java来说,这并不是背叛). 需求分析&前期准备 需求其实很 ...

  6. Perl如何安装新模块/包

    今天写Perl程序时需要调用到Tk模块,但是我机器上却没有T T. Perl小白,不知道肿么装新模块.网上搜了一下资料,和大家分享下. 本人机器Windows的系统,没法提供Unix或者Linux的测 ...

  7. 当我们创建HashMap时,底层到底做了什么?

    jdk1.7中的底层实现过程(底层基于数组+链表) 在我们new HashMap()时,底层创建了默认长度为16的一维数组Entry[ ] table.当我们调用map.put(key1,value1 ...

  8. 恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合

    在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee { private Inte ...

  9. Java常见23中设计模式之【代理模式】

    一.静态代理模式 静态代理,使用继承的方式实现自己新增的服务 这种模式可以实现帮助被代理者完成一些前期的准备工作和后期的善后工作,但是核心的业务逻辑仍然是由被代理者完成. 在某些情况下,一个客户不想或 ...

  10. Typography convention

    1 h1 Chapter title centered,number three in bold,used ##. 1.1 h2 The chapter is a section, and the s ...