精华内容
下载资源
问答
  • 外连接 之 左外连接 与 右外连接 为啥要用外连接 全外连接 总结 内连接 外连接

    外连接 之 左外连接 与 右外连接

    我们先来看个之前的 女神男朋友的案例
    传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分
    在这里插入图片描述
    在这里插入图片描述
    我们先考虑一一映射的情况 也就是男女不会脚踏多条船 而是一对一的
    那么 之前说了 我们以女神为主
    以女生的信息为主表 会有12行 因为有12个女生实例 匹配不到男生的就空着
    在这里插入图片描述
    以男生为主 以男生的信息为主表 则明显 只会有4个男生对象实例
    在这里插入图片描述
    这里,因为没有一一映射 (张有三个女朋友) 导致多了两行 但实际上是以男生为主表

    那么 以······为主 代码上怎么实现呢?
    我这里放第一个 女神为主表的实现代码:

    USE data1;
    SELECT 
      a.`id` AS 女神id,
      a.`name` AS 女神名字,
      a.`phone` AS 女神电话,
      a.`boyfriend_id` AS 男朋友id,
      b.`boyName` AS 男朋友名字 
    FROM beauty AS a
    LEFT JOIN boys AS b
    
    ON a.`boyfriend_id` = b.`id`;
    

    LEFT 关键字尤为重要 全称为LEFT OUTER 左外连接 可以省略outer

    或者我这么写

    FROM beauty AS a LEFT JOIN boys AS b
    

    懂了吧?left 左边为主表 所以是左外连接

    那么 我这么写呢?

    USE data1;
    SELECT 
      a.`id` AS 女神id,
      a.`name` AS 女神名字,
      a.`phone` AS 女神电话,
      a.`boyfriend_id` AS 男朋友id,
      b.`boyName` AS 男朋友名字 
    FROM  boys AS b
    RIGHT JOIN beauty AS a
    
    ON a.`boyfriend_id` = b.`id`;
    

    答案是一样的

    所以用的时候 左右连接 选一个就OK 一个道理而已

    为啥要用外连接

    我们看过十三节 其实用内连接的 等值连接 人家很智能的会把匹配不到的给去掉
    现在我们把匹配不到的给弄出来的岂不是画蛇添足?

    其实不然
    比如我还看到别的信息呢?也就是女神我一定要看 有没有男朋友我不是很在意 那就需要全表

    基于全表 我们再怎么筛选也不会漏数据(漏女神)

    全外连接

    所谓全外 就是左外+右外
    啥意思?两个表都是主表
    那么 两个表的所有实例都会表现出来 无论是否匹配得到
    那么按照之前

    名称 关键词 主表 实例
    左外 LEFT 女神为主表 12个实例女神
    右外 RIGHT 男神为主表 4个实例男神
    全外 FULL 两个都是主表 16个实例神
    USE data2;
    SELECT 
      b.`id` AS 男神id,
      b.`boyName` AS 男神名字,
      b.`userCP` AS 男神指数,
      a.`id` AS 女神id,
      a.`name` AS 女朋友名字 
    FROM beauty AS a
    FULL JOIN boys AS b
    ON a.`boyfriend_id` = b.`id`;
    

    在这里插入图片描述
    不过 MySQL 支持 全连接 其他的都OK 这里就不测试了 代码可以在支持的SQL引擎中实现:

    总结 内连接 外连接

    我拿男神女神匹配这个案例来说
    男神是女神的真子集 也就是匹配完 女生还有圣女 男生全都抱得美人归了

    名称 关键词 结果 数学表达 实例
    内连接 INNER 互相都能匹配得到的 交集 4个实例CP神
    左外连接 RIGHT 左边的女神实例保留 其他尽量匹配 匹配不到为NULL 女神集 4个实例男神
    右外连接 FULL 右边的男神实例保留 其他尽量匹配 匹配不到为NULL 男神集 16个实例神
    全外连接 FULL 左右神的实例都保留 匹配不到就为NULL 全集 16个实例神

    这个是结合代码的示意图 看看能否理解:
    在这里插入图片描述

    交叉连接

    还记得我们之前的那个 笛卡尔乘积 问题嘛
    传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分

    其实就好像数学考试的握手游戏
    这里 每个人(男神或者女神)都必须要和其他所有异性匹配 成一行实例输出

    我们当时没用多表查询 瞎搞出来的代码,出来了这样的效果
    在这里插入图片描述
    其实 交叉连接就是得到这样的结果
    这两段代码是等效
    意思 不用INNER OUTER限定 默认就是交叉连接

    #1  错误写法
    SELECT * FROM `beauty`,`boys`  
    
    
    #2  SQL99 交叉连接写法
    SELECT 
      a.*,
      b.* 
    FROM
      `beauty` AS a,
      `boys` AS b 
    CROSS JOIN `boys` ;
    
    

    下一站:数据库学习之MySQL (十七)—— SQL99 主查询与子查询 子查询分类之WHERE的子查询

    展开全文
  • 之前的博客内容我们分享了数据表的查询与管理,但那只是针对数据库中的一个...基本连接,内连接,左外连接,右外连接全外连接,交叉连接,自连接 如果对连接方式了解的人看到这里会感到很熟悉,但对于不了解的人...

         之前的博客内容我们分享了数据表的查询与管理,但那只是针对数据库中的一个表格进行的查询管理,现在如果我们想要同时看到两个数据表中的数据的话,那要怎么办呢?采用多连接查询的方式。

         SQL中有哪几种多连接的方式?

         有七种连接的方式:

    基本连接,内连接,左外连接,右外连接,全外连接,交叉连接,自连接

        如果对连接方式了解的人看到这里会感到很熟悉,但对于不了解的人则是一头雾水,没关系,我们来梳理一下,了解的人可以再重复一遍, 顺便可以提点意见^_^,不了解的人我们来先初步认识一下以上七种连接方式。

    一、基本连接

    ①什么是基本连接?

    基本连接又称多表连接,是对多个表内容的查询与连接。

    ②为什么会有多表连接的存在?

    基于数据库的范式理论,数据库的数据查询一个表格未能把信息全部查询出来,所以就涉及到了多表连接的查询。

    ③多表连接如何连接?

    select 不同表格中的列名

    from 不同表格

    问题一

    A,B代表什么?

    AB是此代码中的简化定义,在From子句中,表格后面加一个空格即表示可以创建快捷访问或者是重新命名,即班级信息为A表,梅里号为B表

    问题二

    为什么搜索出来这么多信息?

    梅里号表中的数据如下:

    因为以上只是select from 的查询语句,而代码则设置了7个内容,所以共查询了7次。以上表格只是简单的查询语句,我们还没有完成多表的连接,多表连接的三要素中我们还差一个where语句。

    问题三

    加上where语句的效果?

     

    这就查询出来咯,所以,通过以上的例子让我们更加清晰的看到了多表连接的三个必要条件。

    问题四

    where 在这里起什么作用呢?

    关系连接:A表中的班级与B表中的班级建立关联。

    二、内连接

    ①什么是内连接?

    内连接也是多表连接,对多表数据进行查询和连接

    ②那与基本连接有什么区别呢?

    我们先看一下他的代码及操作效果:

     

    会发现与基本连接的查询结果是一样的。

    那区别在哪里?

    内连接与基本连接的查询效果是一样的,都是对多表的查询,只是表现形式,代码不一样而已。

    我们看一下代码区别:

    基本连接:

    内连接:

    即在第二个和第三个必备条件上面有区别。

    三、外连接,左外连接,右外连接,全外连接

    ①什么是外连接?

    在了解外连接之前我们再重申一下内连接

    内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

    外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

    左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

    右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

    全外连接:左外连接 + 右外连接。

    ②内连接与外连接如何区分?

    我的个人理解,内外可看做是符合条件的行与符合条件的行

    ③外连接、左外连接、右外连接,全外连接有什么区别?

    我们拿代码及其效果来说话:

    A表:梅里号数据:

    B表:班级信息数据

    内连接:

    连接结果仅包含符合连接条件的行

    外连接:

    连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。

    左外连接:

    不仅包含1-6符合条件的行,还包含左侧的梅里号表中的不符合条件的其他全部数据。

    右外连接:

    不仅包含1-6符合条件的行,还包含右侧的班级信息表中的其他不符合条件的全部数据。

    全外连接:

    不仅包含1-6符合条件的行,还包含左右两侧的班级信息表及梅里号表中的其他不符合条件的全部数据。

    四、交叉连接

    我们来看一下示例就会清晰多了:

    交叉连接不带where子句,返回的连接数是第一个表中符合查询条件的数据行数乘以第二个表中符合条件的数据行数,一下表格中第一表中7行数据,第二表中7行数据,那么交叉连接的查询数为7*7=49

    问题一:

    交叉的连接是按照什么方式连接的呢?

    我们来看以下连个表后应该会清楚一些

     

    即:以cross join右侧的表格为基数,逐步的一对多。

    问题二:

    加上where子句是什么样的呢?

    与基本连接,与内连接的结果是一样的,因为查询的where关联条件是AB表中连接部分‘班级’的交叉数据,那不就是相同数据么。

    五、自连接

    自连接顾名思义:自己与自己连接,一对多,即同一个数据表的多表连接

    '梅里号'表格数据:

    自连接后是什么样的呢?

    与同一个表格的交叉连接数据相同

    六、思维导图

     

     

     

     

     

     

    展开全文
  • sql左外连接、右外连接全外连接

    千次阅读 2015-06-18 20:03:44
    一 语法 1 左外连接 LEFT JOIN或LEFT OUTER JOIN  2 右外连接 RIGHT JOIN 或 ...3 全外连接 FULL JOIN 或 FULL OUTER JOIN FULL JOIN = LEFT JOIN + RIGHT JOIN 二 demo 两张表,表结构如下 student 表 CREAT

    一 语法

    1 左外连接 LEFT  JOIN或LEFT OUTER JOIN 

    2 右外连接  RIGHT  JOIN 或 RIGHT  OUTER  JOIN

    3  全外连接  FULL  JOIN 或 FULL OUTER JOIN   mysql不支持全外连接 等价方式 FULL  JOIN  =  LEFT  JOIN + RIGHT  JOIN 

    二 demo

    两张表,表结构如下

    student 表

    CREATE TABLE `student` (
      `s_id` varchar(20) NOT NULL DEFAULT '',
      `s_name` varchar(30) DEFAULT NULL,
      `t_id` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`s_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    teacher表

    CREATE TABLE `teacher` (
      `t_id` varchar(20) NOT NULL DEFAULT '',
      `t_name` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`t_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    说明 下面查询中出现的student0  student1  student3表结构均与student一样 ,student0  、student2  、student3分别包含有0、1、3条teacherid

    表含数据

    student3


    student1



    student0



    teacher




    表为teacher student3

    左连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student3 AS s
    LEFT JOIN teacher  as t ON s.t_id = t.t_id
    
    


    右连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student3 AS s
    right JOIN teacher  as t ON s.t_id = t.t_id
    


    外连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student3 AS s
    INNER  JOIN teacher  as t ON s.t_id = t.t_id
    
    


    表为teacher student1

    左连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student1 AS s
    LEFT JOIN teacher  as t ON s.t_id = t.t_id
    
    


    右连接
    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student1 AS s
    right JOIN teacher  as t ON s.t_id = t.t_id
    


    外连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student1 AS s
    INNER  JOIN teacher  as t ON s.t_id = t.t_id
    
    


    表为teacher student0

    左连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student0 AS s
    LEFT JOIN teacher  as t ON s.t_id = t.t_id
    
    


    右连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student0 AS s
    right JOIN teacher  as t ON s.t_id = t.t_id
    


    外连接

    SELECT
    	s.s_id AS `学生id`,
    	s.s_name AS `学生姓名`,
    	t.t_id AS `老师id`,
    	t.t_name AS `老师姓名`
    FROM
    	student0 AS s
    INNER  JOIN teacher  as t ON s.t_id = t.t_id
    
    






    展开全文
  • mysql 全外连接报错的原因

    千次阅读 2018-12-09 14:48:57
    mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left right union right 代替。 全外连接图(非原创图) 下面的是全外连接例子: select * from table a A(A为别名)LEFT JOIN ...

    mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left right union right 代替。
    全外连接图
    全外连接图(非原创图)

    下面的是全外连接例子:

    select * from table a A(A为别名)LEFT JOIN table b B on A.id=B.id
    union
    select * from table a A RIGHT JOIN table b B on A.id=B.id;
    

    这个是全外连接去除公共部分,两个查询语句都要加上where 只加一句where 是无效的。

    select * from table a A(A为别名)LEFT JOIN table b B on A.id=B.id
    where B.id is null
    union
    select * from table a A RIGHT JOIN table b B on A.id=B.id
    where A.id is null;
    

    在这里插入图片描述
    全外连接去除公共部分图(非原创图)

    展开全文
  • 连表查询(内查询,左查询,右查询,外查询) ...全外连接 连表查询(内查询,左查询,右查询,外查询) 说明 mysql版本:Server version: 5.7.17 MySQL Community Server (GPL) 操作系统:win...
  • Mysql 全外连接的实现

    千次阅读 2018-12-27 22:45:15
    没概念,不熟悉内连接、左外连接、右外连接全外连接的同学请自行百度,很好理解的,跟数学的集合比较相似 如标题,在弄SSM的时候发现Mysql是没有全外连接,两个完全没有关系的表catalog和itemslabel,弄时候的结果...
  • 如下:二、外连接:结果包含符合条件的行,同时包含不符合条件的行(分为左外连接、右外连接和全外连接)1、左外连接:左表全部行+右表匹配的行,如果左表中某行 在右表中没有匹配的行,则右表该行显示NULL。...
  • Oracle左连接、右连接、全外连接以及(+)号用法 1、准备工作 Oracle 外连接(OUTER JOIN)包括以下: · 左外连接(左边的表不加限制) · 右外连接(右边的表不加限制) · 全外连接(左右两表都不加限制) 对应SQL...
  • 1. 自然连接(*natural join)* 自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列, `SELECT*FROM student NATURAL JOIN score;` 显示结果如下: 2. 内连接(inner join) 和自然...
  • hive的join操作,只支持等值连接创建customers和orders表,一对多关系创建customers表create table customers(id int,name string,age int) row format delimited fields TERMINATED by '\t' lines TERMINATED by...
  • 连接(inner join) 满足条件的记录才会出现在结果集中 隐式内连接: select first_name, last_name, order_date, order_amount from customers, orders where customers.customer_id = orders.custome...
  • 2、外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制)   3、自连接 通过这几种数据的关系可以查找自己想要的数据不用拘于以前的主外键了(没有...
  • 左连接、右连接、交叉连接、全外连接 第一部分、连接查询 一、内连接 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种: 1、等值连接:在连接条件中使用等于...
  • 本文来自:... 阅读目录 1、准备工作2、左外连接(LEFT OUTER JOIN/ LEFT JOIN)3、右外连接(RIGHT OUTER JOIN/RIGHT JOIN)4、全外连接(FULL OUTER JOIN/FULL JOIN) 回到目录 1、准备工作
  • 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN。 在左连接和右连接时都会以一张A表为基础表,该表的内容会全部显示,然后加上A表和B表...
  • 【1】等值连接 1)连接:凡是查询涉及到两个以上的表,就需要将表连接; 2)就是用where子句做的连接查询;连接查询的列名可以不同; 【2】自然连接: select * from  ...【3】左外连接 select * from  a_tbl
  • sql查询之左连接,右连接,内连接以及全外连接的使用(测试常见面试题欧)
  • 中间加个OUTER ,例如左外连接(LEFT OUTER JOIN)、全外连接(FULL OUTER JOIN),跟他本身是没有区别的。可以说左连接是左外连接的缩写。 2.通过WHERE来连接两个表的数据,属于数据库语言中的隐性连接,现在用的...
  • Mysql中实现全外连接

    万次阅读 2019-09-01 17:31:36
    MySql中多表查询只提供了内连接,左外连接与右外连接: table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr 1】INNER JOIN ON内连接(只写join时默认为内连接) ...
  • 二、左外连接(Left outer join/ left join) left join是以左表的记录为基础的,例如以a表为基础表,b可以看成右表,它的结果集是a表中的数据,在加上a表和b表匹配的数据。左表a的记录将会全部表示出来,而右
  • SQL 99的连接查询与SQL 92 的连接查询原理基本相似,不同的是SQL 99 连接查询的可读性更强——查询用的多个数据表显式使用xxx join连接,而不是直接依次排列在from之后,from后只需要放一个数据表;连接条件不再放在...
  • Oracle内连接、左外连接、右外连接全外连接 表 TESTA,TESTB,TESTC, 各有 A, B 两列 A B 001 10A 002 20A ...
  • 全外连接的用法实例和注意点

    千次阅读 2007-12-09 19:05:00
    一. 全外连接技术全外连接:返回符合两张表的所有记录。全外连接的用法实例和注意点实例说明:现有如下两张表表一(表名:T1)F1F2200501102005022020050330表二(表名:T2)F1F22005022020
  • -- 测试1 的右外连接 等价于下面的sql(注意下面是左外连接,可见左外连接和右外连接可以转化) SELECT d.depID,d.depName,e.empid,e.empName FROM employees e LEFT OUTER JOIN departments d ON d.depID = e....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 969,681
精华内容 387,872
关键字:

全外连接