zoukankan      html  css  js  c++  java
  • 七种join的书写规范

      在mysql中的两表进行连接时,总共有7种连接情况,具体可见下图

      由图的从左到右的顺序

        图1.左连接(left join):返回左表中的所有记录和右表中的连接字符字段相等的记录,若右表没有匹配值则补NULL

        图2.右连接(right join):返回右表中的所有记录和右表中的连接字符字段相等的记录,若左表没有匹配值则补NULL

        图3.内连接(inner join):只有满足条件的巨鹿才会出现在查询结果中,即左表和右表的公共部分

        图4.左表中的独自拥有的部分,去除与右表中的重合部分

        图5.右表中的独自拥有的部分,去除与左表中的重合部分

        图6.左表和右表的重合部分,以及左右表的重和部分(可以看成两表的左连接和右连接的拼接)

        图7.左表和右表的独自拥有部分(可以看成是图4和图5的拼接)

    实例详解:

       创建相关表以及插入数据

      

    create table student(
        sid int(11) primary key auto_increment,
        sname varchar(20) not null,
        class_id int(11) null
    );
    create table class(
        cid int(11) primary key,
        cname varchar(20) not null
    );
    alter table student add foreign key(class_id) references class(cid); 
    desc student;
    insert into class(cid,cname) values
    (1,'一年级'),
    (2,'二年级'),
    (3,'三年级'),
    (4,'四年级'),
    (5,'五年级'),
    (6,'六年级');
    set sql_safe_updates = 0;
    insert into student(sid,sname,class_id) values
    (1,'张三',1),
    (2,'李四',4),
    (3,'王五',1),
    (4,'赵柳',2),
    (5,'孙权',6),
    (6,'钱升',null),
    (7,'刘备',3),
    (8,'周往',5);
    #内连接
    select
     student.*,
     class.*
    from
        student
    inner join class
    on student.class_id = class.cid;

    #左连接
    select
     student.*,
     class.*
    from
        student
    left join class
    on student.class_id = class.cid;

    #右连接
    select
     student.*,
     class.*
    from
        student
    right join class
    on student.class_id = class.cid;

    #student数据表锁独有的数据
    select
     student.*,
     class.*
    from
        student
    left join class
    on student.class_id = class.cid
    where class.cid is null;

    #class表锁独有的数据
    select
     student.*,
     class.*
    from
        student
    right join class
    on student.class_id = class.cid
    where student.class_id is null;

    select
     student.*,
     class.*
    from
        student
    left join class
    on student.class_id = class.cid
    union
    select
     student.*,
     class.*
    from
        student
    right join class
    on student.class_id = class.cid;

    select
     student.*,
     class.*
    from
        student
    left join class
    on student.class_id = class.cid
    where class.cid is null
    union
    select
     student.*,
     class.*
    from
        student
    right join class
    on student.class_id = class.cid
    where student.class_id is null;

    笨鸟先飞
  • 相关阅读:
    PHP 周转换为日期(最后一天) date("o-W")转Y-m-d日期——贴上代码
    开机后apache假死问题解决
    JS控制滚动条 —— 进度条的简单制作
    2014年初组装的第一台电脑
    开启mysql远程连接
    PHP数组的指针操作方法
    Ubuntu Server 13.04安装图形界面
    utf-8和GBK中文字符的长度计算
    2014校园招聘——历程2
    基于LLVM开发属于自己Xcode的Clang插件
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/14540199.html
Copyright © 2011-2022 走看看