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

     为了使查询结果便于分析,可以用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;
    
     

     
     
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值