1. 程式人生 > >Mysql學習總結(24)——MySQL多表查詢合併結果和內連線查詢

Mysql學習總結(24)——MySQL多表查詢合併結果和內連線查詢

1、使用union和union all合併兩個查詢結果:select 欄位名 from tablename1 union select 欄位名 from tablename2;


注意這個操作必須保證兩張表字段相同,欄位資料型別也相同。另外,使用union的時候會去除重複(相同)的記錄,而union all則不會。

注:下邊的幾個連線查詢涉及到笛卡爾積的概念,即如果存在兩張表,第一張記錄數為n條,另一張表的記錄數為m條,那麼笛卡爾積得出的記錄數就是n*m條;如果第一張表的欄位數為a個,另一張的欄位數為b個,則笛卡爾積得出的欄位數就是a+b個。

2、使用natural join自然連線:前提是兩張表有相同的欄位:(這個操作會去掉重複的欄位)


對於這個查詢,我的理解是:保留這兩張表中關聯欄位(例如這裡的depart_id)都存在的資料,去掉只有一個表中有的:


如上述內容中,company中有四條資料,而emp中有7條,結果不論哪個放前邊都只出來六條,因為company中depart_id為4的,emp中沒有,而emp中depart_id為5的,company中又沒有。

3、inner join on等值連線查詢:


這個操作在我理解,和上邊的自然連線區別就在於沒有去掉重複的欄位,還有更加的靈活,不需要有相同欄位名的欄位:


4、inner join on不等值連線查詢:


對於這個查詢,我的理解就是,他是“=”查詢的補集,即這個查詢的結果集 = 笛卡爾積結果集  減去“=”查詢的結果集;本例中,company有4條記錄,emp有7條記錄,笛卡爾積是4*7=28條記錄;“=”查詢的結果是6條記錄,一次"!="查詢就應該是其餘的22條記錄。

5、從上邊的操作中可以拓展出另一種查詢:字連線查詢,即實際只有一張表,用重新命名的方式當成兩張來用:


可以看到,根據笛卡爾積,這裡應該有4*4=16條結果,但是因為有了條件,就篩選出了四條