VBA学习(43):利用VBA+SQL查询Excel工作表数据(多表查询)

作为【VBA+SQL查询Excel工作表数据】系列的终篇,本文将继续使用VBA+SQL查询的模板,并详细介绍如何在VBA中使用SQL多表查询语句。由于多表查询的SQL语句相对复杂,建议在熟练掌握前4篇的案例之后,再学习多表查询的SQL语句。

图片

[VBA+SQL查询的模板]

图片

[工资表$A3:M65536] 

图片

[员工花名册$A1:I65536]

SQL多表查询

以下SQL多表查询语句,只要将代码第7行的sql语句替换即可。

1.隐式内连接(通过where关键字)

sql = "select 工资表.工号,工资表.姓名,部门,实发金额 from [工资表$A3:M65536] as gzb,[员工花名册$A1:I65536] as yghmc where gzb.工号=yghmc.工号"

2.显式内连接(inner join)

sql = "select 部门,avg(基础工资) as 平均工资 from [工资表$A3:M65536] gzb inner join [员工花名册$A1:M65536] yghmc on gzb.工号=yghmc.工号 group by 部门 having avg(基础工资)<2000"

3.左连接(left join)

sql = "select * from [工资表$A3:M65536] gzb left join [员工花名册$A1:I65536] yghmc on gzb.工号=yghmc.工号"

4.右连接(right join)

sql = "select * from [工资表$A3:M65536] gzb right join [员工花名册$A1:I65536] yghmc on gzb.工号=yghmc.工号"

左连接vs右连接:左连接,将左表作为基础表,并列出左表所有的查询信息,而右表只列出ON条件下与左表匹配的查询信息;右连接的原理,亦相同。

5.全连接(full outer join)

注:★SQL语句操作Excel工作表数据,不支持全连接!★

6.自连接

例:查询英文名重复的员工信息

sql = "select t1.姓名,t1.英文名 from [员工花名册$A1:I65536] t1 inner join [员工花名册$A1:I65536] t2 on t1.英文名=t2.英文名 where t1.工号<>t2.工号 "

7.嵌套连接

例:查询年龄>平均年龄的员工信息

sql = "select 姓名,部门,出生日期 from [员工花名册$A1:I65536] where year(now)-year(出生日期)>(select avg(year(now)-year(出生日期)) as 年龄 from [员工花名册$A1:I65536])"

8.union all和union

例:查询年龄最大的五位员工信息以及年龄最小的五位员工信息

sql = "select top 5 * from [员工花名册$A1:I65536] order by 出生日期 union all select top 5 * from [员工花名册$A1:I65536] order by 出生日期 desc "

注:union all连接全部记录,union去除重复记录。

技术交流,软件开发,欢迎微信沟通:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwLink1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值