数据库的7种Join查询,左右连接、左右外连接、内连接、全表连接、全表外连接(图解版,带建表语句)

文章目录

  • 7种join连接
    • 1.左连接(左外连接)
    • 2.右连接(右外连接)
    • 3.A表的独有
    • 4.内连接
    • 5.B表的独有
    • 6.全表外连接
    • 7.全连接
  • 8.自连接
  • 9.自然连接

在这里插入图片描述
建表sql语句

drop table if exists t_dept;CREATE TABLE `t_dept` (`id` INT(11) NOT NULL AUTO_INCREMENT,`deptName` VARCHAR(30) DEFAULT NULL,`address` VARCHAR(40) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;drop table if exists t_emp;
CREATE TABLE `t_emp` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,`age` INT(3) DEFAULT NULL,`deptId` INT(11) DEFAULT NULL,
empno int  not null,PRIMARY KEY (`id`),KEY `idx_dept_id` (`deptId`)#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO t_dept(deptName,address) VALUES('华山','华山');
INSERT INTO t_dept(deptName,address) VALUES('丐帮','洛阳');
INSERT INTO t_dept(deptName,address) VALUES('峨眉','峨眉山');
INSERT INTO t_dept(deptName,address) VALUES('武当','武当山');
INSERT INTO t_dept(deptName,address) VALUES('明教','光明顶');INSERT INTO t_dept(deptName,address) VALUES('少林','少林寺');INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('风清扬',90,1,100001);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('岳不群',50,1,100002);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('令狐冲',24,1,100003);INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('洪七公',70,2,100004);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('乔峰',35,2,100005);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('灭绝师太',70,3,100006);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('周芷若',20,3,100007);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张三丰',100,4,100008);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张无忌',25,5,100009);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('韦小宝',18,null,100010);

多表连接有两种方式:全连接和join连接
全连接:将各个表用逗号隔开,就制定了一个全连接。如果语句如下:

select * from t_emp ,t_dept;

直接就变成了所谓的笛卡尔积,即行数为左边行数*右表行数
在这种情形下,通常需要使用where字句限定条件,称为等值连接
在这里插入图片描述

7种join连接

1.左连接(左外连接)

left join = left outer join
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.右连接(右外连接)

right join = right outer join
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.A表的独有

在这里插入图片描述
在这里插入图片描述

4.内连接

在这里插入图片描述
在这里插入图片描述

5.B表的独有

在这里插入图片描述
在这里插入图片描述

6.全表外连接

在这里插入图片描述
在这里插入图片描述

7.全连接

在这里插入图片描述

在这里插入图片描述

8.自连接

如果要来连接的表中有列名相同,并且连接的条件就是列名相等,那么on条件可以换成using字句
在这里插入图片描述

再举个例子有如下表:
在这里插入图片描述
假设发现某物品(ID为DINTR)存在问题,想知道生产该物品的供应商所生产的其他物品是否出现问题
,可以通过子查询解决
在这里插入图片描述
也可用自连接
在这里插入图片描述
由于两个表是相同的表,需要为各表取别名防止歧义性。
通常自来连接比子查询快得多,因为使用子查询的时候需要创建临时表,使用完后还得销毁

9.自然连接

select columns from table1 natural join table2;
有些列名在两个表是共有的(名字相同,属性相同),但是连接两个表时,不列出相同的两个列名就可以用自然连接,使相同列名只返回一次,是特殊的等值连接


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部