MYSQL中UNION(联合查询)

0 写在前面

实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询。

1 格式

[查询一] UNOIN [查询二]……:将多条查询语句的结果合并成一个结果并去重
[查询一] UNOIN ALL [查询二]…… :将多条查询语句的结果合并成一个结果

2 SQL准备

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `date_birth` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', '小明', '男', '21', '2001-02-02 12:29:30');
INSERT INTO `person` VALUES ('2', '小红', '女', '20', '2002-01-01 00:00:00');
INSERT INTO `person` VALUES ('3', '张三', '男', '22', '2002-01-01 00:00:01');
INSERT INTO `person` VALUES ('4', '李四', '男', '30', '1992-07-10 12:00:00');


DROP TABLE IF EXISTS `person02`;
CREATE TABLE `person02`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `date_birth` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;

-- ----------------------------
-- Records of person02
-- ----------------------------
INSERT INTO `person02` VALUES (1, '小明', '男', 21, '2001-02-02 12:29:30');
INSERT INTO `person02` VALUES (2, '小红', '女', 20, '2002-01-01 00:00:00');
INSERT INTO `person02` VALUES (3, '张三', '男', 22, '2002-01-01 00:00:01');
INSERT INTO `person02` VALUES (4, '李四', '男', 30, '1992-07-10 12:00:00');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

3 代码示例

3.1 UNION ALL

查询两个表的人大于20岁的集合。
sql:

SELECT * FROM person WHERE age >20
UNION ALL
SELECT * FROM person02 WHERE age > 20;

查询结果:
在这里插入图片描述
这样的结果有一点问题,有相同的数据。

3.2 UNION

同样的查询条件:
sql:

SELECT * FROM person WHERE age >20
UNION 
SELECT * FROM person02 WHERE age > 20;

查询结果:
在这里插入图片描述
可以看到使用UNION可以去重复的数据。

4 写在最后

使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。
最后还是需要根据具体业务选择使用 UNION 还是 UNION ALL。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL多表联合查询可以使用JOIN语句实现,常见的JOIN类型有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。 例如,我们有两个表,一个是"students"表,包含学生的基本信息,另一个是"grades"表,包含学生的成绩信息。我们想要查询出每个学生的姓名和对应的成绩,可以使用以下SQL语句: ``` SELECT students.name, grades.score FROM students INNER JOIN grades ON students.id = grades.student_id; ``` 这里使用了INNER JOIN,表示要查询两个表都存在的记录。ON语句指定了两个表之间的关联条件,即"students"表的"id"字段等于"grades"表的"student_id"字段。 如果我们想要查询所有学生的信息,包括没有成绩记录的学生,可以使用LEFT JOIN,如下所示: ``` SELECT students.name, grades.score FROM students LEFT JOIN grades ON students.id = grades.student_id; ``` 这里使用了LEFT JOIN,表示要查询"students"表所有的记录,而不管"grades"表是否有对应的记录。如果"grades"表没有对应的记录,"score"字段将会显示为NULL。 类似地,如果我们想要查询所有成绩信息,包括没有对应学生记录的成绩,可以使用RIGHT JOIN。 最后,如果我们想要查询所有学生和成绩的信息,包括没有记录的情况,可以使用FULL OUTER JOIN。但是需要注意的是,MySQL不支持FULL OUTER JOIN语法,需要通过UNION语句实现。 ### 回答2: MySQL多表联合查询是指在一个SQL语句同时查询多个表,并通过共同的字段进行关联。它可以更加灵活地获取数据,提高查询效率。 通常情况下,我们需要使用JOIN语句来实现多表联合查询。常见的JOIN类型包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL JOIN(全连接)。 如果我们有两个表A和B,它们之间有一个共同的字段x,我们可以使用INNER JOIN将它们连接起来,例如: SELECT * FROM A INNER JOIN B ON A.x = B.x; 这样就能够获取A表和B表x字段相匹配的数据。 如果我们使用LEFT JOIN,那么除了获取到A表和B表x字段相匹配的数据外,还会包含A表x字段没有匹配到的数据。 而如果我们使用RIGHT JOIN,那么除了获取到A表和B表x字段相匹配的数据外,还会包含B表x字段没有匹配到的数据。 如果我们使用FULL JOIN,那么会获取到A表和B表x字段相匹配的数据,同时还会包含A表和B表x字段没有匹配到的数据。 除了以上的JOIN类型外,我们还可以在多表联合查询使用WHERE子句来限定查询条件,使用GROUP BY来进行分组聚合操作,使用HAVING来筛选分组后的数据,使用ORDER BY来排序结果集等。 通过使用多表联合查询,我们可以充分利用数据库的关联性,获取到更丰富、更准确的数据结果。但是,在进行多表联合查询时,需要注意表之间的关联关系和使用正确的JOIN类型,以确保查询结果的正确性和有效性。 ### 回答3: MySQL 多表联合查询是指在一个查询语句同时查询多个表,并根据某些条件将这些表关联起来,从而得到所需要的数据。多表联合查询在实际应用非常常见,能够提供更加丰富的查询结果。 要实现多表联合查询,首先需要确定需要查询的表,在查询语句使用关键字“FROM”加上表名,用逗号分隔多个表。例如,可以这样写:SELECT * FROM 表1, 表2 WHERE 表1.字段 = 表2.字段。这样就将表1和表2关联起来了。在WHERE条件,还可以通过其他条件进行进一步筛选,来获取符合要求的结果。 在多表联合查询,还可以根据需要使用关键字“JOIN”来指定不同的关联方式。常见的关联方式有INNER JOIN、LEFT JOIN、RIGHT JOIN等。INNER JOIN表示两个表的匹配记录,LEFT JOIN表示左表的所有记录以及右表匹配记录,RIGHT JOIN表示右表的所有记录以及左表匹配记录。 多表联合查询可以实现更加复杂的查询需求。例如,可以根据多个条件进行关联,可以在查询结果包含多个表的字段,可以通过对查询结果进行聚合、排序等。通过合理运用多表联合查询,可以快速准确地获取所需的数据。 总之,在实际应用MySQL 多表联合查询是非常常用的功能,能够让我们更方便地获取跨表的数据,实现更加灵活和高效的查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值