mysql 測試left join、right join、inner join用法

CREATE TABLE `sdb_b2c_te` (
  `id` int(2) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL DEFAULT '0',
  `ship_name` varchar(50) NOT NULL DEFAULT '',
  `age` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `sdb_b2c_te` (`id`, `order_id`, `ship_name`, `age`)
VALUES
	(1, 1, 'zhangsan', 10),
	(2, 2, 'lisi', 10),
	(3, 3, 'wangwu', 10),
	(4, 5, 'kobe', 40);
	
CREATE TABLE `sdb_b2c_te1` (
  `id` int(2) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL DEFAULT '0',
  `goods_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `sdb_b2c_te1` (`id`, `order_id`, `goods_id`)
VALUES
	(1, 1, 100),
	(2, 2, 200),
	(3, 5, 100),
	(4, 4, 100);


在這裏插入圖片描述
在這裏插入圖片描述

測試inner join:

select sdb_b2c_te.id as 'sdb_b2c_te.id',sdb_b2c_te.age as 'sdb_b2c_te.age',sdb_b2c_te1.id as 'sdb_b2c_te1.id',sdb_b2c_te1.goods_id as 'sdb_b2c_te1.goods_id' from sdb_b2c_te inner join sdb_b2c_te1 on sdb_b2c_te.order_id=sdb_b2c_te1.order_id

總結:inner join取的是兩個表的交集,如:a inner join b on a.order_id=b.order_id,取的是a表和b表中order_id相等的數據,如果有where條件,就先過濾where條件,然後在過濾on,然後取過濾後的數據的交集部分。

在這裏插入圖片描述
測試left join:有where條件

select sdb_b2c_te.id as 'sdb_b2c_te.id',sdb_b2c_te.age as 'sdb_b2c_te.age',sdb_b2c_te1.id as 'sdb_b2c_te1.id',sdb_b2c_te1.goods_id as 'sdb_b2c_te1.goods_id' from sdb_b2c_te left join sdb_b2c_te1 on sdb_b2c_te.order_id=sdb_b2c_te1.order_id 
where sdb_b2c_te.age = 10

總結:如果有where條件,則先過濾where條件,然後從過濾後的數據中取出所有主表(left join左邊的表)中的數據,然後在根據on條件去輔表(left join右邊)找數據,如果有,則直接取出數據,如果沒有,則把輔表相關字段置爲null。

在這裏插入圖片描述

測試right join:不加where條件

select sdb_b2c_te.id as 'sdb_b2c_te.id',sdb_b2c_te.age as 'sdb_b2c_te.age',sdb_b2c_te1.id as 'sdb_b2c_te1.id',sdb_b2c_te1.goods_id as 'sdb_b2c_te1.goods_id' from sdb_b2c_te left join sdb_b2c_te1 on sdb_b2c_te.order_id=sdb_b2c_te1.order_id 

總結:沒有where條件,則先取出主表中的所有數據,然後在根據on條件去輔表查數據,有,則直接取出,沒有,則把輔表相關字段置爲null。

在這裏插入圖片描述

right join其實跟left join的邏輯是一樣的,只不過,left join左邊的表是主表,右邊的表是輔表。而right join右邊的表是主表,左邊的表是輔表。

總結:不管是inner join、left join、right join,如果有where條件,肯定是先過濾where,然後在對過濾後的數據進行操作。

發佈了63 篇原創文章 · 獲贊 7 · 訪問量 5608
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章