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