黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 淺談SQL的7種Join方式

淺談SQL的7種Join方式

更新時(shí)間:2021-01-08 17:39:11 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1743次

SQL join 用于根據(jù)兩個(gè)或多個(gè)表中的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)。Join 和 Key有時(shí)為了得到完整的結(jié)果,我們需要從兩個(gè)或更多的表中獲取結(jié)果。我們就需要執(zhí)行 join。下面我們一起來(lái)看看SQL的 7種join方式。

 

數(shù)據(jù)庫(kù)中的表可通過(guò)鍵將彼此聯(lián)系起來(lái)。主鍵(Primary Key)是一個(gè)列,在這個(gè)列中的每一行的值都是唯一的。在表中,每個(gè)主鍵的值都是唯一的。這樣做的目的是在不重復(fù)每個(gè)表中的所有數(shù)據(jù)的情況下,把表間的數(shù)據(jù)交叉捆綁在一起。

下面我們創(chuàng)建部門表tbl_dept和員工表tbl_emp對(duì)上述7種方式進(jìn)行逐一實(shí)現(xiàn):

部門表:主鍵id、部門名稱deptName,部門樓層locAdd

mysql> 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;

 

員工表:主鍵id,姓名name、所屬部門deptId

 

mysql> CREATE TABLE `tbl_emp` (

    ->  `id` INT(11) NOT NULL AUTO_INCREMENT,

    ->  `name` VARCHAR(20) 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;

 

然后插入一些測(cè)試數(shù)據(jù):

mysql> INSERT INTO tbl_dept(deptName,locAdd) VALUES('技術(shù)部',11);

Query OK, 1 row affected (0.07 sec)

 

mysql> INSERT INTO tbl_dept(deptName,locAdd) VALUES('美工部',12);

Query OK, 1 row affected (0.08 sec)

 

mysql> INSERT INTO tbl_dept(deptName,locAdd) VALUES('總裁辦',13);

Query OK, 1 row affected (0.06 sec)

 

mysql> INSERT INTO tbl_dept(deptName,locAdd) VALUES('人力資源',14);

Query OK, 1 row affected (0.11 sec)

 

mysql> INSERT INTO tbl_dept(deptName,locAdd) VALUES('后勤組',15);

Query OK, 1 row affected (0.10 sec)

 

mysql> insert into tbl_emp(name,deptId) values('jack',1);

Query OK, 1 row affected (0.11 sec)

 

mysql> insert into tbl_emp(name,deptId) values('tom',1);

Query OK, 1 row affected (0.08 sec)

 

mysql> insert into tbl_emp(name,deptId) values('alice',2);

Query OK, 1 row affected (0.08 sec)

 

mysql> insert into tbl_emp(name,deptId) values('john',3);

Query OK, 1 row affected (0.13 sec)

 

mysql> insert into tbl_emp(name,deptId) values('faker',4);

Query OK, 1 row affected (0.10 sec)

 

mysql> insert into tbl_emp(name) values('mlxg');

Query OK, 1 row affected (0.13 sec)

 

mysql> select * from tbl_dept;

+----+----------+--------+

| id | deptName | locAdd |

+----+----------+--------+

|  1 | 技術(shù)部   | 11     |

|  2 | 美工部   | 12     |

|  3 | 總裁辦   | 13     |

|  4 | 人力資源 | 14     |

|  5 | 后勤組   | 15     |

+----+----------+--------+

5 rows in set (0.00 sec)

 

mysql> select * from tbl_emp;

+----+-------+--------+

| id | name  | deptId |

+----+-------+--------+

|  1 | jack  |      1 |

|  2 | tom   |      1 |

|  3 | alice |      2 |

|  4 | john  |      3 |

|  5 | faker |      4 |

|  7 | ning  |   NULL |

|  8 | mlxg  |   NULL |

+----+-------+--------+

7 rows in set (0.00 sec)

 

1、左連接(A獨(dú)有+AB共有)

查詢所有部門以及各部門的員工數(shù):

mysql> select t1.id,t1.deptName,count(t2.name) as emps from tbl_dept t1 left join tbl_emp t2 on t2.deptId=t1.id group by deptName order by id;

+----+----------+------+

| id | deptName | emps |

+----+----------+------+

|  1 | 技術(shù)部   |    2 |

|  2 | 美工部   |    1 |

|  3 | 總裁辦   |    1 |

|  4 | 人力資源 |    1 |

|  5 | 后勤組   |    0 |

+----+----------+------+

5 rows in set (0.00 sec)

 

2、右連接(B獨(dú)有+AB共有)

查詢所有員工及其所屬部門:

mysql> select t2.id,t2.name,t1.deptName from tbl_dept t1 right join tbl_emp t2 on t2.deptId=t1.id;

+----+-------+----------+

| id | name  | deptName |

+----+-------+----------+

|  1 | jack  | 技術(shù)部   |

|  2 | tom   | 技術(shù)部   |

|  3 | alice | 美工部   |

|  4 | john  | 總裁辦   |

|  5 | faker | 人力資源 |

|  7 | ning  | NULL     |

|  8 | mlxg  | NULL     |

+----+-------+----------+

7 rows in set (0.04 sec)

 

3、內(nèi)連接(AB共有)

查詢兩表共有的數(shù)據(jù):

mysql> select deptName,t2.name empName from tbl_dept t1 inner join tbl_emp t2 on t1.id=t2.deptId;

+----------+---------+

| deptName | empName |

+----------+---------+

| 技術(shù)部   | jack    |

| 技術(shù)部   | tom     |

| 美工部   | alice   |

| 總裁辦   | john    |

| 人力資源 | faker   |

+----------+---------+

 

4、A獨(dú)有

即在(A獨(dú)有+AB共有)的基礎(chǔ)之上排除B即可(通過(guò)b.id is null即可實(shí)現(xiàn)):

mysql> select a.deptName,b.name empName from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.id is null;

+----------+---------+

| deptName | empName |

+----------+---------+

| 后勤組   | NULL    |

+----------+---------+

 

5、B獨(dú)有

與(A獨(dú)有)同理:

mysql> select a.name empName,b.deptName from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null;

+---------+----------+

| empName | deptName |

+---------+----------+

| ning    | NULL     |

| mlxg    | NULL     |

+---------+----------+

 

6、A獨(dú)有+B獨(dú)有

使用union將(A獨(dú)有)和(B獨(dú)有)聯(lián)合在一起:

mysql> select a.deptName,b.name empName from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.id is null union select b.deptName,a.name emptName from tbl_emp a left join tbl_dept b on a.deptId=b.id where b.id is null;

+----------+---------+

| deptName | empName |

+----------+---------+

| 后勤組   | NULL    |

| NULL     | ning    |

| NULL     | mlxg    |

+----------+---------+

 

7、A獨(dú)有+AB公共+B獨(dú)有

使用union(可去重)聯(lián)合(A獨(dú)有+AB公共)和(B獨(dú)有+AB公共)

mysql> select a.deptName,b.name empName  from tbl_dept a left join tbl_emp b on a.id=b.deptId union select a.deptName,b.name empName from tbl_dept a right join tbl_emp b on a.id=b.deptId;

+----------+---------+

| deptName | empName |

+----------+---------+

| 技術(shù)部   | jack    |

| 技術(shù)部   | tom     |

| 美工部   | alice   |

| 總裁辦   | john    |

| 人力資源 | faker   |

| 后勤組   | NULL    |

| NULL     | ning    |

| NULL     | mlxg    |

+----------+---------+

 

以上就是SQL的7種Join方式及其實(shí)現(xiàn),其主要目的還是從MySQL數(shù)據(jù)庫(kù)的表中查詢相關(guān)的數(shù)據(jù),根據(jù)不同的數(shù)據(jù)需要采用不同的join方式。想要深入學(xué)習(xí)MySQL的小伙伴抓緊來(lái)本站的MySQL教程開(kāi)始學(xué)習(xí)吧!

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产人成免费视频 | 日本久久久久久久中文字幕 | 黄色私人影院 | yy3341殇情影院理论片 | 欧美日本道| 亚洲精品日韩专区在线观看 | 国产成人小视频 | 国产草草视频 | 国产一二三区视频 | 操人视频网站 | 亚洲最大在线视频 | 国产成人福利免费观看 | 日韩精品久久久免费观看夜色 | 毛片又大又粗又长又硬 | 国产精品亚洲综合久久 | 成人免费观看男女羞羞视频 | 日本中文字幕网 | 久久精品成人免费网站 | 久久精品综合视频 | 九九精品在线 | 久久99精品久久久久久欧洲站 | 91成人抖音 | 97影院秋霞国产精品 | 日本欧美在线视频 | 天天干夜夜操美女 | 中文字幕在线视频不卡 | 国产精品成人免费观看 | 久青草国产在线视频_久青草免 | 国产精品久久久久久久专区 | 亚洲综合男人的天堂色婷婷 | 成人国产精品999视频 | 激情久久免费视频 | 成人国产激情福利久久精品 | 清清草视频 | 超人碰碰碰人人成碰人 | 1717she永久精品免费 | 欧美激情在线观看一区二区三区 | 人人上人人干 | 国产一级片视频 | 国产亚洲精品看片在线观看 | 亚洲黄色免费 |