中企动力 > 商学院 > sql两个表数据合并
  • ?

    SQL——MySQL高级查询2

    郝晓凡

    展开

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

    mysql高级查询2

    select高级查询还有以下几个语法,模糊查询like,子查询,记录集合并union。

    模糊查询like有以下三个符号%,_,[]。语法如下:

    % 代表任意个数,任意字符。例如:

    SELECT * FROM shaicheng WHERE username LIKE '%里%';

    SELECT * FROM shaicheng WHERE username LIKE '%里';

    _ 代表任意单个字符。语法如下:

    SELECT * FROM SHAICHENG WHERE GROUPNAME LIKE '_士';

    SELECT * FROM SHAICHENG WHERE changci LIKE '__场';

    [AB]可选用一个字符。

    子查询语法如下:

    假如有两张联合的表,

    如果你是关系运算符,子查询的结果只能是一个(单行单列)。 如果你要做多行值的判断,有in。 in语法如下:

    记录集合并union语法如下:

    查询出来的列名是按照第一个表的列名显示出来的。 去空查询语法如下:

    排序和条件可写在最后一条查询语句上:

  • ?

    Excel催化剂生成完全组合笛卡尔积结果表,数据库技术落地Excel

    Jean

    展开

    在数据库的多表查询中,通常会有各种连接关系,同样地在Excel环境中,也有很大的场景需要用到类似数据库的多表查询,如经典的VLOOKUP就是其中一种类似LEFT JOIN查询的查询效果。在很多时候需要生成一个完全数据组合时,也是需要用到数据库的笛卡尔积查询表的原理,让两个表产生任意的完全组合,此次Excel催化剂同样将非常有价值的数据库技术,搬到Excel环境中供普通用户无需掌握任何数据库查询知识,轻松一键完成所要的数据结果。

    笛卡尔积查询表是什么?

    简单说就是两个表的两两组合,产生不重复的记录集,如A表有10行,B表有20行,两两组合出来的结果为200行,A表的第1行与B表关联,产生20条记录,A表总共10行数据,所以总共产生了20*10=200行数据。

    一般来说多表查询时,会对笛卡尔积查询表返回的结果进行筛选,如VLOOKUP的效果就是筛选出源表中LookupValue与查询表的查找列对应的某一行记录值相同的行,而不是返回所有查找表的行,所以一般笛卡尔积查询表会产生大量的数据,因其未经条件去筛选交叉后的结果表。

    使用场景

    很常见的一个场景,某一堆商品款号,想生成一份它所有尺码的数据表,用于关联后续其他的销售指标、库存指标等,防止因销售指标数据或库存指标数据某些数据缺失而遗漏掉部分数据,致使计算类似销售动销率、库存周转率等指标时,未能生成预期正确的结果。

    原有数据

    最终想要的数据结构

    其实两两组合,不局限说只有一列的数据表,可以有多列的。甚至多个表也能胜任,所有操作都是一键完成。

    原有数据

    多个表两两组合结果

    具体操作

    构造好需要生成结果表的数据源

    需要每个表有表头列标题,中间不断行等最基本的标准数据源结构表格要求。多个表之间列标题名不重复。

    点击生成按钮即可完成。

    只需简单一键,即可完成数据库管理员写一大堆SQL语句才能得到的结果,并且只需依赖于Excel的数据环境!

    结果表生成

    总结

    无数次听到外行人动不动就说颠覆Excel、取代Excel,说这样话的人,甚至连说话的资格都没有,连Excel是什么物种都不知道,只按自己认为的Excel是什么就作一些哇纵取宠吓人的结论,实在只能显示出自己的无知。

    Excel催化剂,致力于让Excel更伟大、更强大,让更多人可以享受到数据领域的各样技术的红利,数据库技术是一个非常棒的技术,Excel是一个非常棒的用户端使用软件,两者结合,借助Excel催化剂的作用,威力无穷。

  • ?

    多表组合查询——Python操作Mysql数据库

    家怜梦

    展开

    前面我们介绍了单张表的查询,包括模糊查询、分组、排序、各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的表进行组合查询,本节内容涉及到的几个关键点有:

    等值和非等值连接查询;自然连接查询;嵌套查询;自身连接查询;

    我们还是通过Python中的“pymysql”模块来连接Mysql数据库,进行今天的学习。

    准备工作

    和上次一样,我们还是建立了三张表,它们分别是:学生表、学科表、成绩表。每张表都有一个自增量的ID字段,作为该表的主键,同时,成绩表里有两个字段“student_ID”和“subject_ID”与学生表的ID、学科表的ID相关联,同时在这三张表里都插入了一些基础数据,通过已插入的这些基础数据我们来进行分析和介绍。

    下面是三张表的建表语句和一些基础数据:

    建表语句基础数据

    等值和非等值连接查询

    通过比较运算符(通常有:=、>=、<=、>、<、<>、!=、like等)进行查询条件的比较,sql语句的写法是:

    select A.*,B.* from A,B where A.主键=B.外键 and 其他查询条件;

    假如我们想要查询学生名字叫陈伟的学生的成绩,在Python中举例如下:

    进行等值连接查询的sql语句编写时,要明确指出数据源来源于哪几张表,并且要很清楚的知道哪几个字段是相互关联的,然后再添加其他的查询条件。其实这种查询的原理就是将数张表合成一张大表,字段相加,记录相乘,即笛卡尔积。

    自然连接查询

    自然连接查询就是在等值连接查询的基础之上,将需要的列展示出来的查询。

    sql语句的写法是:select A.字段1,B.字段2 from A,B where A.主键 = B.外键 and 其他查询条件;

    例如:我们想查询陈伟的所有学科的成绩,展示学生姓名、学科和成绩,如下图所示:

    自然连接查询的本质实际上也是基于等值连接查询结果的,只是在查询结果集中进行筛选。因此,基于以上两种查询,优点是简单方便,缺点也很明显:查询效率较低,不利于海量的数据查询;

    嵌套查询

    嵌套查询就是将一个查询语句嵌套到另一个查询语句里,得到的查询结果集;

    假设我们要查询学生名字叫陈伟的语文考试成绩,用嵌套查询可以这样写:

    编写嵌套查询语句时要注意的地方是:在写之前要理清思路,表的结构要清晰明了。单条sql查询语句要逐个验证,然后再结合在一起进行验证。它的优点在于查询效率较高,缺点就是逻辑性比较强;

    从上例我们看到通过“in”关键词将两条查询语句连在一起进行嵌套查询,下面列举一下嵌套查询所用到的各种关键词:

    in:查询的值是否在子查询语句的结果集中,如上例;exist:子查询语句的结果只要不为空,就返回所有符合条件的查询结果;

    上例中,因为子查询语句能查询到值,因此主查询语句将返回所有的查询结果;

    any:子查询语句的结果集中只要有任意一个满足条件,就返回所有符合条件的查询结果;all:子查询语句的结果集必须都要满足条件,才返回符合条件的查询结果;

    请注意上例中any和all的用法,得到不同的结果;

    自身连接查询

    当在一张表中用到该表的好几个字段作为筛选条件,可以考虑使用自身连接查询实现,此时,需要为该表起一个别名,例如我们要把所有大于女同学年龄的所有男同学查询出来,可以这么做:

    通过as关键词为同一张表命名为一个别名,从而可以使用这个别名,自身连接查询在应用中往往因为语法简单,但逻辑关系复杂而导致不太容易被理解。其实有时候,只要将单表看成是多张表,跳出思维的局限性,有时候在应用中会给我们带来很多方便。

  • ?

    初探OceanBase的定期合并&数据分发

    风之子

    展开

    摘要定期合并和数据分发都是将UpdateServer中的增量更新分发到ChunkServer中的手段,二者的整体流程比较类似:UpdateServer冻结当前的活跃内存表(Active MemTable),生成冻结内存表,并开启新的活跃内存表,后续的更新操作都写入新的活跃内存表。

    MergeServer

    MergeServer的功能主要包括:协议解析、SOL.解析、请求转发、结果合并、多表操作等。OceanBase客户端与MergeServer之间的协议为MySQL协议。MergeServer首先解析MySQL协议,从中提取出用户发送的SQL语句,接着进行词法分析和语法分析,生成SQL语句的逻辑查询计划和物理查询计划,最后根据物理查询计划调用OceanBase内部的各种操作符。

    MergeServer缓存了子表分布信息,根据请求涉及的子表将请求转发给该子表所在的ChunkServer。如果是写操作,还会转发给UpdateServer。某些请求需要跨多个子表。此时MergeServer会将请求拆分后发送给多台ChunkServer,并合并这些ChunkSever返回的结果。如果请求涉及多个表格,MergeServer 需要首先从ChunkServer获取每个表格的数据,接着再执行多表关联或者嵌套查询等操作。

    MergeServer 支持并发请求多台ChunkServer,即将多个请求发给多台ChunkServer,再一次性等待所有请求的应答。另外,在SQL执行过程中,如果某个子表所在的ChunkServer出现故障,MergeServer会将请求转发给该子表的其他副本所在的ChunkServer。这样,ChunkServer故障是不会影响用户查询的。

    MergeServer本身是没有状态的,因此,MergeServer宕机不会对使用者产生影响,客户端会自动将发生故障的MergeServer屏蔽掉。

    UpdateServer

    UpdateServer是集群中唯一能够接受写入的模块,每个集群中只有一个主UpdateServer。UpdateServer中的更新操作首先写人到内存表,当内存表的数据量超过一定值时,可以生成快照文件并转储到SSD中。快照文件的组织方式与ChunkServer中的SSTable类似,因此,这些快照文件也称为SSTable。另外,由于数据行的某些列被更新,某些列没被更新,SSTable中存储的数据行是稀疏的,称为稀疏型SSTable。

    为了保证可靠性,主UpdateServer 更新内存表之前需要首先写操作日志,并同步到备UpdateServer。当主UpdateServer 发生故障时,RootServer上维护的租约将失效,此时,RootServer将从备UpdateServer列表中选择一台最新的备UpdateServer切换为主UpdateServer 继续提供写服务。UpdateServer岩机重启后需要首先加载转储的快照文件(SSTable文件),接着回放快照点之后的操作日志。

    由于集群中只有一台主UpdateServer提供写服务,因此,OceanBase很容易地实现了跨行跨表事务,而不需要采用传统的两阶段提交协议。当然,这样也带来了一系列的问题。由于整个集群所有的读写操作都必须经过UpdateServer,UpdateServer的性能至关重要。OceanBase集群通过定期合并和数据分发这两种机制将UpdateServer一段时间之前的增量更新源源不断地分散到ChunkServer,而UpdateServer只需要服务最新一小段时间新增的数据,这些数据往往可以全部存放在内存中。另外,系统实现时也需要对UpdateServer的内存操作、网络框架、磁盘操作做大量的优化。

    ChunkServer

    ChunkServer的功能包括:存储多个子表,提供读取服务,执行定期合并以及数据分发。

    OceanBase将大表划分为大小约为256MB的子表,每个子表由一个或者多个SSTable组成(一般为一个),每个SSTable由多个块(Block,大小为4KB~64KB之间,可配置)组成,数据在SSTable中按照主键有序存储。查找某一行数据时,需要首先定位这一行所属的子表,接着在相应的SSTable中执行二分查找。SSTable支持两种缓存模式,块缓存(Block Cache)以及行缓存(Row Cache)。块缓存以块为单位缓存是近读取的数据,行缓存以行为单位缓存最近读取的数据。

    MergeServer将每个子表的读取请求发送到子表所在的ChunkServer,ChunkServer首先读取SSTable中包含的基线数据,接着请求UpdateServer获取相应的增量更新数据,并将基线数据与增量更新融合后得到最终结果。

    由于每次读取都需要从UpdateServer中获取最新的增量更新,为了保证读取性能,需要限制UpdateServer中增量更新的数据量,最好能够全部存放在内存中。由于每次读取都需要从UpdateServer中获取最新的增量更新,为了保证读取性能,需要限制UpdateServer中增量更新的数据量,最好能够全部存放在内存中。

    OceanBase内部会定期触发合并或者数据分发操作,在这个过程中,ChunkServer将从UpdateServer获取一段时间之前的更新操作。通常情况下,OceanBase 集群会在每天的服务低峰期(凌晨1:00开始,可配置)执行一次合并操作。这个合并提作往往也称为每日合并。

    定期合并&数据分发

    定期合并和数据分发都是将UpdateServer中的增量更新分发到ChunkServer中的手段,二者的整体流程比较类似:

    UpdateServer冻结当前的活跃内存表(Active MemTable),生成冻结内存表,并开启新的活跃内存表,后续的更新操作都写入新的活跃内存表。UpdateServer通知RootServer数据版本发生了变化,之后RootServer通过心跳消息通知ChunkServer。每台ChunkServer启动定期合并或者数据分发操作,从UpdateServer获取每个子表对应的增量更新数据。

    定期合并与数据分发两者之间的不同点在于,数据分发过程中ChunkServer只是将UpdateServer中冻结内存表中的增量更新数据缓存到本地,而定期合并过程中ChunkServer 需要将本地SSTable中的基线数据与冻结内存表的增量更新数据执行一次多路归并,融合后生成新的基线数据并存放到新的SSTable中。定期合并对系统服务能力影响很大,往往安排在每天服务低峰期执行(例如凌晨1点开始),而数据分发可以不受限制。

    如下图,活跃内存表冻结后生成冻结内存表,后续的写操作进入新的活跃内存表。定期合并过程中ChunkServer 需要读取UpdateServer中冻结内存表的数据、融合后生成新的子表,即:

    新子表=旧子表+冻结内存表

    虽然定期合并过程中各个ChunkServer的各个子表合并时间和完成时间可能都不相同。但并不影响读取服务。如果子表没有合并完成,那么使用旧子表,并且读取UpdateServer中的冻结内存表以及新的活跃内存表;否则,使用新子表,只读取新的活跃内存表,即:

    查询结果=旧子表+冻结内存表+新的活跃内存表=新子表+新的活跃内存表

    作者:凌洛

  • ?

    同和君带你玩转数据库!详解SQL Server基础操作……(附个人黑历史+大数据分析)

    尹绿蓉

    展开

    前几天同和君被某粉丝吐槽不务正业,那今天咱们就来务一下正业,来简单讲讲有关SQL Server的基础操作(其实是为了交差)。

    有关SQL(结构化查询语言)与其对应的各类数据库管理系统(SQL Server、Access等)的功能与运用范围,在这里就不做赘述了,有兴趣的可以去搜一下,然后你就会发现一个新的世界了~

    首先下载安装SQL Server并配置其实例,这方面也不详细说明了,有点电脑基础的都会~然后就是正式的实操环节,首先连接到服务器:

    进入后第一件事当然是创建属于自己的数据库啦~

    右键「数据库」,选择新建,然后跳出右边的对话框,根据实际需求来设置「文件初始大小」、「文件增长量」、「日志初始大小」、「日志增长量」。

    增长方式和文件大小上线可以自定义。

    确定后就能看的建立好的数据库了。

    试着生成一个有关数据库信息的脚本~

    详细sql文件信息如下:

    当然你也可以选择使用Transact-SQL语言直接来创建数据库:

    先点「新建查询」调出查询分析编译器:

    然后输入以下语句:

    createdatabase HKSDBonprimary(name=HKSDB_data,filename='d:\File\TEMP\HKSDB_data.mdf',size=20MB,maxsize=500MB,filegrowth=5MB)log on(name=HKSDB_log,filename='d:\File\TEMP\HKSDB_log.mdf',size=20MB,maxsize=100MB,filegrowth=1MB)

    右键相应的数据库属性会跳出很多选项:

    如果你把数据库的初始值设高了,可以通过收缩来减小:

    接着是通过代码来查看&修改数据库属性:

    --查看数据库属性sp_dboption HKSDB--查看数据库信息sp_helpdb HKSDB--修改日志文件的最大值和初始值use HKSDBgoalterdatabase HKSDB modifyfile(name=HKSDB_log,maxsize=200MB)alterdatabase HKSDB modifyfile(name=HKSDB_log,size=40MB)--更改数据库use HKSDBalterdatabase HKSDBaddfile(name=HKSDBFZ,filename='D:\File\TEMP\HKSDBFZ.ndf',size=2mb,maxsize=10mb,filegrowth=1mb)alterdatabase HKSDBadd log file(name=HKSDBLOG1,filename='D:\File\TEMP\HKSDBLOG1.ldf',size=2mb,maxsize=10mb,filegrowth=1mb)use HKSDBalterdatabase HKSDBremove file SYDBFZalterdatabase HKSDBremove file HKSDBLOG1如果你对某个数据库不爽,想把它打入冷宫,可以直接右键数据库删除,也可以手动输入代码:

    use HKSDBdropdatabase HKSDB似乎碰上了钉子户:

    试试大神的代码:

    USE MASTER GO DECLARE@dbname SYSNAME SET@dbname='同和君的的数据库'--这个是要删除的数据库库名 DECLARE@s NVARCHAR(1000)DECLARE tb CURSORLOCALFORSELECT s ='kill '+ CAST(spid ASVARCHAR)FROM MASTER..sysprocesses WHERE dbid = DB_ID(@dbname)OPEN tb FETCHNEXTFROM tb INTO@sWHILE @@fetch_status=0BEGINEXEC(@s)FETCHNEXTFROM tb INTO@sENDCLOSE tb DEALLOCATE tb EXEC('drop database ['+@dbname+']')

    完美~

    好的,那么到这里大家已经大致了解了数据库的定义与管理,接下来带大家起飞了~

    手动一个个创建数据表是一件很苦逼的事情,再加上我们还没学到JAVA和SQL Server链接的JDBC技术,所以同和君选择一种取巧的方式:从Excel表格直接导入数据~

    选好数据源类型:

    选好目标文件后下一步:

    然后对目标表的各项数据分别选好类型(其中大多都系统默认好了,局部地区稍微修改下就好,比如学号之类的):

    我们来预览一下~

    成功~

    然后我们可以开始骚操作了~

    不过在此之前,还是先教大家如何备份&还原吧~

    接下来是还原,这回我们导入一个不同的~

    这个是我用来做多表连接的~详细的后边会讲到~

    首先我们来查一下同和君初恋女孩高一的成绩:

    然后保存该sql文件:

    然后再查一下初中好基友的总分区排名:

    再保存下:

    然后查一下b站up主@SmartMogician 的黑历史

    哟,竟然出现同校同学同名同姓的情况了!

    这样的话就能成功筛选了:

    没想到当年的语文竟然这么难!

    当年的学霸……

    这样看可能更直观:

    (emmmm……这真的不是招生办的阴谋……)

    这样看上去就舒心多了~

    很多朋友应该都存在偏科的现象,但在我们的深入研究下,发现事情并不简单:

    语文不好的同学不一定数学好,

    但数学不好的同学就有可能语文好了……

    三倍的人数差还是能说明问题的……

    那么以上呢,就给大家详细展示了大多常用查询指令的用法~接下来给大家介绍的是「连接查询」,通过这个就能实现多表之间的查询了。

    成绩与排名两个表连接,分析理科总成绩与数学成绩之间的关系:

    看样子综合能力好的同学,真的是每一门都不偏科呢!

    最后同和君要做一件集大成的骚操作~

    首先合并一下数据:

    嘿嘿嘿~

    我们来看看初中的那些朋友们到了高中后学习状态如何~

    唯一能对应上的只有姓名了,结果如下:

    换个表试试:

    大数据显示,初中成绩好的高中成绩不一定好,但高中成绩好的初中成绩一定不差!

    什么?有人想看我的成绩?

    抱歉,这两个表里都没有我的名字hhh,成绩好就是可以为所欲srgsrgz

    [数据删除]

    大家也看到了,现在在某二本混日子的我……(;д;)

    所以学习这玩意嘛……哎,不谈了不谈了……

    接下来介绍一些增删查改的相关操作:

    --增加一条记录insert N校联考 (考号,姓名,班级,学校)values('10001','同和君','一班','社会大学')--求表中各校总分的平均分,并存入一个新的数据库createtable AvgMarks(学校 nvarchar(255),平均分 real)insertinto AvgMarks(学校,平均分)select 学校,AVG([9科总分分数])from N校联考groupby 学校--将「N校联考」中所有「广州市第五中学」的信息更新为「广州五中」update N校联考set 学校='广州五中'where 学校='广州市第五中学'执行结果:

    ok,那么就暂且先告一段落吧,基本操作讲完了,下回咱们就讲讲高级操作吧~

    鸣谢以上十七所高校提供的成绩信息~

  • ?

    Excel多表汇总与 SQL查询语句

    范水瑶

    展开

    同学们好啊 ,首先以实例讲解一下怎样合并多表的数据。

    数据源文件中有三个表,分别是一组、二组、三组,里面有各个销售员的销售数据。

    Step 1、建立连接并获取数据

    点击【数据】选项卡下面的“现有连接”。

    在弹出的对话框中点击左下角的“浏览更多”按钮,找到数据所在的文件,会弹出以下对话框。

    任意选择一个表并点击“确定”按钮就可以了,因为后面还要更改成查询语句。

    在弹出的对话框中可以选择显示列表或者直接创建数据透视表,并且可以指定数据显示的位置。

    这里选择“表”,这样我们就建立了链接并初步导入了数据。

    Step 2、修改查询语句

    在上一步中得到的数据区域,点击右键,选择“表格”-->“编辑查询”。

    在打开的对话框中输入查询语句:

    Select "一组" as 数据来源,* from [一组$] union all

    Select "二组" as 数据来源,* from [二组$] union all

    Select "三组" as 数据来源,* from [三组$]

    这样就完成了多表汇总,是不是感觉很简单呢?

    最后和大家分享一些常用的SQL查询语句,到时候可以适当修改一下代码中的工作表名称,就可以应用到自己的工作中了。

    常用查询SQL语句示例

    1、查询名称为Data的表中的所有字段的数据

    Select * from [Data$]

    注意:Excel工作表名称后面需要加上美元符号$,并且需要放到方括号[]中;星号*表示查询所有字段的数据。

    2、查询名称为Data的表中的“销售员”和“销量”两个字段。

    Select [销售员],[销量] from [Data$]

    注意:字段名称可以不加方括号,但是当字段名称中间有空格、字段名是SQL语句中的保留名称等特殊情况时就必须要加方括号;在查询时,只要表中有这些字段就可以了,不用管这些字段的前后顺序。

    3、查询名称为Data的表中销售员Lily的销售信息

    Select * from [Data$] Where 销售员="Lily"

    注意:需要指定条件时就用Where语句,多个条件用And、Or连接,分别表示并且、或;条件格式为[字段名]=“具体内容”,操作符可以是=、>、=、In,比如:销售员 in ("Lily","Cherry")。

    4、查询名称为Data的表中销售员Lily的销售总额

    Select 销售员,Sum(销量) as Lily的总销量 from [一组$] Where 销售员="Lily" group by 销售员

    注意:进行汇总的时候,可以直接用Sum、Group by;在select中出现的字段,如果这个字段是汇总字段,则这个字段必须加到Group by里面;Sum函数是求和,也可用其他功能函数,比如:平均值AVG、计数Count、最大值Max、最小值Min;As可以重命名字段。

    5、查询名称为Data的表中D5:F200区域的数据中销售员和销量两个字段

    Select [销售员],[销量] from [Data$D5:F200]

    注意:在Data$后面加上区域的地址,如果不知道最后一行是多少,或者为了让数据区域是动态的,可以省略最后一行的行号,如下。

    Select [销售员],[销量] from [Data$D5:F]

    6、查询名称为一组、二组、三组三个表中的所有数据

    Select "一组" as 数据来源,* from [一组$] union all Select "二组" as 数据来源,* from [二组$] union all Select "三组" as 数据来源,* from [三组$]

    注意:有需要合并的表,就用union all连接起来,一般最多不能超过50个。

    在输入SQL语句时,各种符号一定要在英文状态下输入,否则你可能半天都检查不出来错在哪儿;如果使用星号*,那几个表中的数据字段顺序要一致、数据区域大小要一致,如果直接指定字段名称,则不受此限制。

    7、查询名称为一组、二组、三组三个表中销售员Lily和David的所有数据

    select * from (Select * from [一组$] union all Select * from [二组$] union all Select * from [三组$]) where 销售员 in ("Lily","David")

    注意:可以在一个查询语句的外面在嵌套上另外一个查询语句,表示从查询结果中再次查询。

    8、查询名称为Data的表中的所有字段的数据并按照日期排序

    Select * from [Data$] order by 日期

    注意:排序用order by,默认是升序,加上DESC表示降序,DESC是descending的缩写。降序示例:order by 日期 Desc

    End.

    文章转载自:Excel轻松学

  • ?

    超重量级的Excel多表“合并及汇总”功能,99.99%的人都没用过!

    柏梦桃

    展开

    前言:最近总有同学提问

    怎么能合并多个工作簿?多个Excel表格汇总到一个表中?怎么把表分发给其他人做调查,收回后能批量合并到一个表中?

    合并多个表的确是一个难题,好象除了VBA也没有什么好办法,即使是新兴的power query也很难完成固定位置合并的问题。其实兰色在06年就发现了个很神奇的工作簿合并的功能,所以今天再把这篇旧文翻出来,希望能帮到大家。

    这个功能是小编昨天无意中发现的,为什么称它为超重量级Excel功能,小编先给你演示个操作。

    【例】在一个文件夹中有N个公司的Excel格式报表,需要把这些报表的数据合并到“报表.xlsx”中。

    只是点了一个按钮,然后选取了要合并的文件,刷刷刷,各公司的数据已全部合并过来了,是不是很神奇!(合并多个文件的多个工作表也适用)

    小编在合并过程中,使用了一个在Excel中隐藏很深的功能:比较和合并工作簿

    我们先把它揪出来:

    文件- 选项 - 快速访问工具栏 - 不在功能区域中的命令 - 找到“比较和合并工作簿”

    然后在快速访问工具栏中就可以看到它了,只是它是灰色的。

    它到底怎么才可以用? 和小编一起开始操作吧!

    1、先设置一个报表模板(可以有多个工作表),把格式设置好,然后设置成共享工作簿。

    2、把设置好的模板发放给各公司填写。

    3、收到各公司上缴的报表,放在一个文件夹里。

    4、合并时,点击“比较与合并工作簿"按钮,选取要合并的文件,然后.....如开始动画演示。多个Excel文件的合并瞬间完成!

    在实际工作中,这个功能可以省去非常大的工作量,毕竟把N多个报表汇总到一起是一件多么枯燥又费力的事情。

    但这个功能只是合并而不能汇总。

    别急,小编再教大家一个神技能,多个表格如何汇总!

    多个Excel表格汇总到一个表中,有一个神秘技巧帮你实现!

    如下图所示工资表中,含有多个月份的数据。要求在汇总表中把所有月份的数据汇总到一起。

    操作步骤:

    1、数据选项卡 - 现有连接 - 浏览更多。

    2、找到当前操作的excel文件。

    3、选取任一个表格名称

    4、【导入数据】窗口中,显示方式选“数据透视表”,放置位置选工资表A1单元格(也可以选新工作表)

    5、选取刚创建的数据透视表,然后点击 数据透视表工具 - 选项 - 更改数据源 - 连接属性。

    6、把下面的代码粘贴到命令文本框里。

    ------------------------------------

    select '3月' as 月份, * from [3月$] union all select '4月' as 月份, * from [4月$]union all select '5月' as 月份, * from [5月$]

    -------------------------------------

    代码说明:

    1) 具体的SQL语句一言两语也说不清楚,同学们只需要按下面的模式套用即可。有多少表,连接多少个。

    Select * from [表1$] union all Select * from [表2$] union all Select * from [表3$]....union all Select * from [表N$]

    2) '3月' as 月份: 是为三个表创建一个共同的字段(月份),其中引号内3月为自定义字符,用来区分工作表,只是不一定要和工作表名称一致。月份是数据透视表要用的字段名,也是自定义的。中间用 as 连接,放在select 之后 *号之前。如果不需要为三个表创建共同字段名,此部分可以省略。

    7、连接完成!下面就是对数据透视表的基本操作,添加行、列标标签和数据标签。

    8、调整格式和修改字段标题。最终效果如下图所示。

  • ?

    多表、多工作簿合并,不加班升职来找我!EXCEL中的SQL语言会用吗

    情丝

    展开

    关于多表或者多工作簿合并,一直以来都是大难题。Excel2013以上有POWER QUERY,高手有VBA,普通人有Ctrl+C和Ctrl+V。无数次的重复操作,吃力不讨好,普通人真不容易,累死累活,效率低下。

    其实,在Excel中还存在一种比较通俗易懂的语言,SQL语言。

    以前微信文章讲过几次SQL,不过因为很多人都是第一次接触,对这个功能还是非常陌生。今天,再详细说明SQL语言如何来合并多工作表和多工作簿。

    格式相同的三张工作表,现在要将这三张表格合并起来,并统计每个省份的销售金额。

    Step 01 按快捷键Alt、D、D、D一个个慢慢按,别心急!找到相应的工作簿,点击打开。

    注:别怀疑快捷键,这个是正确的。

    Step 02 找到输入SQL语句的地方:命令文本,详见动画。

    Step 03 输入SQL语句。

    SELECT * FROM [2015年$]UNION ALLSELECT * FROM [2016年$]UNION ALLSELECT * FROM [2017年$]

    这个语句的意思,就是将2015年、2016年和2017年三个表合并在一起,UNION ALL就是合并起来的意思。

    SELECT语法:

    SELECT 标题名称 FROM [工作表名称$]

    用*就是代表所有标题名称,如果只需要省份和销售额,也可以这样写。

    SELECT 省份,销售金额 FROM [2015年$]UNION ALLSELECT 省份,销售金额 FROM [2016年$]UNION ALLSELECT 省份,销售金额 FROM [2017年$]

    直接写2个标题名称,在生成的数据透视表就只有2个标题,其他都不显示。

    Step 04 再借助数据透视表拖动两下就完成统计。

    --------------------

    现在假设原来是多个工作簿,并且存在桌面的多工作簿文件夹内,同样要统计每个省份的销售金额。

    Step 01 新建一个空白工作簿,按快捷键Alt、D、D、D一个个慢慢按,找到文件夹内任意一个工作簿打开。

    Step 02 输入SQL语句。

    SELECT 省份,销售金额 FROM [C:UserschenxiluDesktop多工作簿5年.xlsx].[Sheet1$]UNION ALLSELECT 省份,销售金额 FROM [C:UserschenxiluDesktop多工作簿6年.xlsx].[Sheet1$]UNION ALLSELECT 省份,销售金额 FROM [C:UserschenxiluDesktop多工作簿7年.xlsx].[Sheet1$]

    看到长长的一段语句,被吓到了吧。其实,SQL只是外表吓人,其实很简单的,很多内容都不需要自己输入。

    Win10有一个直接复制路径到Excel的功能,这个前几天的文章也讲到了。

    一下子就将所有工作簿包含路径复制出来,非常简单。

    如果你使用的系统找不到这个功能,直接右键属性也可以找到。

    多工作簿SQL语句的用法:

    SELECT 字段标题 FROM [路径工作簿名称.后缀].[工作表名称$]

    不管多表还是多工作簿,用法其实差不多。

    Step 03 数据透视表统计。

  • ?

    实用!多表合并的通用方法

    郦绮玉

    展开

    关于多表,几乎每一天都有读者问这个问题,是很多读者的心病。针对最新版本的Excel2016,多表合并简直太简单,可惜很多人都还在用低版本,怎么办呢?

    低版本多表合并最简单的办法是SQL语句,而SQL语句在Access软件中是最重要也是使用最频繁的语句。

    今天,卢子介绍下Access中的多表合并,明天的文章再聊详细的讲解Excel中的多表合并,这样更容易学习和理解。

    在Access中有三张格式相同的表格,现在要将这些表格合并起来。

    Step 01单击插入→查询设计,关闭弹出来的显示表对话框,单击SQL视图。

    SELECT语句是最常用,90%的情况下,我们都是借助SELECT语句实现。

    SELECT语法:

    SELECT字段名称FROM表格名称

    Step 02假设现在要查询小天使这个表的全部数据,可以用下面的语句:

    SELECT * FROM 小天使

    *就代表了所有字段名称,单击运行,就将小天使这个表格的所有数据查询出来了。

    Step 03右键,单击SQL视图。

    Step 04输入多表合并查询语句,单击运行就搞定。

    SELECT * FROM MAXUNION ALLSELECT * FROM RUDUNION ALLSELECT * FROM 小天使

    表格跟表格合并起来,用UNION ALL。

    SQL是最容易学习的语言,不同软件之间的SQL几乎一样,只是有细微的差异。

  • ?

    一个语句搞定Excel多表合并

    Ryan

    展开

    昨天的文章发表了一篇在Access合并多表的方法,有不少读者是第一次接触到这个软件,对这个软件感到很陌生。没事,以后有机会,我会从头开始讲解Access。

    讲Access其实是为了讲解SQL,因为在Access中,SQL更容易理解。在输入SQL语句的时候,初学者容易漏输入空格。

    漏了空格就会导致运行出错。

    在输入SQL语句,是允许输入多个空格,不影响结果。

    说完Access,现在回到Excel中,Excel中的语句跟Access相似度90%以上。

    Excel中SQL语法:

    SELECT字段名称FROM[表格名称$]

    表格名称后面需要加$符号,还有就是需要加[ ]。

    Excel中SQL多表合并语法:

    SELECT字段名称FROM[表格名称1$]UNION ALLSELECT字段名称FROM[表格名称2$]UNION ALLSELECT字段名称FROM[表格名称3$]……

    格式相同的4个表格,现在要将这4个表格合并起来。

    Step 01单击数据→现有连接→浏览更多。

    Step 02找到指定工作簿,单击打开。

    Step 03保持默认不变,单击确定。

    Step 04保持默认不变,单击属性。

    Step 05单击定义,在命令文本框输入语句,单击确定。

    SELECT * FROM [2015年$]UNION ALLSELECT * FROM [2016年$]UNION ALLSELECT * FROM [2017年$]UNION ALLSELECT * FROM [2018年$]

    Step 06保持默认不变,单击确定。

    这样就将4个表格合并。

    这么辛苦输入SQL合并多个工作表有什么好处?

    当表格的内容有变动的时候,只要右键刷新一下,就可以自动更新,实现一劳永逸。而普通的复制粘贴,每一次变动都需要再重新复制粘贴一次,比较麻烦,而且容易出错。

sql两个表数据合并

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP