標籤:size outer 尋找 ;內 local data efault 有關 自身
內部連接: (1)標準的連接不設立連接條件(where語句),因為返回的結果數目是第一個表中行數×第二個表中行數,這種現象又叫笛卡兒積。 (2)內部連接設定了連接條件,只有滿足了連接條件的兩表對應行才會顯示出來,也就是顯示兩表關於連接條件的交集部分,如:
SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id
(3)使用內部連接進行多表更新的例子如下:
UPDATE tdb_goods INNER JOIN tdb_goods_cate ON tdb_goods.goods_cate = tdb_goods_cate.goods_cate SET tdb_goods.goods_cate = tdb_goods_cate.id
(4)使用內部連接進行多表顯示的例子如下: 兩張表連接顯示:
SELECT * from tdb_goods INNER JOIN tdb_goods_cate ON tdb_goods.goods_cate = tdb_goods_cate.id
三張表連接顯示:
SELECT * from tdb_goods INNER JOIN tdb_goods_cate ON tdb_goods.goods_cate = tdb_goods_cate.id INNER JOIN tdb_goods_brand ON tdb_goods.brand_name = tdb_goods_brand.id;
外部連接: 外部連接是在內部連接的基礎上,保留了沒有關聯的行,也就是說左右表欄位可以不滿足連接關聯條件,如: 左外部連接:
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.id
右外部連接:
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id=table2.id
左連接和右連接的區別就是:左連接是左表全顯示,右表顯示滿足連接條件的;右連接是右表全顯示,左表顯示滿足連接條件的。
內連接和外連接圖表顯示: 內連接為圖1,左連接為圖2,右連接為圖3:
自連接: 自連接是同一個資料表對自身進行連接,可用於無限分類的資料表設計(類似遞迴的思想),比如一個資料表如下:
其中,parent_id表示該type的父類id號。 如果想查看所有父類對應的子類表,可用如下語句:
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id;
如果想查看所有父類對應的子類的數目,可用如下語句:
SELECT p.type_id,p.type_name,count(s.type_name) AS child_num FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id GROUP BY p.type_name ORDER BY p.type_id;
如果想將上述尋找到的父類的子類數目作為欄位列,添加到這個資料表中,可做如下操作:
ALTER TABLE tdb_goods_types ADD child_num smallint default 0;
UPDATE tdb_goods_types AS t1 INNER JOIN
(SELECT p.type_id,p.type_name,count(s.type_name) AS child_num FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id group by p.type_name order by p.type_id) AS t2
ON t1.type_id = t2.type_id SET t1.child_num = t2.child_num;
得到的結果如下:
MySQL----連接