一、內聯結(inner join)
mysql內聯結使用inner join將多個資料表t1,t2隔開,結果是t1裡的每乙個資料行將與t2裡的每乙個資料行組合。
逗號連線符、cross join和join聯結型別類似於inner join。
inner join、cross join和join(注意,不包括逗號操作符) 還支援另外幾種用來表明如何對資料表裡的資料列進行匹配的語法變體:
1、用一條on子句代替where子句。
2、使用using()子句,類似於on,但要求被聯結的資料列必須是同名的。
二、左聯結和右聯結(外聯結)
內聯結只顯示在兩個資料表裡都能找到匹配的資料行。
外聯結除了顯示同樣的匹配結果,還可以把其中乙個資料表在另乙個資料表裡沒有匹配的資料行也顯示出來。
外聯結分左聯結和右聯結兩種。
左聯結意思是把左資料表在右資料表裡沒有匹配的資料行也顯示出來。
右聯結意思是把右資料表在左資料表裡沒有匹配的資料行也顯示出來。
左聯結工作原理:
前提:必須給出用來匹配兩個資料表裡的資料行的資料列(這裡t1.i1 = t2.i2)。
如果左資料表的某個資料行與來自右資料表的某個資料行匹配時,那麼這兩個資料行的內容就會被選取為乙個輸出資料行。如果來自
左資料表的某個資料行在右資料表裡找不到匹配,它就會被選取作為乙個輸出資料行,此時與它聯結的是乙個來自右資料表裡的"假"資料行,這個「假」
資料行的所有資料列都包含null值。
換一句話說,在left join操作裡,來自左資料表的每乙個資料行在結果集裡都有乙個對應的資料行,不管它在右資料表裡有沒有匹配。
在結果集裡,在右資料表裡沒有匹配的結果資料行有這樣的特徵:來自右資料表的所有資料列都是null值。
這個特徵可以讓你知道右資料表裡缺少了哪些資料行。
左聯結left join很有用,尤其是在你只想找出在右資料表裡沒有匹配的左資料表的行時,增加一條where語句,讓它把右資料表的資料列全部是null值(也就是那些在乙個資料表裡有匹配,但在另乙個資料表裡沒有匹配)的資料行篩選出來。
一般來說,你把右資料表裡值為null的資料列顯示出來沒有什麼意義,可以在select語句裡輸出列清單裡剔除:
優化mysql查詢最新一條資料
title 優化mysql查詢最新一條資料 date 2019 07 24 11 23 21 categories 今天寫web時,發現有個請求一直沒有響應,用谷歌f12看了一下,請求出現了乙個問題。我第一反應是網路延遲,又試了幾次,還是這個問題,便看了一下後台控制台也沒報錯,便想是不是sql查詢時...
mysql 分組查詢每組的最新一條資料
1.原始資料 學生成績表 2.想要獲取每個考生最新的考試成績,網上的例子 select a.from select from scoreinfo order by scoreinfo.createtime desc as a group by a.snum order by a.createtime...
sql 多組條資料取每組最新的一條資料
問 資料庫一張表中有不同公司不同時間發來的資料,怎樣取每個公司最新的那條資料呢?答 使用分析函式row number over partiion by order by 來進行分組編號,然後取分組標號值為1的記錄即可。目前主流的資料庫都有支援分析函式。其中,partition by 是指定按哪些字段...