[進階]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;
    
     

     
     
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章