聲明:本文參考:數(shù)據(jù)庫(kù)左連接骂束、右連接、內(nèi)連接成箫、全連接筆記
1展箱、新建表
- 表 table_a
-- ----------------------------
-- Table structure for table_a
-- ----------------------------
DROP TABLE IF EXISTS `table_a`;
CREATE TABLE `table_a` (
`a_pk` int(11) NOT NULL AUTO_INCREMENT,
`a_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`a_pk`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
- 表 table_b
-- ----------------------------
-- Table structure for table_b
-- ----------------------------
DROP TABLE IF EXISTS `table_b`;
CREATE TABLE `table_b` (
`b_pk` int(11) NOT NULL AUTO_INCREMENT,
`b_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`b_pk`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
2、內(nèi)連接
內(nèi)連接是一種一一映射關(guān)系蹬昌,就是兩張表都有的才能顯示出來(lái)
-
韋恩圖
代碼:
-- 內(nèi)連接
select *
from table_a a,table_b b
where a.a_pk = b.b_pk
-
查詢結(jié)果:
3混驰、左連接
左連接是左邊表的所有數(shù)據(jù)都有顯示出來(lái),右邊的表數(shù)據(jù)只顯示共同有的那部分,沒(méi)有對(duì)應(yīng)的部分只能補(bǔ)空顯示栖榨,所謂的左邊表其實(shí)就是指放在left join的左邊的表
-
韋恩圖
代碼
-- 左連接
select *
from table_a a
LEFT JOIN table_b b
on a.a_pk = b.b_pk
-
查詢結(jié)果
4昆汹、右連接
- 右連接正好是和左連接相反的,這里的右邊也是相對(duì)right join來(lái)說(shuō)的婴栽,在這個(gè)右邊的表就是右表
-
韋恩圖
-- 右連接
select *
from table_a a
RIGHT JOIN table_b b
on a.a_pk = b.b_pk
5满粗、外連接或全連接
查詢出左表和右表所有數(shù)據(jù),但是去除兩表的重復(fù)數(shù)據(jù)
-
韋恩圖
代碼
select *
from table_a a
FULL JOIN table_b b
on a.a_pk = b.b_pk
-
運(yùn)行結(jié)果
以上代碼運(yùn)行的話愚争,會(huì)出現(xiàn)錯(cuò)誤映皆,這是因?yàn)镸ysql不支持全連接,所以轰枝,我們需要換另外一種方式捅彻。
代碼
以下的代碼采用的是 左連接+右連接+去重得到全連接的效果
select *
from table_a a
LEFT JOIN table_b b
on a.a_pk = b.b_pk
UNION
select *
from table_a a
RIGHT JOIN table_b b
on a.a_pk = b.b_pk
-
運(yùn)行結(jié)果
SQL 語(yǔ)句執(zhí)行順序
開(kāi)始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最終結(jié)果