即mysql中的交叉查詢、內連線、左連線、右連線、聯合查詢、全連線。
交叉查詢: cross join
我們現在以這兩張表為例;
剛剛我們是通過兩條語句來查詢的兩張表,現在我們嘗試著用一條語句來查詢這兩張表;
上圖中,我們看到我們查詢出來了,語句中並沒有新增別的附加條件,仔細觀察課可以發現,這兩張表中的每一行記錄都與另外一張表的任意一行記錄相關聯。
也就是說這兩張表的資料交叉連線在了一起;如下圖展示;
我們把上述「沒有任何限制條件的連線方式」稱為「交叉連線」,其得到的結果更線性代數中的「笛卡爾乘積」一樣樣的。
交叉連線 英文是「cross join」 交叉連線有兩種寫法;
在這裡建議使用第一種寫法,第一種是官方建議的最標準的寫法;剛剛我們只用了兩張表做示例;比如將三張表啊,a,b,c 用「cross join」連線起來;
select * from a cross join b cross join c;
select * from a,b,c;
這兩種都可以用,結果都是一樣的。
內連線:inner join
這裡還是以我們剛剛的那兩張表為例,(student、course);
內連線就是「把兩張表中同時符合某種條件的資料記錄的組合」;
在上圖中第一張語法是官方最標準的寫法,建議大家盡量採用第一種寫法。
內連線的兩張錶用「inner join」連線在一起,用「on」說明「條件」。
我們剛才「內連線」與「交叉連線」的不同之處就是「內連線」比「交叉連線」多個限定條件,那我們如果把「內連線」的限定條件去掉,那得出的結果會不會一樣呢,我們做個小實驗;
左連線不僅會查詢出兩個表中同時符合記錄的組合,同時還會將左側的表中不符合條件的記錄同時展示出來,由於左側表中的這一部分記錄並不符合條件,,所以這一部分記錄使用空記錄進行連線。
經過以上描述,那麼右連線也是如此。
但是有的時候,有可能所有的記錄都符合條件,這是就不會出現空記錄連線的情況了。
聯合查詢:union 與 union all
聯合查詢就是把多個查詢語句集合到一起顯示;
當使用union連線兩個查詢語句時,兩個語句查詢出的數量必須相同;
當我們查詢的兩張表中有同樣的記錄時,使用union會把他合併為一條
如果不想讓他合併的話,可以使用union all ;
全連線:full join
在mysql中並不支援全連線,準確的說,我們可以變相的實現全連線,我們使用left join、union、right join 組合實現所謂的全連線。
全連線也一樣可以新增更多的連線條件;
好啦,就到這裡把。
mysql多表 MySQL 多表查詢
多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...
mysql多表查詢方式 MySQL多表查詢方式問題
你的 sql 沒有用到任何索引,對 a b 兩個表都是全表掃瞄,在資料量小的時候是沒有問題的,但是如果資料量超過 100 萬,效能問題就會突顯出來。這裡不清楚你的 created at 欄位是什麼型別,不過從你的 date format created at,y m d 看來,應該是 datetim...
mysql 多表查詢or MySQL 多表查詢
前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...