精华内容
下载资源
问答
  • 连接和外连接区别

    2009-08-28 00:42:00
    连接和外连接区别http://student.csdn.net/space.php?uid=3418&do=blog&id=10953在之前,我对MSSQL中的连接外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在...
    
    
    

    在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么菜的教程,各位大大们别笑话偶了,呵:D )

    有两个表A和表B。
    表A结构如下:
    Aid:int;标识种子,主键,自增ID
    Aname:varchar

    数据情况,即用select * from A出来的记录情况如下图1所示:


    图1:A表数据

    表B结构如下:
    Bid:int;标识种子,主键,自增ID
    Bnameid:int

    数据情况,即用select * from B出来的记录情况如下图2所示:



    图2:B表数据

    为了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100。
    有SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B表中的Bnameid就是两个连接字段。
    下图3说明了连接的所有记录集之间的关系:



    图3:连接关系图

    现在我们对内连接和外连接一一讲解。
    1.内连接:利用内连接可获取两表的公共部分的记录,即图3的记录集C
    语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid
    运行结果如下图4所示:



    图4:内连接数据

    其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
    2.外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)
      (1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。     
         语句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid
         运行结果如下图5所示:



    图5:左连接数据

         说明:
               在语句中,A在B的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=图3公共部分记录集C+表A记录集A1
               在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
               图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9
               表A记录集A1中存在的Aid=(图1中即A表中所有Aid)-(图3中即记录集C中存在的Aid),最终得出为:1 4 5 9
               由此得出图5中A左连接B的记录=图3公共部分记录集C+表A记录集A1,
               最终得出的结果图5中可以看出Bnameid及Bid非NULL的记录都为图3公共部分记录集C中的记录;Bnameid及Bid为NULL的Aid为1 4 5 9的四笔记录就是表A记录集A1中存在的Aid。

      (2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。
         语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid
         运行结果如下图6所示:



    图6:右连接数据

         说明:
               在语句中,A在B的左边,并且是Right Join,所以其运算方式为:A右连接B的记录=图3公共部分记录集C+表B记录集B1
               在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
               图2中即表B所有记录集B中存在的Bnameid为:2 3 6 7 8 11
               表B记录集B1中存在的Bnameid=(图2中即B表中所有Bnameid)-(图3中即记录集C中存在的Aid),最终得出为:11
               由此得出图6中A右连接B的记录=图3公共部分记录集C+表B记录集B1,
               最终得出的结果图6中可以看出Aid及Aname非NULL的记录都为图3公共部分记录集C中的记录;Aid及Aname为NULL的Aid为11的记录就是表B记录集B1中存在的Bnameid。
         
    总结:

    通过上面的运算解说,相信很多人已经想到,上面的情况(包括图3的关系图)说明的都只是A在B的左边的情况,
    以下语句B在A的右边的又会出现什么情况呢??
    select * from B Left JOIN A ON A.Aid=B.Bnameid
    select * from B Right JOIN A ON A.Aid=B.Bnameid

    其实对图3左右翻转一下就可以得出以下结论:
    select * from B Left JOIN A ON A.Aid=B.Bnameid和select * from A Right JOIN B ON A.Aid=B.Bnameid所得出的记录集是一样的

    select * from B Right JOIN A ON A.Aid=B.Bnameid和select * from A Left JOIN B ON A.Aid=B.Bnameid所得出的记录集也是一样的。

    展开全文
  • 左连接 ,右连接,连接和全外连接的4者区别

    万次阅读 多人点赞 2018-07-24 22:36:02
    基本定义:  left join (左连接):返回包括左表中的所有记录右表中连接字段相等的记录。... full join (全外连接):返回左右表中所有的记录左右表中连接字段相等的记录。 举个例子:  ...

    基本定义:

      left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。

      right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

      inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。

      full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。

    举个例子:

     A表          
    
      id   name  
    
      1  小王
    
      2  小李
    
      3  小刘
    
      B表
    
      id  A_id  job
    
      1  2    老师
    
      2  4    程序员

    内连接:(只有2张表匹配的行才能显示)

    select a.name,b.job from A a  inner join B b on a.id=b.A_id
    
      只能得到一条记录
    
      小李  老师

    左连接:(左边的表不加限制)

    select a.name,b.job from A a  left join B b on a.id=b.A_id
    
      三条记录
    
      小王  null
    
      小李  老师
    
      小刘  null

    右连接:(右边的表不加限制)

    select a.name,b.job from A a  right join B b on a.id=b.A_id
    
      两条记录
    
      小李  老师
    
      null  程序员

     

    全外连接:(左右2张表都不加限制)

    select a.name,b.job from A a  full join B b on a.id=b.A_id
    
      四条数据
    
      小王  null
    
      小李  老师
    
      小刘  null
    
      null  程序员

    注:在sql中l外连接包括左连接(left join )和右连接(right join),全外连接(full join),等值连接(inner join)又叫内连接。

     

    我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

     

    展开全文
  • MySQL—连接和外连接区别

    万次阅读 多人点赞 2019-03-20 13:12:30
    外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL 示例表 users表 mysql> select * from users; +----+-------+ | id | name | +----+-------+ | 1 | john | | 2 ...

    区别

    • 内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留
    • 外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL

    示例表

    users表

    mysql> select * from users;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | john  |
    |  2 | May   |
    |  3 | Lucy  |
    |  4 | Jack  |
    |  5 | James |
    +----+-------+
    5 rows in set (0.00 sec)

    topics表

    mysql> select * from topics;
    +----+---------------------------------------+---------+
    | id | title                                 | user_id |
    +----+---------------------------------------+---------+
    |  1 |  Hello world                          |       1 |
    |  2 | PHP is the best language in the world |       2 |
    |  3 | Laravel artist                        |       6 |
    +----+---------------------------------------+---------+
    3 rows in set (0.00 sec)

    内连接(inner join)

    • 示例
    mysql> select * from users as u inner join topics as t on u.id=t.user_id;
    +----+------+----+---------------------------------------+---------+
    | id | name | id | title                                 | user_id |
    +----+------+----+---------------------------------------+---------+
    |  1 | john |  1 |  Hello world                          |       1 |
    |  2 | May  |  2 | PHP is the best language in the world |       2 |
    +----+------+----+---------------------------------------+---------+
    2 rows in set (0.00 sec)

    inner可以省略,as是给表起别名,也可以省略

    mysql> select * from users u join topics t on u.id=t.user_id;
    +----+------+----+---------------------------------------+---------+
    | id | name | id | title                                 | user_id |
    +----+------+----+---------------------------------------+---------+
    |  1 | john |  1 |  Hello world                          |       1 |
    |  2 | May  |  2 | PHP is the best language in the world |       2 |
    +----+------+----+---------------------------------------+---------+
    2 rows in set (0.00 sec)

    以上两句等价于

    mysql> select * from users,topics where users.id=topics.user_id;
    +----+------+----+---------------------------------------+---------+
    | id | name | id | title                                 | user_id |
    +----+------+----+---------------------------------------+---------+
    |  1 | john |  1 |  Hello world                          |       1 |
    |  2 | May  |  2 | PHP is the best language in the world |       2 |
    +----+------+----+---------------------------------------+---------+
    2 rows in set (0.00 sec)

    外连接(outer join)

    • 左外连接(left outer join):以左边的表为主表
    • 右外连接(right outer join):以右边的表为主表

    以某一个表为主表,进行关联查询,不管能不能关联的上,主表的数据都会保留,关联不上的以NULL显示

    通俗解释就是:先拿出主表的所有数据,然后到关联的那张表去找有没有符合关联条件的数据,如果有,正常显示,如果没有,显示为NULL

    示例

    mysql> select * from users as u left join topics as t on u.id=t.user_id;
    +----+-------+------+---------------------------------------+---------+
    | id | name  | id   | title                                 | user_id |
    +----+-------+------+---------------------------------------+---------+
    |  1 | john  |    1 |  Hello world                          |       1 |
    |  2 | May   |    2 | PHP is the best language in the world |       2 |
    |  3 | Lucy  | NULL | NULL                                  |    NULL |
    |  4 | Jack  | NULL | NULL                                  |    NULL |
    |  5 | James | NULL | NULL                                  |    NULL |
    +----+-------+------+---------------------------------------+---------+
    5 rows in set (0.00 sec)

    等价于以下,只是字段的位置不一样

    mysql> select * from topics as t right join users as u on u.id=t.user_id;
    +------+---------------------------------------+---------+----+-------+
    | id   | title                                 | user_id | id | name  |
    +------+---------------------------------------+---------+----+-------+
    |    1 |  Hello world                          |       1 |  1 | john  |
    |    2 | PHP is the best language in the world |       2 |  2 | May   |
    | NULL | NULL                                  |    NULL |  3 | Lucy  |
    | NULL | NULL                                  |    NULL |  4 | Jack  |
    | NULL | NULL                                  |    NULL |  5 | James |
    +------+---------------------------------------+---------+----+-------+
    5 rows in set (0.00 sec)

    左外连接和右外连接是相对的,主要就是以哪个表为主表去进行关联

    展开全文
  • oracle中的连接和外连接区别

    千次阅读 2019-01-02 10:39:31
    表t_user1,t_user2,t_user3,各有id,name两列 id name 1 10A 2 20A ...连接分为两种:连接与外连接连接 连接,即最常见的等值连接,例: SELECT * FROM t_user1,t_user2...

    表t_user1,t_user2,t_user3,各有id,name两列

    id name
    1 10A
    2 20A
    id name
    1 10B
    3 30B
    id name
    1 10C
    4 40C

    连接分为两种:内连接与外连接。

    内连接

    内连接,即最常见的等值连接,例:

    SELECT * 
    FROM t_user1,t_user2
    WHERE t_user1.id = t_user2.id
    

    结果

    id name id name
    1 10A 1 10B

    外连接

    外连接分为左外连接,右外连接和全外连接。

    1. 左外连接 left outer join 或者 left join

    左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

    SELECT *
    FROM t_user1 
    LEFT OUTER JOIN  t_user2
    ON t_user1.id = t_user2.id
    Oracle 支持另一种写法
    SELECT * 
    FROM t_user1 ,t_user2
    WHERE t_user1.id=t_user2.id(+)
    

    结果:

    id name id name
    1 10A 1 10B
    2 20A

    三个表做左外连接

    SELECT *
    FROM t_user1
    LEFT OUTER JOIN t_user2
    ON t_user1.id=t_user2.id
    LEFT OUTER JOIN t_user3
    ON t_user1.id=t_user3.id
    Oracle 支持的另外一种写法
    SELECT *
    FROM t_user1,t_user2,t_user3
    WHERE t_user1.id=t_user2.id(+)
    AND t_user1.id=t_user3.id(+)
    

    结果:

    id name id name id name
    1 10A 1 10B 1 10C
    2 20A

    2. 右外连接 right outer join 或者 right join
    右外连接是在等值连接的基础上加上被连接表的不匹配数据

    SELECT *
    FROM t_user1
    RIGHT OUTER JOIN t_user2
    ON t_user1.id=t_user2.id
    
    Oracle支持的另一种写法
    SELECT *
    FROM t_user1,t_user2
    WHERE t_user1.id(+)=t_user2.id
    

    结果:

    id name id name
    1 10A 1 10B
    3 30B

    全外连接 full outer join 或者 full join

    全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上

    SELECT * 
    FROM t_user1
    FULL OUTER JOIN t_user2
    ON t_user1.id=t_user2.id
    全外连接的等价写法,对同一表先做左连接,然后右连接
    SELECT  t_user1.*,t_user2.*
    FROM t_user1
    LEFT OUTER JOIN t_user2
    ON t_user1.id = t_user2.id
    UNION
    SELECT  t_user1.*,t_user2.*
    FROM t_user2
    LEFT OUTER JOIN t_user1
    ON t_user1.id = t_user2.id
    

    结果:

    id name id name
    1 10A 1 10B
    2 20A
    3 30B
    展开全文
  • mysql 连接、自然连接、外连接区别

    万次阅读 多人点赞 2018-12-02 23:57:12
    连接、自然连接、外连接区别
  • 连接和外连接区别外连接中全连接、右连接、左连接有什么区别连接外连接左连接右连接全连接 连接 连接是保证两个表中所有的行都要满足连接条件。 外连接 在外连接中不满足条件的列也会显示出来,外连接...
  • 连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。 连接就是左表右表相同的数据...外连接分为左外连接,右外连接和全外连接。 左外连接left outer join或者left join 左外...
  • 连接与外连接区别

    千次阅读 2016-08-24 00:59:03
    外连接 分左连接、右连接、全连接。 左连接就是把左边表的数据全部保留,右边表只保留能连接上的数据。 右连接同左连接。 全连接就是保留2个表的全部数据,包括连接上的,也包括没有连接上的。 ...
  • 表的连接分为连接和外连接 连接 连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选 语法: select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件; 显示SMITH的名字部门名称 用...
  • mysql数据库连接和外连接区别

    千次阅读 2019-04-24 11:45:48
    连接 :select * from user u,orders o ...左外连接:select * from user u inner join orders o on u.id = o.user_id 右外连接:select * from user u left join orders o on u.id = o.user_id 连接 :inn...
  • 连接分为连接、外连接和交叉连接。 连接:内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。包括相等连接自然连接。 外连接外连接又分为左外连接、右外连接和完整外连接。 1. 左外连接(LEFT ...
  • sql中连接和外连接区别

    万次阅读 2019-04-30 14:30:42
    对于两张表,外连接和内连接的区别在于: 连接:只显示两表id匹配的左外连接:显示join左边的表的所有数据(不管两表是否匹配),对于不匹配的部分都用NULL显示右外连接:与左外连接相反,显示join右边的表的所有...
  • 一、交叉连接、连接、外连接区别 交叉连接又叫’笛卡尔积’,它是指不使用任何条件,直接将一个表的所有记录另一个表中的所有记录一一匹配。 连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的...
  • 深入分析连接、外连接、左连接、右连接、等值连接、自然连接自连接之间的区别,看这篇就够了!
  • 数据库的连接和外连接区别

    万次阅读 多人点赞 2018-03-26 11:50:03
    包括左外连接、右外连接和全外连接。左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。全外连接:左外连接 union 右外连接。示例:...
  • 连接和外连接区别和详解(全)

    千次阅读 2019-04-29 18:07:53
    1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。...外联接可以是左向联接、右向联接或完整外部联接。 在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定: 1)LEFT JOIN...
  • 用两个表(a_table、b_table),关联字段a_table.a_idb_table.b_id来演示一下MySQL的连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。 MySQL版本:Server version: 5.6.31 MySQL Community Server ...
  • 一、测试用例 其中学生表有两个属性学号(Sno)、姓名(Sname),选课表有两个属性课程号(Cno)、学号(Sno). 二、区别 ... 自然连接(natural join) ...内连接与自然连接区别就是保留重复的列属...
  • MySQL 连接查询 1.使用连接查询的场景 将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接); 进行数据的拼接(两张表的内容显示在一个结果表中 使用连接查询) ...内连接 inner join内连接 【掌握】
  • 外连接分:左外连接和外连接; 交叉连接,也类似于笛卡尔乘积,只是sql99与sql92语法关键字不同。 关键字 连接:inner 外连接:left、right 交叉连接:cross 语法: select 列表 from 表1 关键字 join 表2 on ...
  • 数据中的连接join分为连接、自然连接、外连接外连接又分为左外连接、右外连接、全外连接 当然,这些分类都是在连接的基础上,是从两个表中记录的笛卡尔积中选取满足连接的记录。笛卡尔积简单的说就是一个表里的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 299,417
精华内容 119,766
关键字:

内连接和外连接的区别