zoukankan      html  css  js  c++  java
  • 【12】连接查询:内连接、左连接、右连接

    1、四种连接查询

    内连接:inner join 或者 join

    外连接:

    左连接:left join 或者 left outer join

    右连接:right join 或者 right outer join

    完全外连接:full join 或者 full outer join

    2、创建两个表:person表和card表

    mysql> create table person(
        -> id int,
        -> name varchar(20),
        -> cardId int
        -> );
    mysql> create table card(
        -> id int,
        -> name varchar(20)
        -> );

    插入数据:

    INSERT INTO card VALUES(1,'饭卡');
    INSERT INTO card VALUES(2,'建行卡');
    INSERT INTO card VALUES(3,'农行卡');
    INSERT INTO card VALUES(4,'工商卡');
    INSERT INTO card VALUES(5,'邮政卡');
    INSERT INTO person VALUES(1,'张三',1);
    INSERT INTO person VALUES(2,'李四',3);
    INSERT INTO person VALUES(3,'王五',6);
    mysql> select * from card;
    +------+--------+
    | id   | name   |
    +------+--------+
    |    1 | 饭卡   |
    |    2 | 建行卡 |
    |    3 | 农行卡 |
    |    4 | 工商卡 |
    |    5 | 邮政卡 |
    +------+--------+
    mysql> select * from person;
    +------+------+--------+
    | id   | name | cardId |
    +------+------+--------+
    |    1 | 张三 |      1 |
    |    2 | 李四 |      3 |
    |    3 | 王五 |      6 |
    +------+------+--------+

    两个表中并没有创建外键。

    3、inner join查询(内连接):(交集)

    mysql> select * from person inner join card on person.cardId=card.id;
    +------+------+--------+------+--------+
    | id   | name | cardId | id   | name   |
    +------+------+--------+------+--------+
    |    1 | 张三 |      1 |    1 | 饭卡   |
    |    2 | 李四 |      3 |    3 | 农行卡 |
    +------+------+--------+------+--------+

    内连查询就是俩张表中的数据,通过某个字段相等,查询出相关记录数据。

    4、left (outer) join(左外连接):

    mysql> select * from person left join card on person.cardId=card.id;
    +------+------+--------+------+--------+
    | id   | name | cardId | id   | name   |
    +------+------+--------+------+--------+
    |    1 | 张三 |      1 |    1 | 饭卡   |
    |    2 | 李四 |      3 |    3 | 农行卡 |
    |    3 | 王五 |      6 | NULL | NULL   |
    +------+------+--------+------+--------+

    左外连接,会把左边表里面的所有数据取出来,而右边表中的数据,如果有相等的就显示出来,如果没有,就会补NULL。

    5、right (outer) join(右外连接):

    mysql> select * from person right join card on person.cardId=card.id;
    +------+------+--------+------+--------+
    | id   | name | cardId | id   | name   |
    +------+------+--------+------+--------+
    |    1 | 张三 |      1 |    1 | 饭卡   |
    |    2 | 李四 |      3 |    3 | 农行卡 |
    | NULL | NULL |   NULL |    2 | 建行卡 |
    | NULL | NULL |   NULL |    4 | 工商卡 |
    | NULL | NULL |   NULL |    5 | 邮政卡 |
    +------+------+--------+------+--------+

    右外连接,会把右边表里面的所有数据取出来,而左边表中的数据,如果有相等的就显示出来,如果没有,就会补NULL。

    6、full join(全外连接):

    mysql> select * from person full join card on person.cardId=card.id;
    ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'

    mysql不支持full join,实际上全外连接就是取两个表的并集:

    mysql> select * from person left join card on person.cardId=card.id
        -> union
        -> select * from person right join card on person.cardId=card.id;
    +------+------+--------+------+--------+
    | id   | name | cardId | id   | name   |
    +------+------+--------+------+--------+
    |    1 | 张三 |      1 |    1 | 饭卡   |
    |    2 | 李四 |      3 |    3 | 农行卡 |
    |    3 | 王五 |      6 | NULL | NULL   |
    | NULL | NULL |   NULL |    2 | 建行卡 |
    | NULL | NULL |   NULL |    4 | 工商卡 |
    | NULL | NULL |   NULL |    5 | 邮政卡 |
    +------+------+--------+------+--------+
  • 相关阅读:
    [ACM_数学] 大菲波数 (hdu oj 1715 ,java 大数)
    [ACM_水题] 不要62(hdu oj 2089, 不含62和4的数字统计)
    [ACM_其他] Square Ice (poj1099 规律)
    [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
    [ACM_搜索] Triangles(POJ1471,简单搜索,注意细节)
    [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)
    [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)
    [ACM_几何] Metal Cutting(POJ1514)半平面割与全排暴力切割方案
    [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)
    [ACM_数据结构] 竞赛排名
  • 原文地址:https://www.cnblogs.com/direwolf22/p/12695648.html
Copyright © 2011-2022 走看看