http://club.excelhome.net/thread-1061487-1-1.html

学习SQL一步一步开始,跟着本文的脚印带你走向SQL方向。
本分先分别介绍Microsoft Query 方法书写SQL语句,和VBA方法书写SQL语句。(注:VBA语句中只需修改其中的SQL语句即可,其他只需要复制粘贴即可)。
下面先上图:
进入VBA界面

2.插入模块

3.双击模块
 
4.在代码区码 

写入VBA代码
代码如下:

  1. Sub Test4()
  2. Dim Conn As Object, Rst As Object
  3. Dim strConn As String, strSQL As String
  4. Dim i As Integer, PathStr As String
  5. Set Conn = CreateObject("ADODB.Connection")
  6. Set Rst = CreateObject("ADODB.Recordset")
  7. PathStr = ThisWorkbook.FullName   '设置工作簿的完整路径和名称
  8. Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
  9. Case Is <= 11
  10. strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
  11. Case Is >= 12
  12. strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
  13. End Select
  14. '设置SQL查询语句
  15. strSQL = "请写入SQL语句"
  16. Conn.Open strConn    '打开数据库链接
  17. Set Rst = Conn.Execute(strSQL)    '执行查询,并将结果输出到记录集对象
  18. With Sheet3
  19. .Cells.Clear
  20. For i = 0 To Rst.Fields.Count - 1    '填写标题
  21. .Cells(1, i + 1) = Rst.Fields(i).Name
  22. Next i
  23. .Range("A2").CopyFromRecordset Rst
  24. .Cells.EntireColumn.AutoFit  '自动调整列宽
  25. .Cells.EntireColumn.AutoFit  '自动调整列宽
  26. End With
  27. Rst.Close    '关闭数据库连接
  28. Conn.Close
  29. Set Conn = Nothing
  30. Set Rst = Nothing
  31. End Sub

复制代码

介绍Microsoft Query的方法
1.从数据---自其他来源--来自Microsoft Query
 
2.选择Excel类型
 
3.选择工作簿(文件)
 
4.选择工作表
 
5.选择需求数据的列
 
6.筛选条件,本例只接选下一步
 
7.排序方法,本教程也直接下一步
 
8.返回工作表或Microsoft Query编辑器。(本例选 Microsoft Query,以便以编写SQL语句)
 
9.编写SQL语句窗口。

通过Microsoft Query学习SQL 9.jpg (146.92 KB, 下载次数: 26)

下载附件  保存到相册

2013-10-9 13:29 上传

通过以上二种方法,能知道SQL书写到什么地方。
接下来,可以开始学习SQL语句语法。

1.基于一张工作表的查询语法                                        
格式:        select[DISTINCT] [TOP<数值> [PERCENT] <列标题>[[as]]<别名列标题>]                                                
            from <表或查询1>[AS]<别名1>],<表或查询2>[AS]<别名2>],                                                
           [where<筛选条件>][order by<排序项>[asc ▏desc]]                                
                                                        
说明:        1、<>表示必选项,"[]"表示可选项,"▏"表示多选一。                                
        2、        DISTINCT:消除取重复的行                        
        3、        TOP 数值:显示前几条记录                        
        4、        TOP 数值 percent:显示前面分之多少条记录                        
        5、        <列标题>[[as]]<别名列标题>:给标题列重新命一个新名称                        
        6、        where<筛选条件>:条件语句                        
        7、排序,如果要按两个或两个以上字段,那么字段与字段之间用豆号隔开,asc升序,为默认值,desc降序。

显示所有字段的记录(全部列的内容)
语句:
语句1:

  1. select * from [sheet1$]

复制代码

语句2:

  1. select 编号,姓名,性别,出生年月,职称,部门,基本工资,婚否,奖金 from [sheet1$]

复制代码

这二个语句具有同样的功能,出来的结果都是一样的。
语句1中的*号是代表全部列,语句 2中,是写上全部列字段的名称。
如果工作表没有列标题,用F1,F2,F3,F4.....这样代替
先看原表
                       
使用SQL语句出来的结果:

Microsoft Query方法:

将结果返回工作表:

返回工作表后样式:

Microsoft Query方法返回工作表后修改SQL语句方法:
“数据”选项卡---属性---连接属性--定义---命令文本

补充说明vba启用宏方法:
1.调出开“发工具栏”
 
2.在自定义功能区,勾选“开发工具栏”
 
3.设置宏安全性
 
 
4.启用宏

5.进入VBA界面2

6.运行子过程,把光标放于代码中间任意行,按F5执行,或绿色小三角执行。
按F8是逐步执行,是学VBA中重要的调试技术。

本帖最后由 335081548 于 2013-10-9 20:52 编辑

使用SQL语句获取多列数据,及别名的使用
在Excel中所使用的SQL语句具体语法结构如下:

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

复制代码

在本例 中SELECT子句后列出查询的字段即可查询出结果,如输入以下的SQL语句:

  1. SELECT 姓名,  性别,  职称,部门 FROM [Sheet1$]

复制代码

 
使用SQL语句后结果如下图:

使用别名
1.字段别名

  1. SELECT 字段名1 AS 重命名字段1,字段名2 AS 重命名字段2 FROM [Sheet1$]

复制代码

本例中SQL语句如下:

  1. SELECT 姓名 AS Name FROM [Sheet1$]

复制代码

2.工作表别名

  1. SELECT 工作表别名.* FROM [工作表名$] 工作表别名

复制代码

本例中SQL语句如下:

  1. SELECT A.*  FROM [Sheet1$] A

复制代码

所有字段列表
可能到这里就有人会问,你这不是多此一举吗?
2楼不是介绍了

  1. SELECT * FROM [Sheet1$]

复制代码

就行了吗?还整这么复杂干什么?
其实(原来)SQL的代码是应该这样写的,上面的是简写。或者说只有一个表的情况,以后介绍多表的情况会用到表的别名。所以就在此一次把别名介绍了。

  1. SELECT [工作表名].字段名 FROM [工作表名]

复制代码

实际中SQL语句应该如下:

  1. SELCT [Sheet1$].*  FROM [Sheet1$]

复制代码

这样的使用环境中,使用表名,就太大缩短SQL语句的字符和书写方便。

注意事项:
1.在SQL语句中SQL语句英文不区分大小写,但标点符号必须是英文半角状态下输入,字段名也必须跟原来的一样。
2.使用SQL语句的时候,必须避免列字段中使用下面的特殊字符:
空格、双引号(")、撇(')、数字标记(#)、百分号(%)、大于号(>)、小于号(<)、叹号(!)、句号(.)、方括号([或])、星号(*)、美元符号($)、分号(;)、脱字号(^)、圆括号((或))、加号(+)、反斜杠(\或/)。
如果在源数据表的列字段使用了这些特殊字符,那么在使用SQL语句列出各字段的数据时,就会发生错误。为了规范使用SQL语句,在对数据源字段命名时,尽量避免使用这些特殊字符。

本帖最后由 335081548 于 2013-10-10 21:52 编辑

SQL语句中的关键词DISTINCT的使用,功能是去重复值只保留一条记录。语法结构为:

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

复制代码

实例中使用语法

  1. Select Distinct 用户姓名,用户卡号 From [sheet1$]

复制代码

数据原图:

执行SQL语句后的效果图:
按条件筛选 使用SQL关键词 WHERE查询中的条件指定要满足什么标准信息,去掉不满足条件的数据(删除用户不要的数据)。
WHERE语句中可以有多个条件,条件之间可以用操作符AND 或者OR进行连接。
WHERE语句的语法结构如下:

  1. SELECT 列字段名称 FROM [表名称$] WHERE 列字段名 运算符 值

复制代码

运算符包含大于、小于、等于、不等于、大于或等于、小于或等于、IN、 BETWEEN、AND等 。应用实例进行说明:
提取消费金额等于100的数据。(是不是比函数公式和VBA简单,语句也容易懂。)
本例使用的SQL语句如下:

  1. SELECT * FROM [Sheet1$] where 消费金额=100

复制代码

 
ORDER BY的语句使用对于ORDER BY 语句而言,默认值是升序排列,通常是不指定它。但升序的关键词为ASC,降序为DESC。
语法结构如下:

  1. SELECT 列字段名 FROM [工作表名称$] ORDER BY 指定列字段名 升序(降序)

复制代码

下面用具体的实例进行说明
按成绩进行升序排序本例中SQL语句如下:

  1. Select * FROM [Sheet1$] ORDER BY 成绩 ASC

复制代码

执行后效果如图

按成绩进行降序排序
本例中SQL语句如下:

  1. Select * FROM [Sheet1$] ORDER BY 成绩 DESC

复制代码

执行后效果如图:

二列数据按降序排序:SQL语句如下:

  1. Select * FROM [Sheet1$] ORDER BY 英语 DESC,数学 DESC

复制代码

效果如图:
 
TOP在SQL语句中的作用
TOP的应用按顺序提取记录

  1. SELECT TOP 3 * FROM [工作表名$]

复制代码

提取前面3条记录.改变3为想要提取的数字,就可以实现想得到的记录
本例中使用的SQL语句如下:

  1. SELECT TOP 3 * FROM [Sheet1$]

复制代码

结果如图:

按字段名排序提取前几名的语法
升序

  1. SELECT TOP 3 字段名 FROM [工作表名] ORDER BY 字段名

复制代码

降序

  1. SELECT TOP 3 字段名 FROM [工作表名] ORDER BY 字段名 DESC

复制代码

以下用实例进行说明
按成绩降序排列提取前三名:
SQL语句如下:

  1. Select top 3 * FROM [Sheet1$A1:C17]  ORDER BY 成绩 DESC

复制代码

结果如图所示:
 
升序:

  1. Select top 3 * FROM [Sheet1$A1:C17]  ORDER BY 成绩

复制代码

结果如图:
 
补充说明:
SQL的VBA语句如下:

  1. Sub Test4()
  2. Dim Conn As Object, Rst As Object
  3. Dim strConn As String, strSQL As String
  4. Dim i As Integer, PathStr As String
  5. Set Conn = CreateObject("ADODB.Connection")
  6. Set Rst = CreateObject("ADODB.Recordset")
  7. PathStr = ThisWorkbook.FullName   '设置工作簿的完整路径和名称
  8. Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
  9. Case Is <= 11
  10. strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
  11. Case Is >= 12
  12. strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
  13. End Select
  14. '设置SQL查询语句
  15. 'strSQL = "Select top 3 * FROM [Sheet1$] " '按顺序提取数据
  16. strSQL = "Select top 3 * FROM [Sheet1$A1:C17]  ORDER BY 成绩 DESC"
  17. Conn.Open strConn    '打开数据库链接
  18. Set Rst = Conn.Execute(strSQL)    '执行查询,并将结果输出到记录集对象
  19. With Sheet1.Range("E:G")
  20. .Cells.Clear
  21. For i = 0 To Rst.Fields.Count - 1    '填写标题
  22. .Cells(1, i + 1) = Rst.Fields(i).Name
  23. Next i
  24. .Range("A2").CopyFromRecordset Rst
  25. .Cells.EntireColumn.AutoFit  '自动调整列宽
  26. .Cells.EntireColumn.AutoFit  '自动调整列宽
  27. End With
  28. Rst.Close    '关闭数据库连接
  29. Conn.Close
  30. Set Conn = Nothing
  31. Set Rst = Nothing
  32. End Sub

复制代码

其中 [Sheet1$A1:C17]这个表示工作表名Sheet1的工作表A1:C17的这个单元格区域,这个上面介绍的区别就是突出结果在同一个工作表上。所以加上了指定的单元格区域为数据。可以根据自己的实际情况,来改变.
不在同一张表上显示结果,而且数据源规范,就可以直接用[工作表名$]。或者书写的时候写上列名不用星号("*")
本例也可以用如下的语句达到同样的效果:

  1. Select top 3 姓名,班级,成绩 FROM [Sheet1$]  ORDER BY 成绩 DESC

复制代码

TOP 与 PERCENT 组合在SQL语句中的使用
功能:是按百分比提取
用实例进行说明
按成绩降序排列提取前30%
SQL语句如下:

  1. Select TOP 30 PERCENT * FROM [Sheet1$A1:C17]  ORDER BY 成绩 DESC

复制代码

结果如图所示:
 
注:
数据源16条数据,16*0.3=4.8 四舍五入等于 5 数据提取是整数所以结果是提取5条数据。
SQL语句中的一些简单计算函数:
COUNT函数,统计函数
语法如下:

  1. SELECT COUNT(列字段) AS 别名1 FROM [工作表名$]

复制代码

本示例SQL语句如下:

  1. Select count(姓名) as 人数  FROM [Sheet1$]

复制代码

按姓名统计人数,结果如图:

SUM函数,求和函数。SQL语句语法如下:

  1. Select Sum(列字段) as 别名 FROM [工作表名$]

复制代码

求总分,本例 SQL语句如下:

  1. Select sum(成绩) as 总分  FROM [Sheet1$]

复制代码

结果如图:

AVG函数,求平均。SQL语句语法如下:

  1. Select AVG(列字段) as 别名 FROM [工作表名$]

复制代码

本例中求平均分,SQL语句如下:

  1. Select AVG(成绩) as 平均分  FROM [Sheet1$]

复制代码

结果如图:

现对上面的语句来个小变通,求成绩大于60的人数、总分、平均分
SQL语句如下:

  1. Select AVG(成绩) as 大于60的平均分,SUM(成绩) as 大于60的总分,COUNT(成绩) as 大于60的人数  FROM [Sheet1$] WHERE 成绩>60

复制代码

结果如图所示:

MAX函数,求最大值。SQL语句语法如下:

  1. Select MAX(列字段) as 别名 FROM [工作表名$]

复制代码

本例中SQL语句如下:

  1. Select MAX(成绩) as 最高分  FROM [Sheet1$]

复制代码

结果如图所示:

MIN,求最小值函数,SQL语句语法如下:

  1. Select MIN(列字段) as 别名 FROM [工作表名$]

复制代码

本例中使用的SQL语句如下:

  1. Select MIN(成绩) as 最低分  FROM [Sheet1$]

复制代码

结果如图所示:

从零开始学习SQL(图文教程)相关推荐

  1. sql 多表多行模糊查询_从零开始学习SQL(五)多表查询

    经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...

  2. 小柏实战学习Liunx(图文教程二十一)

    前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用搜索引擎. 前情回顾:小柏实战学习Liunx(图文教程二十)_Shaun-sheng的博客-CSDN博客 本节课主题:Linux安装A ...

  3. 从零开始学习OpenWrt完美教程-转

    Cisco/Linksys在2003年发布了WRT54G这款无线路由器,同年有人发现它的IOS是基于Linux的,然而Linux是基于GPL许可证发布的,按照该许可证Cisco应该把WRT54G 的I ...

  4. 从零开始学习OpenWrt完美教程+学习笔记

    原贴地址:zhidx.jiguo.com/p/186.html Cisco/Linksys在2003年发布了WRT54G这款无线路由器,同年有人发现它的IOS是基于Linux的,然而Linux是基于G ...

  5. java tomcat 教程_从零开始学习 JavaWeb - 02Tomcat教程

    Tomcat 下载 1.我们现在网上搜索一下 Apache Tomcat 2.选择需要下载安装的 Tomcat 版本,红框中的选择下载,这里我们选择 Tomcat 9, 因为 Tomcat 10 是 ...

  6. Android NDK开发入门学习笔记(图文教程,极其详尽)

    以前也简单用过JNI,但是只是简单用一下,好多都不明白.最近在看源码部分,有涉及到JNI调用的,所以这次打算彻底把它搞定. 先普及一下JNI的调用关系:JAVA-------------------- ...

  7. 使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程

    原文 http://www.cnblogs.com/biwork/archive/2013/05/22/3093896.html BI Work 使用 SQL Server 2012 Analysis ...

  8. 真正从零开始,TensorFlow详细安装入门图文教程!(linux)

    读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申请专栏作者 业界人工智能智能驾驶AI+Fintech未来医疗网络安全AR/VR机器人开发者智能硬件物联网GAIR 业界 ...

  9. TensorFlow 真正从零开始,TensorFlow详细安装入门图文教程

    https://www.leiphone.com/news/201606/ORlQ7uK3TIW8xVGF.html 读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申 ...

最新文章

  1. 技术选型之Docker容器引擎
  2. 医学教育网批量资源下载程序之——完成
  3. 如何开发自己的第1个可以上线的Java项目?
  4. BootStrap Table使用
  5. 新建linux组、用户命令
  6. 使用select一个表更新另一个表(批量更新)
  7. pytorch 实现Gradient Flipping 各种坑
  8. [Usaco2011][bzoj2442][洛谷2527]修剪草坪解题报告(dp,贪心,单调队列)
  9. JavaScript变量相关总结
  10. 深入理解Nginx及使用Nginx实现负载均衡
  11. 强大的Bigdecimal
  12. ShuffleNet 系列(1): ShuffleNet v1 理论讲解
  13. java导出excel加水印且加密(已实现)
  14. vue入门到启动_Vue入门:Vue项目创建及启动
  15. Centos7安装elasticsearch7.14.0遇到问题(无法远程访问;内存小;bootstrap checks failed)
  16. (十三:2020.08.28)CVPR 2015 追踪之论文纲要(译)
  17. 办公技巧——PPT添加页码
  18. layui显示分页,搜索后重置分页
  19. 去除字符串首尾空格(全角半角)
  20. [重装系统] windows 10 重装系统记录

热门文章

  1. java ssl server,Java SSL Server禁用弱椭圆曲线
  2. java中jquery怎么学,Jquery的基础学习
  3. OA系统选型:确定需求,“对症下药”
  4. HP DL380 G7 物理机安装debian10 提示缺少:bnx2/bnx2-mips-09-6.2.1b.fw
  5. Python数据分析学习路线个人总结
  6. Java简单学生信息管理系统
  7. openlayers6【七】地图控件controls详解
  8. 正确的三个交棒姿势将决定你是否能赢得创新这场接力赛
  9. literate program: Count Luck
  10. netstat -anp命令简单说明