现在的位置: 首页 > 综合 > 正文

[进阶]MySQL学习笔记五数据表连接Join

2017年12月21日 ⁄ 综合 ⁄ 共 1862字 ⁄ 字号 评论关闭
     为了使查询结果便于分析,可以用Join关键字将2张或以上数量的数据表连接起来。简单来说,即是根据应用的需要,抽取多张表的字段,显示在同一个数据集合里面,使得结果更加直观易懂。比如数据库中存在两张关联的表,tbPerson顾客表和tbOrder订单表,订单表里保存了顾客的id,通过id可以对应到顾客的信息,为了在一个查询结果里面同时显示顾客信息和其对应的订单信息,就可以考虑用Join关键字。

     一、数据准备
     创建Person表并初始化数据
     create table tbPerson(
          `Id_P` int unsigned not null auto_increment,
          `Name` varchar(20) default 'lala',
          `Sex` varchar(10) default 'male',
          `Age` int unsigned,
          primary key(`Id_P`)
     );
     insert into tbPerson values(null, 'zhangsan', 'male', 21);
     insert into tbPerson values(null, 'lisi', 'male', 23);
     insert into tbPerson values(null, 'wangwu', 'male', 24);
     insert into tbPerson values(null, 'zhaoliu', 'male', 25);
     insert into tbPerson values(null, 'yangzq', 'female', 26);
     insert into tbPerson values(null, 'chenxb', 'female', 27);
     
     创建订单表并初始化数据
     create table tbOrder(
          `Id_O` int unsigned not null auto_increment,
          `OrderNo` int unsigned not null,
          `Id_P` int unsigned not null,
          primary key(`Id_O`)
     );
     insert into tbOrder values(null, 10000, 1);
     insert into tbOrder values(null, 10001, 2);
     insert into tbOrder values(null, 10002, 3);
     insert into tbOrder values(null, 10003, 4);
     insert into tbOrder values(null, 10004, 5);
     insert into tbOrder values(null, 10005, 9);
     数据库初始化结果如下:
    
     二、Join
     为了便于观察顾客与其订单信息,这里可以利用多表查询的方法,也可以用Join的方法
    
     三、inner/left/right/full join
  • inner join等同于join
  • left join会返回左表中所有的行,即使在右表中没有匹配的行(右表无匹配时字段内容为空)
  • right join与left join类似
  • full join会返回左右两表中所有的行,不论是否左右匹配(在MySQL中不支持)
     select tbperson.name,tbperson.age,tborder.orderNo
     from tbperson
     inner join tborder
     on tbperson.id_p=tborder.id_p;

     select tbperson.name,tbperson.age,tborder.orderNo
     from tbperson
     left join tborder
     on tbperson.id_p=tborder.id_p;

     select tbperson.name,tbperson.age,tborder.orderNo
     from tbperson
     right join tborder
     on tbperson.id_p=tborder.id_p;

     select tbperson.name,tbperson.age,tborder.orderNo
     from tbperson
     full join tborder
     on tbperson.id_p=tborder.id_p;
    
     
     
     
     

抱歉!评论已关闭.