数据库的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;
有些列名在两个表是共有的(名字相同,属性相同),但是连接两个表时,不列出相同的两个列名就可以用自然连接,使相同列名只返回一次,是特殊的等值连接
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
