当前位置: 首页 > wzjs >正文

房屋装修设计网站网站开发亿玛酷给力5

房屋装修设计网站,网站开发亿玛酷给力5,如何做网站网页,北京住房和城乡建设厅官网目录 一、基本概念 二、核心区别 三、语法使用规则 四、代码实演示 4.1 两张表字段相同,字段顺序也相同 4.2 两张表字段相同。但字段顺序不同 4.3 两张表存在相同字段,但一张表字段多,一张表字段少 一、基本概念 操作符功能描述去重处…

目录

一、基本概念

二、核心区别

三、语法使用规则

四、代码实演示

4.1 两张表字段相同,字段顺序也相同

4.2 两张表字段相同。但字段顺序不同

4.3 两张表存在相同字段,但一张表字段多,一张表字段少


一、基本概念

操作符功能描述去重处理性能对比
UNION合并多个查询结果,自动去除重复行较低(需排序去重)
UNION ALL合并多个查询结果,保留所有行(包括重复行)较高

二、核心区别

对比维度UNIONUNION ALL
重复数据处理自动去重保留所有重复行
执行效率较慢(需排序和去重)较快(直接合并结果)
资源消耗高(涉及临时表排序)
排序行为结果集默认无明确顺序结果集默认无明确顺序
适用场景需唯一结果的合并需保留所有记录的合并

上面两张表不需要要小伙伴们全部记下来,当然啦,能记住最好。

主要记住一句话"UNION 会去重,效率低;UNION ALL 不去重,效率高;且二者都不会自动排序"。

三、语法使用规则

UNION 和 UNION ALL 语法规则是一样的,如下实例SQL

-- UNION 语法
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
-- 这里使用了 column1, column2将字段一一列出来,如果 table1和table2字段的顺序一致,可以直接写为 select * ,下方 UNION ALL 同理
select * from table1
UNION
SELECT * FROM table2;-- UNION ALL 语法
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
或
select * from table1
UNION ALL
SELECT * FROM table2;

但需要注意以下三点:

(1)列数一致:所有 SELECT 语句的列数必须相同;
(2)数据类型兼容:对应列的数据类型需兼容(如 VARCHAR 与 TEXT 兼容);
(3)列名规则:最终结果集的列名以第一个 SELECT 的列名为准;

四、代码实演示

4.1 两张表字段相同,字段顺序也相同

user1 表数据如下图

user2 表数据如下图

此时 user1 和 user2 两个表字段完全相同,但数据略有不同,两张表都有相同的 "张三"、"李四"、"王五";

(1)使用 UNION,结果如下图。

因为两张表的"张三"、"李四"、"王五" 完全相同,所以 UNION 帮我们自动去重了,查询合并后的结果就是7条数据;

(2)使用 UNION ALL,结果如下图。

UNION ALL 不会自动去重,而是将两张表的全部数据合并,一共十条数据;

4.2 两张表字段相同。但字段顺序不同

user1 表数据如下图

user4 表数据如下图

此时由于两张表字段顺序,我们不能直接使用 select * ,虽然username,password 都是 VARCHAR 类型可以兼容,但是查询到的数据会报错

如下图,不管是 UNION,还是UNION ALL,最终的表字段顺序会以第一张表 user1 的字段顺序为准,这就会产生一个问题,我 user4 表中,passwor 和 username 顺序是反着的,因为没有转化,就会导致查询到的结果中,user4 表的查询结果,用户的密码 password 被当作 username,用户的 username 被当作 password;造成数据错误。

这种情况下,我们就不能直接使用 SELECT *,而是需要将字段一一对应。

如下图中代码所示,我们需要将字段一一列出,并让两张表的字段顺序也与之对应,我这里使用 AS 关键字取别名,实际开发过程中也较为常见,有时候 table1 用户名字段可能为 username,table2 表中用户名字段可能为 name,我们就为查询结果的虚拟表字段取别名,方便我们理解。

4.3 两张表存在相同字段,但一张表字段多,一张表字段少

这也是一种较为常见的情况,比如我 table1 表中有 A,B,C三个字段;table2 有A,B,C,D四个字段,我希望对这两张表UNION合并取出查询结果。

如下为 user1 表数据

如下为 user3 表数据,

与之对比,user3 少了一个 age 年龄字段。

此时,我们如果使用 SELECT * 去 查询,会报错。如下图,报错称"两张表有不同数量的列"。

此时我们就需要"补列字段" ,因为 user3 没有 age 字段,我们要在查询结果中进行填充;

如下,我们使用 "NULL AS age"对查询结果中 user3 的age字段进行填充,使其全部为 NULL,这样就可以与 user1 进行UNION 或 UNION ALL啦!

当然,我们也可以不使用 NULL 进行填充,使用任何数据都可以。

例如空字符串'',这样一来查询结果就全部都是空字符串了。

也可以使用具体数据,比如 age 为年龄,我们就让没有这个字段的,全部默认填充为 18。 

如下图

OK小伙伴们,以上三种情况基本上涵盖了多表进行 UNION,UNION ALL 的全部情况啦!不难理解,有需要自动动手尝试的小伙伴,我就把建表SQL放在文章最下面了,自取即可。

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user1
-- ----------------------------
DROP TABLE IF EXISTS `user1`;
CREATE TABLE `user1`  (`uid` int NOT NULL,`username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`age` int NULL DEFAULT NULL,PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user1
-- ----------------------------
INSERT INTO `user1` VALUES (1, '张三', '123', 17);
INSERT INTO `user1` VALUES (2, '李四', '1234', 18);
INSERT INTO `user1` VALUES (3, '王五', '12345', 18);
INSERT INTO `user1` VALUES (4, '赵六', '12346', 19);
INSERT INTO `user1` VALUES (5, '123', '12345', 20);DROP TABLE IF EXISTS `user2`;
CREATE TABLE `user2`  (`uid` int NOT NULL,`username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`age` int NULL DEFAULT NULL,PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user2
-- ----------------------------
INSERT INTO `user2` VALUES (1, '张三', '123', 17);
INSERT INTO `user2` VALUES (2, '李四', '1234', 18);
INSERT INTO `user2` VALUES (3, '王五', '12345', 18);
INSERT INTO `user2` VALUES (4, '赵六', '12345', 19);
INSERT INTO `user2` VALUES (5, '123456', '123454536', 21);DROP TABLE IF EXISTS `user3`;
CREATE TABLE `user3`  (`uid` int NOT NULL,`username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user3
-- ----------------------------
INSERT INTO `user3` VALUES (1, '张三', '123');
INSERT INTO `user3` VALUES (2, '李四', '1234');
INSERT INTO `user3` VALUES (4, '赵六', '12346');
INSERT INTO `user3` VALUES (5, '123456', '123454536');DROP TABLE IF EXISTS `user4`;
CREATE TABLE `user4`  (`uid` int NOT NULL,`password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NULL DEFAULT NULL,`age` int NULL DEFAULT NULL,PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user4
-- ----------------------------
INSERT INTO `user4` VALUES (1, 'afd‘', 'ewfew', 11);
INSERT INTO `user4` VALUES (2, 'defg', 'ergegwr', 19);
INSERT INTO `user4` VALUES (3, 'fdgg', 'fwe', 55);
INSERT INTO `user4` VALUES (4, '而我4', '3544', 18);
INSERT INTO `user4` VALUES (5, '12345', '123', 20);SET FOREIGN_KEY_CHECKS = 1;


文章转载自:

http://epJdSbJ8.zLxrg.cn
http://1f6enFid.zLxrg.cn
http://qWuSHiwQ.zLxrg.cn
http://p0CcTA8Z.zLxrg.cn
http://0iTpwP8S.zLxrg.cn
http://WZ5Ez0bq.zLxrg.cn
http://d4KiakGa.zLxrg.cn
http://TiUsm839.zLxrg.cn
http://hhnhXyJv.zLxrg.cn
http://YmH0vaFe.zLxrg.cn
http://zHGNNZKe.zLxrg.cn
http://svCbZC0H.zLxrg.cn
http://I0Q9sqS8.zLxrg.cn
http://RKDhn55x.zLxrg.cn
http://Gw86h3jB.zLxrg.cn
http://cT5KT59N.zLxrg.cn
http://dZGN9upX.zLxrg.cn
http://2RmiC8sL.zLxrg.cn
http://7fSMh3er.zLxrg.cn
http://RG0olibe.zLxrg.cn
http://5ylZ09E8.zLxrg.cn
http://cQwD9cnZ.zLxrg.cn
http://TyVDy24S.zLxrg.cn
http://mDwbyKuc.zLxrg.cn
http://62KkFPik.zLxrg.cn
http://sPAadgNJ.zLxrg.cn
http://XVvvveKW.zLxrg.cn
http://aMTOcDCZ.zLxrg.cn
http://qcuPKAWO.zLxrg.cn
http://AnLUijGT.zLxrg.cn
http://www.dtcms.com/wzjs/767298.html

相关文章:

  • 刚做的单页网站怎么预览如何做x响应式网站
  • 网站建设基本流程公司网站自己可做吗
  • 企业网站建站之星Fastcgi做网站
  • 个人网站怎么做扫码支付免费素材库网
  • 行政机关网站建设广告公司取名字大全免费查询
  • 开通网站运营商备案做网站资源
  • 重庆企业建站模板朝阳区手机网站设计服务
  • 广东省建设工程监督站官方网站双城网站建设公司
  • 做外贸网站要什么条件wordpress程序 wp
  • 合肥网站推广石柱网站建设
  • 做经销找厂家好的网站网站建设备案是什么
  • 网站维护技术seowhy
  • 四站合一网站建设南京网站制作链接
  • 效果建网站的公老外做的中国汉字网站
  • 网站基础功能介绍企业网站模板 免费
  • asp网站例子有文化内涵又高雅的公司名字
  • 广东省住房和城乡建设厅网站 粤建网国内知名广告公司有哪些
  • 郑州网站建设公司排名wordpress 主题介绍
  • 机电网站模板上海公司网站建设
  • 山东省住房和城乡建设厅服务网站婚庆公司套餐价目表
  • 法律服务网站建设优惠券 wordpress
  • 网站建设需要哪些费用游戏网站首页设计
  • 公司网站 免费模板杭州专业网站
  • 如何在电子表格上做网站的连接漫画网站建设
  • 微信分销网站建设价格邢台贴吧
  • 网站对企业的作用企业网站推广的线上渠道
  • 如何做网站?WordPress签到打卡
  • 网站模板使用手机版网站seo怎么做
  • seo网站的优化方案二级建造师证书查询官方网站
  • 免费自助网站建站做网站的 简历