sql中的七中join理論

最近有時間回顧了下mysql的join操作,特寫個總結(jié),以防自己下次還是遺忘或者是工作要用到時疏忽導(dǎo)致錯誤,廢話不多說,本文將通過具體例子介紹SQL中的各種常用Join的特性和使用場合:
1.測試中使用的mysql,且主要的示例表結(jié)構(gòu)及操作數(shù)據(jù)如下:

 CREATE TABLE `tbl_dept`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`locAdd`  VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `tbl_emp`(
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(30) DEFAULT NULL,
  `deptId` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_dept_id` (`deptId`)
  #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `tbl_dept` (`id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into tbl_dept(deptName,locAdd) VALUES('RD',11);
insert into tbl_dept(deptName,locAdd) VALUES('HR',12);
insert into tbl_dept(deptName,locAdd) VALUES('MK',13);
insert into tbl_dept(deptName,locAdd) VALUES('MIS',14);
insert into tbl_dept(deptName,locAdd) VALUES('FD',15);

insert into tbl_emp(name,deptId) VALUES('Z3',1);
insert into tbl_emp(name,deptId) VALUES('Z4',1);
insert into tbl_emp(name,deptId) VALUES('Z5',1);
insert into tbl_emp(name,deptId) VALUES('w5',2);
insert into tbl_emp(name,deptId) VALUES('w6',2);

insert into tbl_emp(name,deptId) VALUES('s7',3);
insert into tbl_emp(name,deptId) VALUES('s8',4);
insert into tbl_emp(name,deptId) VALUES('s9',51);

以下是上述sql數(shù)據(jù)庫中tbl_dept和tbl_emp的數(shù)據(jù)情況:

tbl_dept.png
tbl_emp.png

下面我們通過觀察模型,基于上述的表結(jié)構(gòu)語句構(gòu)造join查詢:

  • 內(nèi)連接
內(nèi)連接.png

而實(shí)際sql執(zhí)行情況如下:


內(nèi)連接sql.png
  • 左鏈接
左鏈接.png

sql執(zhí)行情況:


左鏈接sql.png
  • 右鏈接
右鏈接.png

sql執(zhí)行情況:


右鏈接sql.png
  • 左外鏈接
左外鏈接.png

sql執(zhí)行情況:


左外鏈接sql.png
  • 右外鏈接
右外鏈接.png

sql執(zhí)行情況:


右外鏈接sql.png
  • 全鏈接

    全鏈接.png

    但遺憾的是mysql不支持這種固定格式的寫法,但oracle支持。但是,我們可以使用union關(guān)鍵字合并且去重實(shí)現(xiàn),具體sql如下:
    全鏈接sql.png

  • 全外鏈接


    全外鏈接.png

    mysql同樣也不支持這種固定格式的寫法,但oracle支持。同樣我們只能使用union關(guān)鍵字實(shí)現(xiàn):


    全外鏈接sql.png

以上內(nèi)容只是簡單展示了兩張表之間的主外鍵關(guān)聯(lián)join,涉及到多表的操作其實(shí)是大同小異的,嗯,所以僅提供一個借鑒!工作中還需靈活運(yùn)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,144評論 0 19
  • 1、MySQL啟動和關(guān)閉(安裝及配置請參照百度經(jīng)驗(yàn),這里不再記錄。MySQL默認(rèn)端口號:3306;默認(rèn)數(shù)據(jù)類型格式...
    強(qiáng)壯de西蘭花閱讀 761評論 0 1
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,556評論 0 85
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 2,001評論 0 10
  • **SQL TOP 子句 TOP 子句用于規(guī)定要返回的記錄的數(shù)目。 對于擁有數(shù)千條記錄的大型表來說,TOP 子句是...
    廖馬兒閱讀 3,342評論 1 46

友情鏈接更多精彩內(nèi)容