left join 左連線即以左表為基準,顯示座標所有的行,右表與左表關聯的資料會顯示,不關聯的則不顯示。關鍵字為left join on。 
**基本用法如下:

select table a left join table b on a.id = b.ta_id**

注意:
其中on後面關聯的欄位應該是同一欄位(兩表關聯的外來鍵) 
由於以左表為基準,左表一條記錄如果對應右表多條記錄,那查出的資料中右表的資料也只顯示一條,如果要都顯示,可以用group_contact()將欄位用逗號隔開顯示在一條記錄上。所以右表不管有幾張,如果和左表都是一對一關係,則沒問題,存在一對多關係時,需要一定的處理。


1、內連線:將兩個表中存在連結關係的欄位符合連線條件的記錄形成記錄集

SELECT
A. NAME,
B. NAME
FROM
A
INNER JOIN B ON A.id = B.id

SELECT
A. NAME,
B. NAME
FROM
A,
B
WHERE
A.id = B.id

結果是一樣的(內連線的inner關鍵字可省略);

2、外連線:分為左外連線和右外連線

左連線A、B表結果包括A的全部記錄和符合條件的B的記錄。

右聯結A、B表的結果和左聯結B、A的結果是一樣的,也就是說:

SELECT
A. NAME,
B. NAME
FROM
A
LEFT JOIN B ON A.id = B.id

SELECT
A. NAME,
B. NAME
FROM
B
RIGHT JOIN A ON B.id - A.id

執行後的結果是一樣的。

3、全聯結

4、無聯結

5、三表聯結查詢

SELECT
username,
psw,
gname,
tel
FROM
(
t1
LEFT JOIN t2 ON t1.t1_id = t2.t1_id
)
LEFT JOIN t3 ON t1.t1_id = t3.t1_id

6、終極的三表聯結查詢

items:商品表,item_visit_stats:商品訪問表,item_trade_stats:商品銷售表

/*

Source Server         : localhost
Source Server Version : 50505
Source Host : localhost:3306
Source Database : test Target Server Type : MYSQL
Target Server Version : 50505
File Encoding : 65001 Date: 2018-09-14 19:00:46
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for items
-- ----------------------------
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT '',
`price` varchar(255) DEFAULT '',
`nick` varchar(255) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; -- ----------------------------
-- Table structure for item_trade_stats
-- ----------------------------
DROP TABLE IF EXISTS `item_trade_stats`;
CREATE TABLE `item_trade_stats` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`buyer_num` int(11) unsigned DEFAULT '',
`item_num` int(11) unsigned DEFAULT '',
`seller_nick` varchar(255) DEFAULT '',
`business_day` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品銷售表'; -- ----------------------------
-- Table structure for item_visit_stats
-- ----------------------------
DROP TABLE IF EXISTS `item_visit_stats`;
CREATE TABLE `item_visit_stats` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_visits` varchar(255) NOT NULL,
`business_day` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品訪問表';
SELECT
i.id,
i.title,
SUM(ivs.user_visits) AS uv,
its.item_num * i.price AS turnover
FROM
(
items AS i
RIGHT JOIN item_visit_stats AS ivs ON i.id = ivs.id
)
LEFT JOIN (
SELECT
id,
SUM(item_num) AS item_num
FROM
item_trade_stats
WHERE
seller_nick = "XXXX"
GROUP BY
id
) AS its ON its.id = ivs.id
WHERE
i.nick = "XXXX"
GROUP BY
i.id
ORDER BY
uv DESC

https://blog.csdn.net/chentaocba/article/details/7697825

寫的時候從外層往裡寫,一層一層left join,才不容易出錯。

http://www.cnblogs.com/amyStart/p/5965472.html