使用MySQL查詢數據時,用戶需要的數據并不在一個表中,可能涉及多張表,這時就要使用多表查詢。多表查詢就是將多個表連接在一起的查詢,根據查詢需要可以劃分為內連接查詢和外連接查詢。
表結構為:
1.內連接
內連接查詢是將表中的某些記錄按照一定條件與其它表的記錄連接在一起,連接條件就是表之間列的相等關系,使用內連接查詢時只有滿足條件的數據才能出現在結果集中。
l方式1:隱式內連接
n語法:select {表字段} from {表1},{表2} where {表1.列名=表2.列名}
[And 條件表達式]
nfrom子句指明進行連接的表名,表之間用逗號隔開;
nwhere子句指明連接的列名及其連接條件,列名若在表1和表2中都包含,則必須使用“表名.列名”的形式進行區分;
n連接條件即為各表之間的關聯,形式為“表名1.主鍵=表名2.外鍵”;
n如果還有其他條件,則將條件表達式放在連接條件后面,使用and關鍵字展示。
l方式2:顯示內連接
n語法:select {表字段} from {表1} inner join {表2} on {表名1.列名=表名2.列名} [where 條件表達式]
n“Inner join”關鍵字后面必須緊跟關鍵字“on”,on后面應該表名連接的條件,形式為“表名1.主鍵=表名2.外鍵”;
n關鍵字inner join 中的inner可以省略;
n執行語句select * from a_table a inner join b_table b on a.a_id = b.b_id,當兩個表中的數據都符合on后面的條件才會被select出來。
2.外連接
外連接是以某一個表為主,兩一個表根據條件進行關聯,外連接分為左外連接、右外連接和全外連接。
l左外連接:在查詢的時候,以left join 這個關鍵字左邊的表為主表,會將這個表中的數據全部查詢出來,如果右表中沒有對應數據,則用NULL進行補充。
n語法:select {表字段} from {表1} left join {表2} on {表名1.列名=表名2.列名} [where 條件表達式]
n執行語句:select * from a_table a left join b_table b on a.a_id = b.b_id,查詢結果集除了A表所有數據外,還包含滿足條件的B表數據
l右外連接:在查詢的時候,以right join 這個關鍵字右邊的表為主,會將這個表中的數據全部查詢出來,如果左表中沒有對應數據,使用NULL進行補充。
n語法:select {表字段} from {表1} right join {表2} on {表名1.列名=表名2.列名} [where 條件表達式]
n執行語句:select * from a_table a right join b_table b on a.a_id = b.b_id,
查詢結果集除了B表所有數據外,還包含滿足條件的A表數據。