在VBA中使用SQL

news/2024/7/21 5:16:04 标签: sql, excel, 数据库

VBA在处理大量的数据/计算时如果使用常规方法会比较慢,因此需要对其进行性能优化以提高运行速度,一般的方法是数组计算或者sql计算。SQL计算的速度最快,限制也是最多的,数组速度其次,灵活性也更高

如果要在vba中调用sql处理数据基本可以遵循一个套路,只要修改其中的SQL语句即可

调用sql处理数据VBA代码如下,其中’##### #####中的地方是每次运行时要根据情况修改的:

Sub Sql_Query()

 Dim Conn As Object, Rst As Object
 Dim strConn As String, strSQL As String
 Dim i As Integer, PathStr As String
 Set Conn = CreateObject("ADODB.Connection")
 Set Rst = CreateObject("ADODB.Recordset")
 PathStr = ThisWorkbook.FullName 
 Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接(不同版本的excel连接是不同的)
 Case Is <= 11
    strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
 Case Is >= 12
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
 End Select

 strSQL = "Select * FROM [rawdata$]"   '####在这里改SQL查询语句####

 Conn.Open strConn '打开数据库链接
 Set Rst = Conn.Execute(strSQL) 	'执行查询,并将结果输出到记录集对象
 With ThisWorkbook.Sheets("sql data") 	'#####在这里更改输出的位置对应的表名####
      .Cells.Clear
      For i = 0 To Rst.Fields.Count - 1    '填写标题
        .Cells(1, i + 1) = Rst.Fields(i).Name	'在第一行输出字段名
      Next i
      .Range("A2").CopyFromRecordset Rst     '从A2单元格开始输出
      .Cells.EntireColumn.AutoFit '自动调整列宽
 End With
 Rst.Close  '关闭数据库连接
 Conn.Close
 Set Conn = Nothing
 Set Rst = Nothing

End Sub

接下来,开始学习SQL语句语法

1.基于一张工作表的查询语法

SQL语法格式比较固定,只需要根据特定的语法顺序,再根据需求加减关键字即可。首先我们给出一个比较全的格式如下:

 SELECT   [DISTINCT]   [TOP <数值>  [PERCENT]]   列标题  [聚合函数]   [[AS] <别名列标题>]   FROM  表或查询 [[AS] <别名>]   [WHERE <筛选条件>]  [ORDER BY <排序项>  [ASC|DESC]]                                

说明:

  1. <>表示必选项,[]表示可选项,|表示多选一。
  2. SQL语句中不区分大小写,上述式中的的大写意为SQL中关键字
  3. SELECT 关键字:选取关键字
  4. DISTINCT关键字:去除重复的行
  5. TOP 关键字:显示前几条记录
  6. PERCENT关键字:TOP 与 PERCENT 组合在SQL语句中的使用可以按照百分比提取数据
  7. AS关键字:给标题列重新命一个新名称
  8. FROM关键字:给定数据源的名称
  9. WHERE关键字:筛选条件语句
  10. ORDER BY关键字:排序,一般和ASC|DESC一起使用,将结果升序或者降序排列。

接下来详细讲解每一个关键字的使用:

SELECT关键字和FROM 关键字

SELECT关键字和FROM 关键字是每个SQL语句中都必须要有的关键字。SELECT关键字可以选取最终需要显示所有字段,而FROM关键字则用于告诉程序数据源的位置在哪里。VBA中一个最基本的SQL语句写法如下:

SELECT 列字段名1,列字段名2,列字段名3...... FROM [工作表名称$]

例如我们需要从student这一个sheet中取出ID,name,address,score这四列数据:

select ID,name,address,score from [student$]

也可以使用[]将列名括起来表示这是一个列名

select [ID],[name],[address],[score] from [student$]

如果需要取所有的列,可以直接使用“*”号来取全部的列,从而减少代码量

sql">#*号是代表全部列
select * from [sheet1$]

AS关键字

AS关键字用于给字段或者数据源表取别名,从而简化一些比较长的表名或字段名

sql">#从student表中选取姓名列,并重命名为Name
SELECT 姓名 AS Name FROM [Student$]

DISTINCT关键字

DISTINCT关键字功能是去重,语法结构为:

SELECT DISTINCT 要去重复值的字段1,要去重复值的字段2...... FROM [工作表名$]

举例如下:

sql">#选取所有不重复的name
Select Distinct name From [student$]
#选取name和ID都不重复的数据
Select Distinct name,ID From [student$]

WHERE关键字

where关键字可以按条件筛选数据。WHERE语句后可以有一个或多个条件,条件之间可以用操作符AND 或者OR进行连接。
WHERE语句的语法结构如下:

SELECT 列字段名称 FROM [表名称$] WHERE 条件

where后的条件语句可以是运算符或逻辑判断,包含大于、小于、等于、不等于、大于或等于、小于或等于、IN、 BETWEEN、AND、NOT等。

sql">#选取取消费金额等于100的数据
SELECT * FROM [test$] where 消费金额=100
#选取级别为A的数据
SELECT * FROM [test$] where 级别='A'

http://www.niftyadmin.cn/n/5342813.html

相关文章

红队视角下的公有云基础组件安全(二)

前言 我们已经发过一篇红队视角下的公有云基础组件安全的文章&#xff0c;这篇是对上一篇内容的补充&#xff0c;主要为国外公有云如AWS、Google Cloud、Azure。 本文主要从红队视角讲述公有云基本服务中一些因配置问题产生的安全风险。 目录 ● 云存储 ● 云计算 ● 云网…

有效的括号[简单]

>优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串s&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 【1】左括号必须用相同类型的右括号…

Redis--Bitmap有序集合的语法和使用场景举例

文章目录 前言Bitmap概述Bitmap命令介绍使用场景结尾 前言 Redis除了常见的五种数据类型之外&#xff0c;其实还有一些少见的数据结构&#xff0c;如Geo&#xff0c;HyperLogLog&#xff0c;Bitmap等。虽然它们少见&#xff0c;但是作用却不容小觑。本文将介绍Bitmap数据类型的…

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…

Linux 编写bash脚本删除一些长期没有清理的日志文件

目 录 一、Linux运行很久&#xff0c;发现磁盘空间不足 二、找到原因&#xff0c;是日志文件积累太多 三、编写脚本&#xff0c;删除以前的日志文件 一、Linux运行很久&#xff0c;发现磁盘空间不足 今天发现一个视频平台的服务器运行特别慢&#xff0c;输入命令&…

kingbase常用SQL总结之锁等待信息

锁信息与等待事件 分析kingbase&#xff08;pg&#xff09;数据库锁等待、死锁时需要我们准确的定位等锁或者死锁相关的事务。关于获取锁等待信息或者死锁信息已有经典的SQL可以直接使用&#xff0c;但是需要我们先了解sql语句获取的每个字段的意义。 获取到锁等待事务不能完全…

C++函数对象-部分函数应用-表明一个对象是标准占位符,或者可以用作标准占位符(std::is_placeholder)

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 部分函数应用 std::bind_front 与 std::bind 提供部分函数应用的支持&#xff0c;即绑定参数到函数以创建新函数。 表明一个对象是标准占位符&#x…

技术驱动宠物健康:宠物在线问诊系统的高效搭建手册

在数字化时代&#xff0c;技术正在催生出许多创新的医疗服务&#xff0c;而宠物在线问诊系统便是其中一项引领潮流的创举。本文将为你提供一份高效搭建宠物在线问诊系统的手册&#xff0c;通过技术代码示例&#xff0c;让你轻松打造一套技术驱动的宠物健康管理系统。 1. 架构…