如 A ,B表
A中字段为 (Aid,username ,address);
B中字段为 (Bid,Aid,ObjType,name);
其中ObjType 中字段值为 S时候 表示发表,为 D 则为下载
如果只查询 S(发表)过的东西:
select A.*,count(Bid) from A join B on A.Aid=B.Aid where ObjType='S';
这其中:假如只有A join B,后面没跟on 限制条件的话,则会生成一个n*n的临时表,就好像,where A,B 一样
加上On 限制条件 只查询条件相同的结果集
如果想把 发表过和 下载过的 结果全部查出来的话,则考虑使用 union咯
select A.username,count(Bid) as S,0 as D from A join B on A.Aid=B.Aid where ObjType='S'
union
select A.username,0 as S,count(Bid) as D from A join B on A.Aid=B.Aid where ObjType='D'
结果就为:
username S D
AA 2 0
AB 3 0
AA 0 3
AB 0 5
这样就把记录合并起来咯,但是AA的 S记录没有喝 D记录 放在同一行中
然后 在来一次查询
select t.username,sum(t.S) as S sum(t.D)as D from (
select A.username,count(Bid) as S,0 as D from A join B on A.Aid=B.Aid where ObjType='S'
union
select A.username,0 as S,count(Bid) as D from A join B on A.Aid=B.Aid where ObjType='D' ) as t group by username;
结果就为:
username S D
AA 2 3
AB 3 5
其实用不考虑重复记录的话 用union all 速度会比 union 快一些
union :这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而union all只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
使用 union 组合查询的结果集有两个最基本的规则:
1。所有查询中的列数和列的顺序必须相同。
2。数据类型必须兼容
分享到:
相关推荐
MySQL中的`UNION`和`JOIN`语句是两种用于合并数据的方法,它们在不同的场景下有着各自的优势和用途。本教程将详细讲解这两种语句的使用区别。 首先,`UNION`主要用于合并两个或多个SELECT查询的结果集,它会去除...
- MySQL不直接支持全连接,但可以利用UNION或UNION ALL模拟实现。 五、分组与聚合函数 1. GROUP BY: - `SELECT 字段1, GROUP BY 字段2;` 按照字段2对数据进行分组。 2. 聚合函数: - `COUNT(*)` 计算记录数。...
如果需要包含所有行,包括重复的,可以使用UNION ALL。 4. **自连接**:在同一个表中进行自我比较,通常用于处理具有层级关系的数据。 5. **联接查询优化**:为了提高性能,可以使用索引、避免全表扫描和选择合适...
全外联接在MySQL中并不直接支持,但可以通过UNION ALL结合左右外联接来模拟实现。 在实际使用中,应根据具体需求选择合适的JOIN类型。例如,如果你需要查看所有作者的信息,无论他们是否有对应的出版商信息,你应该...
MySQL 是一个广泛使用的开源关系型数据库管理系统,以其高效、可靠和易于使用的特点受到广大开发者青睐。在面试中,了解MySQL的基础知识以及优化技巧是至关重要的。 1. MySQL 的核心概念: MySQL是一个支持SQL语言...
- 子查询与组合查询:在WHERE子句中使用子查询,或者使用UNION和UNION ALL进行多个SELECT语句结果的合并。 2. 表操作: - 表的创建:使用CREATE TABLE语句创建新的表,可以定义表结构,包括字段名称、数据类型和...
- `UNION`和`UNION ALL`的区别。 3. **索引**: - B-Tree、Hash、R-Tree和BitMap索引的原理。 - 如何创建和管理索引,包括主键和唯一索引。 - `EXPLAIN`命令的使用,分析查询执行计划,理解索引的影响。 4. **...
本文通过对比两种MySQL递归树查询方法——使用自连接和递归联合以及利用变量和循环,详细分析了它们各自的实现原理及适用场景。在实际应用中,根据具体需求和数据特点选择合适的方法至关重要。希望本文能为开发人员...
MySQL 是一个广泛使用的开源关系型数据库管理系统,以其高效、灵活和易用性著称。在面试中,掌握 MySQL 的核心概念和技术是至关重要的。以下是基于给出的面试题和答案详解的一些关键知识点: 1. **MySQL 简介**:...
在MySQL数据库系统中,SQL(Structured Query Language)是用于管理和操作数据的核心语言。当我们谈论“MySQL高级SQL查询”时,通常是指那些超越基础SELECT、INSERT、UPDATE和DELETE语句的复杂查询技巧。这些技巧...
9. UNION/UNION ALL:用于合并多个SELECT语句的结果,UNION会去除重复行,UNION ALL则保留所有行。 10. ORDER BY:对结果集进行排序。 11. LIMIT:最后,LIMIT用于获取指定数量的记录,常用于分页查询。 关于执行...
- 子查询与联接查询的选择,以及UNION和UNION ALL的差异。 - 使用LIMIT和OFFSET进行分页查询,考虑性能优化。 5. 视图与存储过程 - 视图作为虚拟表,简化复杂查询,提供安全性。 - 存储过程:预编译的SQL语句...
4. **MySQL与Redis的区别**:MySQL是持久化数据库,适合存储大量数据并执行复杂查询;Redis是内存数据库,提供高速数据读取,适合做缓存。Redis的数据会根据配置的策略进行淘汰,而MySQL的数据始终保存。 5. **索引...
UNION 与 UNION ALL 的用法及区别 - **UNION**:用于合并两个或多个 SELECT 语句的结果集,但会自动去除重复的行。 - **UNION ALL**:同样用于合并结果集,但它不会去除重复行,即保留所有行,包括重复的行。 ###...
MySQL是一种广泛使用的开源关系型数据库管理系统,其在企业级应用中占据重要地位。本篇主要探讨多表查询、交集、并集、差集、DCL用户授权以及MySQL的一些基本概念。 首先,我们来看多表查询。在实际业务中,数据...
3. 联合查询:使用UNION和UNION ALL合并多个SELECT结果。 4. 子查询:在查询语句中嵌套查询,用于获取满足特定条件的数据。 5. JOIN操作:学习INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,理解它们在不同场景下...
实验报告主要涵盖了数据库系统的基本操作,特别是MySQL中的分组查询、多表连接和子查询的运用。以下是对这些知识点的详细解释: 1. **GROUP BY 语句与聚合函数**: GROUP BY 语句用于将数据分组,通常与聚合函数如...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。本文将介绍MySQL的基础知识,包括连接MySQL服务器、SQL语句、查询、聚合操作、表连接、子查询以及联合查询。 首先,连接MySQL服务器是使用...
合理使用子查询,了解`UNION`与`UNION ALL`的区别,以及何时使用`LIMIT`来限制结果集大小。 3. **存储引擎**:了解InnoDB和MyISAM的区别,包括事务处理、行级锁定、全文索引等特性。InnoDB是默认引擎,提供事务安全...
MySQL是一种广泛使用的开源关系数据库管理系统,在数据管理和查询方面具有强大的功能。本文将详细介绍MySQL中的多条件查询技术,包括子查询、多表查询等重要知识点,旨在帮助读者更好地理解和掌握这些实用技巧。 ##...