zoukankan      html  css  js  c++  java
  • SQL语句的四种连接

    SQL的四种连接查询

      内连接

        inner join 或者 join

      外连接

        左连接   left join 或者 left outer join

        右连接  right join 或者 right outer join

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

     先创建数据库testjoin

     create database testjoin;

    然后引用此数据库testjoin

     use testjoin;

    然后创建person表和card表

     create table person(id int,name varchar(20),cardid int);
     create table card(id int,name varchar(20));

    然后在表中插入数据

    insert into card values (1,'饭卡'),(2,'建行卡'),(3,'农行卡'),(4,'工商卡'),(5,'邮政卡');
     insert into person values (1,'张三',1);
     insert into person values (2,'李四',3);
     insert into person values (3,'王五',6);

    +------+--------+
    | id | name |
    +------+--------+
    | 1 | 饭卡 |
    | 2 | 建行卡 |
    | 3 | 农行卡 |
    | 4 | 工商卡 |
    | 5 | 邮政卡 |
    +------+--------+
    5 rows in set (0.00 sec)                

    +------+------+--------+
    | id | name | cardid |
    +------+------+--------+
    | 1 | 张三 | 1 |
    | 2 | 李四 | 3 |
    | 3 | 王五 | 6 |
    +------+------+--------+
    3 rows in set (0.00 sec)

    两张表并没有设置外键

    1.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 | 农行卡 |
    +------+------+--------+------+--------+

    2.left join 查询(左外连接)

      左外连接会把左面表中的数据全部取出来,而右边表中的数据,如果有相等的就像是出来,如果没有就补充NULL

    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   |
    +------+------+--------+------+--------+

    3.right join 查询(右外连接)

      右外连接会把右面表中的数据全部取出来,而左边表中的数据,如果有相等的就像是出来,如果没有就补充NULL

    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 | 邮政卡 |
    +------+------+--------+------+--------+

    4.mysql 不支持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要想实现全连接,可以使用左外连接和右外连接的并集union进行连接

    mysql> select * from person right  join card on person.cardid=card.id
     union 
    select * from person left 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 | 邮政卡 |
    |    3 | 王五 |      6 | NULL | NULL   |
    +------+------+--------+------+--------+
  • 相关阅读:
    自动登录跳板机->开发机
    关于写代码的一下规范
    vscode 配置 GOPATH
    thinkphp6.0 nginx 配置
    vue-cli 3.x 构建项目,webpack没有了?
    Laravel6.0 使用 Jwt-auth 实现多用户接口认证
    怎么在 localhost 下访问多个 Laravel 项目,通过一个IP访问多个项目(不仅仅是改变端口哦)
    laravel 5.8 实现消息推送
    vs code 设置 保存自动格式化vue代码
    项目开发规范(编码规范、命名规范、安全规范、前端优化、源码提交规范、代码维护规范、产品发布规范)
  • 原文地址:https://www.cnblogs.com/jingdenghuakai/p/11648496.html
Copyright © 2011-2022 走看看