zoukankan      html  css  js  c++  java
  • mysql中的几种join 及 full join问题

    【注:本文转自 https://blog.csdn.net/u012410733/article/details/63684663】 在其基础上添加了一些内容

    【注意】:Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+ union+右外连接实现

    初始化SQL语句:

    /*join 建表语句*/
    drop database if exists test;
    create database test;
    use test;
     
    /* 左表t1*/
    drop table if exists t1;
    create table t1 (id int not null,name varchar(20));
    insert into t1 values (1,'t1a');
    insert into t1 values (2,'t1b');
    insert into t1 values (3,'t1c');
    insert into t1 values (4,'t1d');
    insert into t1 values (5,'t1f');
     
    /* 右表 t2*/
    drop table if exists t2;
    create table t2 (id int not null,name varchar(20));
    insert into t2 values (2,'t2b');
    insert into t2 values (3,'t2c');
    insert into t2 values (4,'t2d');
    insert into t2 values (5,'t2f');
    insert into t2 values (6,'t2a');

    1、笛卡尔积(没有加筛选条件的内连接)

    两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。

    mysql> select * from t1 join t2;

     或者

    mysql> select * from t1 inner join t2;

    或者

    mysql> select * from t1, t2;

    这里写图片描述

    2、左连接

    两表关联,左表全部保留,右表关联不上用null表示。

    这里写图片描述

    mysql> select * from t1 left join t2 on t1.id = t2.id;

    这里写图片描述

    3、右连接

    右表全部保留,左表关联不上的用null表示。

    这里写图片描述

    mysql> select * from t1 right join t2 on t1.id =t2.id;

    这里写图片描述

    4、内连接

    两表关联,保留两表中交集的记录。

    这里写图片描述

    mysql> select * from t1 inner join t2 on t1.id = t2.id;

    这里写图片描述

    5、左表独有

    两表关联,查询左表独有的数据。

    这里写图片描述

    
    
    mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null;

    这里写图片描述

    6、右表独有

    两表关联,查询右表独有的数据。

    这里写图片描述

    mysql> select * from t1 right join t2 on t1.id = t2.id where t1.id is  null;

    这里写图片描述

    7、全连接

    两表关联,查询它们的所有记录。

    这里写图片描述

    oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。

    1 mysql> select * from t1 left join t2 on t1.id = t2.id
    2     -> union 
    3     -> select * from t1 right join t2 on t1.id = t2.id;
    • 这里写图片描述

    8、并集去交集

    两表关联,取并集然后去交集。

    这里写图片描述

    1 mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null
    2     -> union 
    3     -> select * from t1 right join t2 on t1.id = t2.id where t1.id is null;

    这里写图片描述

    9、自然连接

    通过MySql自己的判断完成连接过程,不需要指定连接条件。MySql会使用表内的,相同的字段,作为连接条件。

    自然连接分为内外之分。

    如果两个表有多个相同字段,或者没有相同字段,则自然连接返回为空。

     

    修改表的字段名称

    ALTER TABLE t1 CHANGE COLUMN name t1_name VARCHAR(20) 
    ALTER TABLE t2 CHANGE COLUMN name t2_name VARCHAR(20) 

    自然连接,内连接

    自然连接,左连接

    自然连接,右连接

  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/canger/p/9760217.html
Copyright © 2011-2022 走看看