一篇文章读懂MySQL的各种联合查询
联合查询是指将两个或两个以上的表的数据根据一定的条件合并在一起!
联合查询主要有以下几种方式:
- 全连接:将一张表的数据与另外一张表的数据彼此交叉联合查询出来
举例如下:
先建两张表:
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=8 DEFAULT CHARSET=utf8`
CREATE TABLE `t_emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL COMMENT '性别',
`deptId` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_dept_id` (`deptId`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8
插入数据:
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('3', '令狐冲', '24', NULL, '1');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('4', '洪七公', '70', NULL, '2');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('5', '乔峰', '35', NULL, '2');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('6', '灭绝师太', '70', NULL, '3');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('7', '周芷若', '20', NULL, '3');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('8', '张三丰', '100', NULL, '4');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('9', '张无忌', '25', NULL, '5');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('10', '韦小宝', '18', NULL, NULL);
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('26', 'lin', '12', NULL, '12');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('1', '华山', '华山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('2', '丐帮', '洛阳');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('3', '峨眉', '峨眉山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('4', '武当', '武当山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('5', '明教', '光明顶');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('6', '少林', '少林寺');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('7', '华山', '北京');
全连接是将表1的数据一条一条的与表2的数据进行拼接,产生table1table2条数据
全连接测试:
可以看到,表的数据是79条,字段的个数是3+3个,不过这种查询没什么意义,让我们来看一下内连接;
-
内连接
内连接进行查询的过程是:将表A的数据一条一条拿出来跟表B的数据进行对比,满足条件的数据就保留下来
测试如下:
-
外连接:外连接有两种类型,左外连接和右外连接,外连接和内连接的区别是,无论表A与表B是否有符合条件的数据,主表都会保留,这里的主表是指左连接时左边的表,右连接时右边的表;
1). 左连接:关键字是left join,直接看数据,更好理解
可以看到,左表(主表)的数据都保留下来了
2). 右连接
可以看到,右表(主表)的数据都保留下来了
介绍一下using关键字:
连接过程:
1、在进行连接查询中,使用on的地方就可以用using来代替,不过前提是,进行联合的条件的字段是同名的
2、如果使用using关键字来进行联合,最终相同的字段只会显示一个!
好了,今天的内容就到此为止了,后续会不断的更新,欢迎大家点赞关注!