用兩個表(a_table、b_table),關聯字段a_table.a_id和b_table.b_id來演示一下MySQL的內鏈接、外鏈接( 左(外)鏈接、右(外)鏈接、全(外)鏈接)。數據庫
MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)spa
數據庫表:a_table、b_tablecode
主題:內鏈接、左鏈接(左外鏈接)、右鏈接(右外鏈接)、全鏈接(全外鏈接)blog
表爲:ci
內鏈接:it
1. 交叉鏈接查詢(基本不會使用-獲得的是兩個表的乘積) (這種查詢時候會產生笛卡爾積)
語法: select * from A,B;
2. 內鏈接查詢(使用的關鍵字 inner join -- inner能夠省略)
隱式內鏈接: select * from A,B where 條件;
顯示內鏈接: select * from A inner join B on 條件;io
執行語句爲:select * from a_table a inner join b_table bon a.a_id = b.b_id;table
總結:當且僅當兩個表中的數據都符合on後面的條件的時候,纔會被select出來.class
左鏈接:select
外鏈接查詢(使用的關鍵字 outer join -- outer能夠省略)
左外鏈接:left outer join
總結:在查詢的時候,以left join 這個關鍵字左邊的表爲主表,會將這個表中的數據所有查詢出來,若是右表中沒有這條數據,則用NULL字段表示.
右外鏈接:
右外鏈接:right outer join
select * from A right outer join B on 條件;
總結:在查詢的時候,會以right join 這個關鍵字右邊的表爲主,而後將符合條件的查詢出來,左表中沒有的字段,使用NULL進行補充
MySQL目前不支持此種方式,能夠用其餘方式替代解決。
子查詢:
子查詢:一條select語句結果做爲另外一條select語法一部分(查詢條件,查詢結果,表等)。
語法: select ....查詢字段 ... from ... 表.. where ... 查詢條件
#3 子查詢, 查詢「化妝品」分類上架商品詳情 #隱式內鏈接 SELECT p.* FROM products p , category c WHERE p.category_id=c.cid AND c.cname = '化妝品'; #子查詢 ##做爲查詢條件 SELECT * FROM products p WHERE p.category_id = ( SELECT c.cid FROM category c WHERE c.cname='化妝品' ); ##做爲另外一張表 SELECT * FROM products p , (SELECT * FROM category WHERE cname='化妝品') c WHERE p.category_id = c.cid;
查詢結果:
總結:能夠將一條查詢語句做爲另一個查詢語句的條件和表,再次進行查詢.