1. 程式人生 > >連線查詢:inner join,left join,right join

連線查詢:inner join,left join,right join

感謝原創:https://blog.csdn.net/plg17/article/details/78758593

準備工作:

  1)新建兩張表a_table和b_table:  

create table a_table(
a_id int(10) primary key auto_increment,
a_name varchar(10) default NULL,
a_part varchar(10) default NULL)
engine=innodb character set=utf8;

create table b_table(
b_id int(10) primary key auto_increment,
b_name varchar(10) default NULL,
b_part varchar(10) default NULL)
engine=innodb character set=utf8;

  2)插入資料:

insert into a_table values
(1,'老潘','總裁部'),
(2,'老王','祕書部'),
(3,'老張','設計部'),
(4,'老李','運營部');

insert into b_table values
(2,'老王','祕書部'),
(3,'老張','設計部'),
(4,'老劉','人事部'),
(5,'老黃','生產部');

1、內連線(Inner join)

  又稱為簡單連線,或者自然連線,是一種常見的連線查詢 

內連線使用比較運算子,對兩個表中的資料,進行比較,並列出與連線條件匹配的資料行,組合成新的記錄。

在內連線查詢中,只有滿足條件的記錄,才會出現在查詢結果中。

  1.1語法:SELECT  查詢欄位   FROM   表1   [INNER]  JOIN   表2   ON   表1.關係欄位=表2.關係欄位;

  1.2理解:組合兩個表中的記錄,返回關聯欄位相符的記錄,也就是返回兩個表的交集(陰影)部分。

  1.3舉例:

select * from a_table inner join b_table on a_table.a_id=b_table.b_id;

2、左連線(Left join)

  2.1語法:SELECT  查詢欄位   FROM   表1   LEFT JOIN   表2   ON   表1.關係欄位=表2.關係欄位;

  2.2理解:left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。圖中陰影部分為返回的記錄。

       左(外)連線,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜尋條件的記錄。右表記錄不足的地方均為NULL。  

  2.3舉例:

select * from a_table left join b_table on a_table.a_id=b_table.b_id;

3、右連線(Right join)

    3.1語法:SELECT  查詢欄位   FROM   表1   RIGHT JOIN   表2   ON   表1.關係欄位=表2.關係欄位;

    3.2理解:right join是right outer join的簡寫,它的全稱是右外連線,是外連線中的一種。圖中陰影部分為返回的記錄。

        與左(外)連線相反,右(外)連線,左表(a_table)只會顯示符合搜尋條件的記錄,而右表(b_table)的記錄將會全部表示出來。左表記錄不足的地方均為NULL。      3.3例子:

select * from a_table right join b_table on a_table.a_id=b_table.b_id;

4、全連線

  暫不支援,但是可以通過MySQL模擬。語法如下:

(select * from a_table left join b_table on a_table.a_id=b_table.b_id)
union
(select * from a_table right join b_table on a_table.a_id=b_table.b_id);