在Excel中使用SQL语句实现精确查询
微博上有人回复评论说直接用vlookup、或者导入数据库进行查询处理就好了,岂不是更高效、更灵活;其实给人的第一直观感觉是这样子的,但是我们多想一步,这篇文章的应用场景、使用前提条件是什么?我想到的有以下几个方面:①数据量不是很大的时候;②数据结构导入数据库不是很合适、或要转换,反而显得麻烦;③使用Vlookup比较多的同学,相信明白匹配不是那么精确的,而且会返回“#N/A错误值”,另外vlookup每次返回的是一列值;④在Excel环境里面,可以很好的和表格、图表进行结合,使用数据刷新功能一劳永逸的完成了常规图表的自作。
在我想到的这几个前提环境下,相信使用这种方式会比较高效。
另外一点,这篇文章提到的这个功能点和技巧告诉大家一个信息,其实在Excel里面也是可以进行数据查询和数据库查询的(在这个功能区下还有数据库查询哦,自己去研究)。
温馨提示:据了解Excel2007及以上版本才有这个功能,2003版本的要么路过学习一下、要么去升级下自己的版本。
有如下的2张表,表1里面包含姓名、时间、培训内容字段的数据,表2包括姓名、职务、年薪字段的数据,我们可以看到2张表都有姓名字段。
表1
表2
现在想统计表2中名单上的人在表1中的培训记录。
人肉实现或者Vlookup的方式当然这个简单的Case可以实现,但是要学会举一反三,学习方然是以简单的例子给你讲解(还纠结的回到文章开头去想前提条件和你能想到能运用的场景)。
这里给大家介绍在Excel中使用简单SQL语句的方法来实现对不同表格间数据的整合和筛选。
首先,也是最重要的一部是为这两个表命名,方法是选中表格后单击右键选择“定义名称”,如下所示
单击后,出现命名对话框
这里将表1和表2分别命名为Table1和Table2。
然后选择上方的“数据”选项卡,选择“自其他来源”下的“来自Microsoft Query ”选项
在弹出的对话框中选择Excel Files*那一项,并且把对话框下面的“使用“查询向导”创建/编辑查询”勾掉,如下图所示
然后点击“确定”,便出现“选择工作簿”的对话框,这里选择包含表1和表2的工作表Sample.xlsx
点击确定后之后弹出添加表的对话框,如下图所示
这里要将Table1和Table2都添加一遍,添加完成后,查询器应当是如下图所示的样子
此时,单击图10中输入SQL语句的按钮,弹出输入SQL语句的对话框,如下图所示
上图中的代码是这样的,偷懒的同学可以直接CTRL+C/CTRL+V:
SELECT Table1.姓名, Table1.时间, Table1.培训内容, Table2.姓名
FROM Table1,Table2
WHERE Table1.姓名= Table2.姓名
其基本含义就是将表1中和表2中姓名相符的记录从表1中筛选出来。
SELECT语句是SQL 语言中最基础也是最重要的语句之一,加上WHERE语句后的限制条件,可以实现大多数的数据查询和筛选工作,其语法也不困难,稍微学习一下就会了。
输入完代码,单击确定,就可以看到筛选出来的数据表了,如下图所示
接下来的工作就是将筛选出来的数据表再返回至Excel工作表当中,选择菜单中的“文件”——“将数据返回Microsoft Excel”,如下图所示
接下来的步骤该干嘛就不罗嗦了。
至此,该教程就讲解完成了。
在Excel中使用SQL语句可以实现更灵活、准确、高效的数据筛选和匹配、汇总、计算等,文章提到的例子只是最简单的Case,大家可以去结合自己的工作场景玩出更多花样,相信会有所收获的。
SQL在EXCEL中的应用方法
iamlaosng文Excel中使用SQL的主要目的是连接或Excel工作表导入数据或者对这些数据进行统计汇总,要达到这个目的,需要好好学习SQL语句的使用;本文主要说明在Excel中如何使用SQL,至于SQL语句本身就不多作介绍了;一、简单的查询1、建立查询数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来;表现形式可以是表,也可以是数据透视表等;2、SQL查询语句如果是挑选部分列数据,就需要用SQL语句取所有数据也可以用SQL语句;建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法:Select字段列表from工作表名$--其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如:selectprov_name,city_name,xs_mc,xs_codefromSheet1$selectfromSheet1$--取所有数据偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:selectno,prov_name,city_name,xs_mc,xs_codefromSheet1$字段名中含有特殊字符的也要用中括号括起来,如/空格等Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如Select23+45--返回68Selectdate--返回当前日期3、修改查询语句方法:点击右键—弹出菜单—表格—编辑查询通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句;字段名更换:如果想换个字段名,用“as新字段名”既可,例如:selectprov_nameas省,city_nameas城市,xs_mcas县市,xs_codeas编码fromSheet1$非正常表格:数据区域含字段名不在第一行需要在工作表名称后面指定数据范围,例如:selectprov_name,city_name,xs_mc,xs_codefromSheet1$B2:G2000或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下:selectprov_name,city_name,xs_mc,xs_codefrommydata注意:使用名称时没有$符号,也没有方括号了;数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性”窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了;4、外部数据属性修改SQL语句后,如显示格式不是预想的那样,需要去掉“外部数据属性”中“保留列属性”前面的勾选;方法:点击右键—弹出菜单—表格—外部数据属性,弹出窗口如下:二、复杂的查询1、多表联合相同结构的多个表合并到一起,用union连接SQL语句,例如:Selectfrom财务部$unionallSelectfrom市场部$Union是去重复的,即相同的记录保留一个类似distinct,Unionall则是直接相加两个结果,不去重复;增加一个部门字段可以将查询结果中的区分开来,以便知道数据来自哪个表;Union的三个一致,即:字段的数量、类型和顺序;例如:Select“财务部”as部门,from财务部$unionallSelect“市场部”as部门,from市场部$多表联合查询Selectfrom部门$bm,员工$ygwherebm.部门编码=yg.部门编码跨工作簿查询如果数据不仅来自不同的工作表,还来自不同的文件,一样可以用union联合,例如:Select“分公司1”as公司,“财务部”as部门,fromF:\SQL之Excel应用\分公司1.xlsx.财务部$unionall Select“分公司1”as公司,“市场部”as部门,fromF:\SQL之Excel应用\分公司1.xlsx.市场部$unionall Select“分公司2”as公司,“财务部”as部门,fromF:\SQL之Excel应用\分公司2.xlsx.财务部$unionall Select“分公司2”as公司,“市场部”as部门,fromF:\SQL之Excel应用\分公司2.xlsx.市场部$因为SQL中已经指定了文件名和表名,所以建立连接时连接谁并不重要,这种情况下,建立连接的时候就连接自己,然后再改写SQL语句;2、子查询和多表连接所谓子查询就是将一个查询结果作为数据源放在主查询语句中,多表连接则是将两个有关联的表通过关键字段连接在一起查询,这都是SQL知识,不再赘述,需要注意的是,不同的数据库系统SQL都有些微小的差别,Excel中的SQL也有其自己的一些特点,关于多表查询的写法,见本文附录;3、常用运算符有条件的查询条件是where引导的,用and、or等连接,例如:selectprov_name,city_name,xs_mc,xs_codefromSheet1$whereprov_name=’安徽’orprov_name=’江苏’--虽然字符串可以用双引号,但建议用单引号,因为oracle、SQLserver都是用单引号;常用运算符:in、notin、between…and…、isnull、isnotnull、&连字符、like、notlike,注意:null和任何字段运算的结果都是null;通配符:%所有字符或无字符、_单个字符、区间,如1-9、a-f、1,3,5,例如:selectfromSheet1$whereEmaillike‘h-m%’--h-m开头的电子邮件selectfromSheet1$wherexs_codelike'%1,3,5'–和notlike'%1,3,5'效果相同selectfromSheet1$where户籍&’-’&工作地like'%合肥%'--中间加个“-”防止误差筛选查询结果:Distinct去重复、topn取前n条记录聚合函数:count、sum、min、max、avg 排序:orderby、分组:groupby、分组后筛选:having SQL中关键字的执行顺序:from=1where=2groupby=3having=4orderby=5select=6,因为select在最后,所以其它关键字后面不能用字段别名,不过,表的别名是可以用的,因为from排在第一;4、常用函数除了聚合函数,还有很多其他函数,这些函数有的是所有数据库系统都有的,有的是数据库系统特有的;Excel中工作表中使用的函数基本都能在SQL中使用,例如:数学:abs、int、fix、round、mod、rnd、……文本:left、right、mid、len、instr、string、replace、format、……条件:iif、switch、choose、……日期:date/now、year/month/day、weekday、dateserial、……有些函数用法和工作表中略有不同,如date可以取当前日期,但是不能合成日期,合成日期用dateserial这个函数只能在SQL中使用5、交叉查询交叉查询产生一个透视表,相当于一个矩形二维表,这是Excel特有的查询,格式如下:Transform聚合函数select行标签from数据表$groupby行标签pivot列标签,例如:Transformsum工资select部门名称from员工$groupby部门名称pivot职务这个语句产生的结果与数据透视表差不多,相当于一个语句产生一个数据透视表,当然这个透视表是固定的,和语句对应的;其中的select语句,相当于数据透视表的行字段,其中的聚合函数的参数相当于拖到数据透视表数据区域的值字段,使用的聚合函数即值字段的汇总方式;其中的pivot字段相当于数据透视表的列字段,后面的INvalue1,value2,...,相当列字段中的项的排序和筛选,摆弄过数据透视表,将transform/pivot语句与数据透视表对照,可以轻松掌握这个MSJET新增SQL语句;看一下效果:列标签筛选Transformsum工资select部门名称from员工$groupby部门名称pivot职务in‘主管’,‘经理’多个行标签Transformsum工资select职务,性别from员工$groupby职务,性别pivot部门名称如需要添加总计,则需要先构造一个子查询结果,这个结果由正常的查询和统计查询联合在一起,再以这个结果作为数据源,构成上面的二维表;例如:Transformsum工资select部门名称fromSelect部门名称,职务,工资from员工$unionallSelect部门名称,’总计’,sum工资from员工$groupby部门名称groupby部门名称pivot职务in‘主管’,‘经理,’职员’,’总计’6、文本型数字SQL查询时字段类型是由前8行数据决定的这个数字是Excel定的,如果前8行都是数值型,后面有文本型数字,则查询结果中这些数字变成为空;前8行是文本型,后面是数值型则不影响,似乎查询结果偏向文本;如果前8行中类型不一致,有数值型,也有文本型数字,可以通过在连接字符串中加入IMEX=1则后面有文本型字符也没关系,但是,如果前8行都是数值型,加了这个也不管用,因为前8行已经决定是数值型了;加IMEX位置如下:桌面\tb_city_zd.xls;Mode=ShareDenyWrite;ExtendedProperties="HDR=YES;IMEX=1";JetOLEDB:Systemdatabase=" ";JetOLEDB:RegistryPath="";JetOLEDB:EngineType=35;JetOLEDB:DatabaseLockingMode=0;JetOLEDB:GlobalP artialBulkOps=2;JetOLEDB:GlobalBulkTransactions=1;JetOLEDB:NewDatabasePassword="";JetOLEDB:Create SystemDatabase=False;JetOLEDB:EncryptDatabase=False;JetOLEDB:Don'tCopyLocaleonCompact=False;JetOL EDB:CompactWithoutReplicaRepair=False;JetOLEDB:SFP=False;JetOLEDB:SupportComplexData=False7、删除无用的数据源随着我们建立的查询越来越多,打开现有连接时会出现很多我们原来建立的连接,这些连接是Windows自动保存以便于我们再次使用的,如要删除,可进入“我的文档”下面的“我的数据源”文件夹,删除这些无用的数据源或者直接删除“我的数据源”文件夹;删除这些连接不会影响原来建立的那些查询;8、MicrosoftQuery工具可以利用MQ工具建立查询,对于不熟悉SQL语言的可以用这个调试SQL语句;MQ向导会提供可视化工具,一步一步引导我们得到所需的数据;查询生成后,可以点击“SQL”按钮进一步修改SQL语句;打开方法:数据选项卡—自其它来源—来自MicrosoftQuery工具—Excelfiles,选择文件后确定,进入工具;如果不能选择xlsx文件,是因为数据源版本驱动太低,进入控制面板--管理工具—数据源ODBC,点击配置,数据库版本选择Excel12.0版本office2007以上;如果找不到12.012.0以上版本,就删除原来的数据源Excelfiles,重新添加一个,注意要选择带有xlsx的驱动程序;office版本和版本号:office97:8.0、office2000:9.0、officeXP2002:10.0、office2003:11.0、office2007:12.0、office2010:14.0、office2013:15.0选择文件并确定后,如果提示“数据源中没有包含可见的表格”,点击确定,在随后弹出的向导窗口中点击“选项”按钮,勾选“系统表”,确定后就可以看到表了,如下图:MQ工具通过可视化工具生成所需的SQL查询语句,如添加条件、分组等等;点击“SQL”按钮查看生成的语句,可以看到文件名和表名都是用单引号括起来,和中括号效果一样;MQ工具不仅可以编写SQL查询语句,也可以写insert、delete、update等SQL 语句,例如:Insertinto员工$姓名,性别,工资values‘宋定才’,’男’,5000三、VBA中使用SQL语句1、连接数据库的工具ADOADO是个类,有三个工具:connection连接、command命令和recordset记录集使用前先引用,进入VBE,点击菜单“工具”下面的“引用”,勾选最高版本的ADO,然后就可以用new在VBA过程中创建对象了;引用窗口如下图:2、连接Access数据库连接字符串:连接数据库的关键是连接串的写法,可以参考建立查询时系统自动生成的连接串,方法是:数据选项卡—自Access,在弹出窗口选择数据文件和表后,点击属性,弹出窗口中点击定义选项卡,其中的连接字符串就是连接access的字符串,内容如下:根据上面的连接串可以写出下面的VBA代码;连接串中大部分是默认值,VBA代码中可以不写,例如,下面的代码是连接access数据库:vb1.'更新工作表数据,无返回数据2.Subado_test13.Dim cnn As ADODB.Connection4.'5.新建一个连接对象6.Set cnn=New ADODB.Connection7.'建立连接8.With cnn9..Provider=10.'当前文件的路径可以用ThisWorkbook.Path11..OpenThisWorkbook.Path&"\员工.accdb"12.EndWith13.'使用SQL语句操作数据库14.Dim sql AsString15.sql="update职工set年龄=20where姓名='张丽'"n.Executesql'17.执行SQL命令,无需返回值n.Close'19.关闭连接20.21.Set cnn=Nothing'22.释放对象23.MsgBox"操作成功"24.EndSub查询表,有返回记录,注意下面例子中定义和连接的不同写法:vb1.'查询数据库表数据2.Subado_test23.Dim cnn AsNew ADODB.Connection4.'建立连接,当前文件的路径可以用ThisWorkbook.Pathn.Open&ThisWorkbook.Path&"\员工.accdb"6.'使用SQL语句操作数据库7.Dim sqls AsString8.Dim rst AsNew ADODB.Recordset9.sqls="selectfrom职工"10.Set rst=cnn.Executesqls'11.执行SQL命令12.13.'用循环获取字段名14.Dim i AsInteger15.For i=0To16.Cells1,i+1=17.Next i18.'保存查询记录19.Range"a2".CopyFromRecordsetrst20.rst.Close'21.关闭记录集22.23.Set rst=Nothing'24.释放对象n.Close'26.关闭连接27.28.Set cnn=Nothing'29.释放对象30.MsgBox"操作成功"31.EndSub将工作表中的数据保存到数据库表中方法是更新记录集,再调用记录集update 方法,例如:vb1.'将工作表数据保存到数据库2.Subado_test33.Dim cnn As ADODB.Connection4.Dim rst As ADODB.Recordset5.Dim sqls,mytable AsString6.Dim i,j,n AsInteger7.'建立连接,当前文件的路径可以用ThisWorkbook.Path8.Set cnn=New ADODB.Connectionn.Open&ThisWorkbook.Path&"\员工.accdb"10.mytable="职工"11.n=Range"a1".End xlDown.Row '当前工作表有效行数12.'使用SQL语句操作数据库13.For i=2To n14.sqls="selectfrom"&mytable&"where编号='"&Cellsi,1.Value&"'"15.Set rst=New ADODB.Recordset16.'用记录集对象执行SQL语句17.rst.Open,cnn,adOpenKeyset,adLockOptimistic18.If rst.RecordCount=0Thenrst.AddNew'找不到,增加一条空记录19.For j=1To20.rst.Fieldsj-1=Cellsi,j.Value21.Next j22.rst.Update23.Next i24.rst.Close'25.关闭记录集26.27.Set rst=Nothing'28.释放对象n.Close'30.关闭连接31.32.Set cnn=Nothing'33.释放对象34.MsgBox"操作成功"35.EndSub3、连接Excel工作表连接Excel,注意连接串增加一个ExtendedProperties=excel12.0和SQL语句的写法:vb1.'连接Excel工作表2.Subado_test43.Dim cnn As ADODB.Connection4.Dim rst As ADODB.Recordset5.Dim sqls AsString6.'建立连接,注意连接串和SQL语句的写法7.Set cnn=New ADODB.Connection8.With cnn9..Provider=10..OpenThisWorkbook.Path&"\tb_city_zd.xls"11.EndWith12.'使用SQL语句操作数据库13.sqls="selectfromsheet1$"14.Set rst=cnn.Executesqls15.Sheets"sheet6".Range"A1".CopyFromRecordsetrst16.17.rst.Close'18.关闭记录集19.20.Set rst=Nothing'21.释放对象n.Close'23.关闭连接24.25.Set cnn=Nothing'26.释放对象27.MsgBox"操作成功"28.EndSub同时连接Excel和Access数据库,主要看连接串和SQL语句的写法:vb1.'连接Excel工作表和Access数据库2.Sub ado_test53.Dim cnn As ADODB.Connection4.Dim rst As ADODB.Recordset5.Dim sqls AsString6.'建立连接,注意连接串和SQL语句的写法7.Set cnn=New ADODB.Connection8.With cnn9..Provider=10..OpenThisWorkbook.FullName11.EndWith12.'使用SQL语句操作数据库13.sqls="selecta.部门,countfrom部门$A:Aaleftjoindatabase="&_14.ThisWorkbook.Path&"\员工.accdb.职工bona.部门=b.部门groupbya.部门"15.Set rst=cnn.Executesqls16.Sheets"部门".Range"b2".CopyFromRecordsetrst17.rst.Close'18.关闭记录集19.20.Set rst=Nothing'21.释放对象n.Close'23.关闭连接24.25.Set cnn=Nothing'26.释放对象27.MsgBox"操作成功"28.EndSub4、注意事项关于ADO控件,有两种创建方式,一种是如前述的那样,先加引用,然后在代码中就可以定义这种类型的对象,再通过New的方式建立对象;另一种方式直接创建,代码如下:DimcnnAsObject,rstAsObjectSetcnn=CreateObject"ADODB.Connection"Setrst=CreateObject"ADODB.Recordset"其实这种方法更实用,因为加引用必须是熟悉系统的人才能操作,如果将写好的程序给一般人使用,难道每次你还指导他去加引用执行SQL语句有三种方式,一种是用connection,即上面的cnn.Execute,这种方式比较适合无返回记录的语句,即DML语句;如果执行有返回记录的SQL语句,也可以取到记录,只是RecordCount总是反馈-1;这种情况下可以根据rst.eof 判断有无查询结果,如果rst.eof=true就表示查询结果为空;另一种方式是用RecordSet,即上面的rst.Open,这个适合有返回记录的语句,即select语句,因为这种方式能够返回记录数RecordCount;当然还有第三种方式,就是用command,这个比较适合执行存储过程,因为这种方式可以传递参数;三种方式command方式功能最强,用起来也最麻烦,connection最弱,用起来也最简单;取值除了前面说的CopyFromRecordset,还可以用循环的方式逐个取值,例如:vb1.For i=1torst.RecordCount2.For j=1To3.Cellsi+1,j=rst.Fieldsj-1.Value4.Next j5.rst.MoveNext6.Next iADO也可也连接其他数据库,只是连接串不同,其它操作一样,例如Oracle,连接语句如下:cnn.Open"Provider=msdaora;DataSource=dl580;UserId=username;Password=userpasswd;"其中dl580是客户端配置的连接名称,后面是Oracle用户名和密码;附录:SQL多表查询语句的写法1、嵌套查询嵌套查询是将一个SELECT语句包含在另一个SELECT语句的WHERE子句中,也称为子查询;子查询内层查询的结果用作建立其父查询外层查询的条件,因此,子查询的结果必须有确定的值;利用嵌套查询可以将几个简单查询组成一个复杂查询,从而增强SQL的查询能力;1、查询“张三”选修的课程和成绩select学号,课程,成绩from课程$where学号=select学号from学生$where姓名="张三"2、查询“张三”选修的语文课和成绩select学号,课程,成绩from课程$where学号=select学号from学生$where姓名="张三"and课程="语文"3、查询所有考试学生的成绩selectFROM课程$where成绩notinselectdistinct学号from学生$2、合并查询合并查询想必大家都知道了,数据透视表多表查询,一般都使用的是合并查询,它合并的是两个或两个以上查询的结果;参加合并查询的列数要相同,对应列的数据类型必须兼容,各语句中对应的结果集列出现的顺序必须相同;与连接查询相比,联合查询增加记录的行数,连接查询则是增加记录的列数;联合查询语句如下:selectfromunionall其中ALL选项保留结果集中的重复记录,默认时系统自动删除记录;如,依据学号查询语文和物理成绩:select学号,成绩,课程from课程$where课程="语文"union select学号,成绩,课程from课程$where课程="物理"3、多表查询多表查询亦称连接查询,它同时涉及两个或两个以上的公共字段或语义相同的字段,也就是说数据表是通过表的列字段来体现的;是数据透视表中最重要的的一种查询;连接操作的目的就是通过加在连接字段的条件将多个表连接在一起,以便在多个表中查询数据;多表查询,需要有相同的两个表的联接条件,该条件放在WHERE子句中,格式为:select<目标列>from<表明1>,<表名2>where<表名1>.<字段名1>=<表名2>.<字段名2>1、依据学号条件查询学生的各门成绩:selectfrom学生$,课程$where学生$.学号=课程$.学号为了简化输入,在SELECT命令中允许使用表的别名;为此,可以在FROM子句中定义一个临时别名,以便查询使用;其格式如下:SELECT<目标列>FROM<表名1><别名1>,<表名2><别名2>WHERE<别名1><字段名1>=<别名2>.<字段名2>2、依据学号条件查询学生的各门成绩大于85分selectkc.学号,姓名,课程,成绩from学生$xs,课程$kcwherexs.学号=kc.学号and成绩>85在数据透视表中对多表查询,还可以使用另一种连接格式,就是内连接查询,也叫等值连接查询;它是组合两个或多个以上表,最常使用的方法;其语句如下:SELECT<目标列>FROM<表名1>innerjoin<表名2>on<表名1>.<字段名1>=<表名2>.<字段名2>3、依据学号条件查询学生的各门成绩大于85分selectkc.学号,姓名,课程,成绩from学生$xsinnerjoin课程$kconxs.学号=kc.学号4、外连接查询在内连接查询中,只有在两表中同时匹配的行才才能在结果集中选出,而在外连接中可以只限制一个表,而不限制另一个表,其所有的行都都出现在结果集中;外连接分为左外连接,右外连接和全部链接;左连接是对连接条件中左边的表不加限制;右连接是对右边的表不加限制;全部连接是对两个表都不加限制;其语法如下:select<选择列数>from<表名1><lift︳right︳fullouter>jion<表名2>on<表名1>.<列名>=<表名2>.<列名> 1、以学生$中记录为准,课程$中不存在的学号也可以列出:selectkc.学号,姓名,课程,成绩from学生$xsleftjoin课程$kconxs.学号=kc.学号2、以课程$中记录为准,学生$中不存在的学号也可以列出:selectkc.学号,姓名,课程,成绩from学生$xsrightjoin课程$kconxs.学号=kc.学号。
excel连数sql语句
excel连数sql语句
在Excel中使用SQL语句可以帮助你对数据进行更复杂的分析和处理。
要在Excel中使用SQL语句,你需要使用Excel的数据功能和Microsoft Query来实现。
以下是一个简单的示例来说明如何在Excel中使用SQL语句:
首先,确保你的数据已经准备好,然后按照以下步骤操作:
1. 打开Excel并导入你的数据表格。
2. 在Excel菜单中选择“数据”选项卡,然后点击“来自其他来源”>“从SQL Server”(或者选择适合你的数据库类型)。
3. 输入数据库服务器的名称和登录信息,然后选择你要查询的数据库。
4. 在“查询向导”中,选择“使用 SQL 向导”。
5. 在“SQL 向导”中,输入你的 SQL 查询语句。
例如,如果你想要从表格中选择所有的数据,你可以输入,SELECT FROM [表
格名]。
6. 点击“完成”并选择将数据放在新的工作表中或者现有的位置。
通过以上步骤,你就可以在Excel中使用SQL语句来查询和分
析数据了。
需要注意的是,SQL语句在Excel中的使用有一些限制,不支持所有的SQL功能,但是可以满足大部分基本的查询需求。
另外,你也可以在Excel中使用宏来执行SQL查询,这样可以
更灵活地控制数据的处理和分析过程。
通过编写VBA宏代码,你可
以实现更复杂的数据处理和分析功能。
总之,通过在Excel中使用SQL语句,你可以更灵活地处理和
分析数据,实现更复杂的查询和计算功能。
希望这些信息能够帮助
你更好地使用Excel进行数据处理和分析。
excel 里sql语句用法 -回复
excel 里sql语句用法-回复标题:Excel中SQL语句的用法及步骤解析导言:在Excel中,我们可以使用SQL(Structured Query Language)语句来访问和处理数据。
SQL语句可以帮助我们以一种更灵活、高效的方式从数据源中提取、过滤和操作数据。
本文将详细介绍Excel中SQL语句的用法,并逐步解析其实现方式,以帮助读者更好地利用SQL语句处理Excel数据。
第一部分:SQL语句简介及Excel中的使用1. SQL语句简介:SQL是一种通用且广泛应用的查询语言,用于管理和操作关系型数据库。
它是一种基于结构化的查询语言,可以实现对数据的增删改查等操作。
在Excel中,我们可以使用SQL查询数据并进行数据分析。
2. Excel中使用SQL语句:从Excel 2013版本开始,Excel内置了"Power Query"和"Power Pivot"两个功能,其中包含了SQL语句的使用。
Power Query允许用户从不同来源导入数据,Power Pivot提供了一种数据建模工具,可以通过SQL语句进行数据操作。
在Excel中使用SQL语句,主要有以下几个步骤:a) 导入数据源:在Excel中,选择"数据"选项卡,点击"获取外部数据",选择适当的数据源,并设置相关参数,如数据库连接字符串、用户名和密码等。
b) 进入Power Query编辑器:在"数据"选项卡中,点击"从其他数据源",选择"从数据库"。
在弹出的"从数据库"对话框中,选择适当的数据库类型,并输入连接信息,点击"确定"。
c) 编写SQL查询语句:在Power Query编辑器中,点击"编辑"按钮,进入查询编辑界面。
在"转换"选项卡中,点击"高级编辑",即可输入SQL 查询语句。
Excel工作表之SQL查询方法
Excel工作表之SQL查询方法近期在单位上做业务数据分析,发现还是Excel用的直接,筛选、求和、分类等等也是不亦乐乎,但是发现一些函数的效率与SQL还是有着较大差距,甚至是天壤之别,故作文一篇,提供Excel中的SQL 查询使用方式。
查询的工作表可以是当前工作簿中的,也可以是其他工作簿中的。
例如,图1所示的“网站数据.xlsx”工作簿中,Sheet1表格存储的是网站访问信息统计,现在需要从Sheet1中获取浏览次数大于500的城市。
图1 Sheet1中存储的访问数据可以在当前工作簿的其他表格中运行SQL查询,也可以新建一个工作簿,在本示例中选择当前工作簿的Sheet2表格,然后单击“获取外部数据”模块的“现有连接”按钮,在打开的“现有连接”对话框中单击“浏览更多”按钮,在打开的“选取数据源”对话框中定位到存储源数据的Excel工作簿文件─网站数据.xlsx,如图2所示。
图2 定位存储源数据的工作簿文件单击“打开”按钮,打开如图3所示的“选择表格”对话框,勾选“数据首行包含列标题”复选框,选择Sheet1工作表。
单击“确定”按钮,将打开如图4所示的“导入数据”对话框,在“请选择该数据在工作簿中的显示方式”选项中选择“表”,“数据的放置位置”选择“现有工作表”并指定位置为A1单元格。
图3 “选择表格”对话框图4 “导入数据”对话框单击“属性”按钮将打开如图5所示的“连接属性”对话框,在“命令类型”下拉列表中选择“SQL”,在命令文本中输入SQL查询语句“SELECT * FROM [Sheet1$] WHERE 浏览次数>500”,其中“Sheet1”即指定的Sheet1工作表,当在SQL中引用Excel工作表时,需要在名称后面加上“$”符并将其包含在方括号内,“*”表示取出工作表中的全部字段,WHERE子句用于指定筛选条件,即浏览次数大于500。
图5 “连接属性”对话框单击“确定”按钮返回到“导入数据”对话框,再次单击“确定”按钮即可看到查询结果,如图6所示。
excel中使用sql语句
excel中使用sql语句在 Excel 中,您可以使用 SQL 语句来查询和分析数据。
Excel 支持使用 SQL 语句对数据进行筛选、排序和聚合操作。
下面是一些常用的 SQL 语句在 Excel 中的应用示例:1. 查询表格中的数据:```.SELECT * FROM [Sheet1$]```.这个语句会查询名为 "Sheet1" 的工作表中的全部数据。
2. 条件筛选:```.SELECT * FROM [Sheet1$] WHERE 列名 = 值。
```.这个语句会查询满足条件的行,其中 "列名" 是要筛选的列名,"值" 是要匹配的值。
3. 排序:```.SELECT * FROM [Sheet1$] ORDER BY 列名 ASC/DESC.```.这个语句会按照指定列的升序(ASC)或降序(DESC)对数据进行排序。
4. 聚合操作:```.SELECT 列名, 聚合函数(列名) FROM [Sheet1$] GROUP BY 列名。
```.这个语句会对指定列进行分组,并应用聚合函数(如SUM、COUNT、AVG、MAX、MIN 等)进行统计计算。
请注意,上述示例中的 "[Sheet1$]" 是指查询的目标工作表名,您可以根据需要修改为您实际的工作表名。
要在 Excel 中使用 SQL 语句,您需要打开 Excel 内建的 "数据" 标签,然后选择 "从其他数据源" 或 "从文本",根据您的数据来源选择合适的选项,进入查询编辑器。
在编辑器中,您可以输入上述 SQL 语句并执行查询,然后将结果显示在 Excel 中,或将查询结果导入到新的工作表或数据透视表中。
希望以上信息对您有帮助!如果您有进一步的问题,请随时提问。
excel sql查询
SQL查询语句引用各种数据表有以下几种方法:
1、通过名称引用。
如果定义一个数据区域为Industry,那么select *from industry,这种方法最多支持65535行数据,当数据行数过多时,Excel会提示找不到该数据表。
同一张工作表里可以有多个数据表,通过定义不同的名称去引用。
2、通过工作表名引用。
比如一个工作表名为Quotes,那么select *from `Quotes$`,这里工作表名后面的$号表示这是一个工作表。
工作表可以包含高达100万行数据。
但同一个工作表内只能有一个数据表。
3、可以通过数据表的地址进行引用。
比如select * from `Quotes$A1:B10000`。
引号可以用中括号代替,select * from [Quotes$A1:B10000]。
4、如果数据表不在目前工作的文件内,需要在数据表名前添加数据文件的路径和文件名,比如select * from `D:test.xlsx`.`Quotes$`
当工作表的列数不同时的处理:
select 部门名称,科目,一季度,二季度, 0 as 三季度from [A$] union all select 部门名称,科目,0 as 一季度, 0 as 二季度, 三季度from [B$] union all select 部门名称,科目,一季度,二季度, 三季度from [C$]
以上案例使用0代替缺少的列字段
A工作表B工作表C工作表。
excel中sql应用实例
excel中sql应用实例Excel中SQL应用实例近年来,随着数据分析和处理的重要性日益增加,Excel作为一种常用的数据处理工具,不断地给我们带来惊喜。
其中,Excel中SQL的应用越来越受到关注。
本文将以“Excel中SQL应用实例”为主题,逐步介绍Excel 中SQL的使用方法及应用场景。
1. 什么是SQLSQL(Structured Query Language)是一种用于管理和操作关系数据库的计算机语言。
它可以实现对数据库的查询、插入、更新和删除等操作。
在Excel中通过SQL可以直接对数据进行操作,而不需要通过复杂的公式或手动操作来实现。
2. 准备工作首先,我们需要准备一个包含数据的Excel文件。
该文件应包含一个表格,其中包含需要操作的数据。
在Excel中,我们可以将每一列看作是表的一个字段,每一行看作是一个记录。
3. 数据的导入在Excel中,我们可以使用“数据”选项卡中的“来自其他来源”按钮将数据导入至Excel。
选择“来自SQL Server”选项,然后按照提示进行操作。
4. 使用SQL进行查询在Excel中使用SQL进行查询的方法很简单。
先选中一个空的单元格,然后在“数据”选项卡中的“来自其他来源”按钮下选择“来自SQL Server”。
在弹出的对话框中,选择“刷新数据”按钮。
在“连接属性”对话框中,填入数据库的相关信息,如服务器名称、用户名和密码等。
点击确定后,将打开一个查询编辑器。
在查询编辑器中,可以输入SQL语句进行查询。
例如,如果我们要查询某个字段的最大值,可以输入类似于“SELECT MAX(字段名) FROM 表名”的SQL语句。
点击执行按钮后,查询结果将显示在Excel中。
5. 使用SQL进行筛选和排序在查询编辑器中,我们可以使用WHERE语句对数据进行筛选。
例如,如果我们要过滤出满足某个条件的记录,可以使用类似于“SELECT * FROM 表名WHERE 字段名= 条件”的SQL语句。
excel sql常用查询语句一勺汇
excel sql常用查询语句一勺汇
在Excel中,我们经常需要使用SQL语句来查询数据,以便更好地分析和处理数据。
下面列举了一些常用的Excel SQL查询语句,供参考:
1. 查询数据表中所有的记录:
SELECT * FROM 表名;
2. 查询数据表中指定列的数据:
SELECT 列1, 列2, 列3 FROM 表名;
3. 查询数据表中满足指定条件的记录:
SELECT * FROM 表名 WHERE 条件;
4. 查询数据表中去重后的记录:
SELECT DISTINCT 列1, 列2 FROM 表名;
5. 查询数据表中按指定列排序后的记录:
SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;
6. 查询数据表中指定列的汇总数据:
SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1;
7. 查询数据表中前n条记录:
SELECT TOP n * FROM 表名;
8. 查询数据表中两个表的交集:
SELECT * FROM 表名1 INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名;
9. 查询数据表中两个表的并集:
SELECT * FROM 表名1 UNION SELECT * FROM 表名2;
10. 查询数据表中两个表的差集:
SELECT * FROM 表名1 EXCEPT SELECT * FROM 表名2;
以上是一些常用的Excel SQL查询语句,通过灵活运用这些语句,我们可以更好地查询和分析数据,提高工作效率和数据处理的准确性。
希望以上内容对您有所帮助。
excel 里sql语句用法 -回复
excel 里sql语句用法-回复Excel是一款功能强大的电子表格软件,可以对数据进行各种操作和分析。
它提供了一种称为“查询”的功能,可以使用SQL(Structured Query Language,结构化查询语言)语句来查询和操作数据。
在本文中,我们将详细介绍Excel中使用SQL语句的用法,以帮助读者更好地理解和运用这一功能。
第一步:概述SQL语句及其在Excel中的应用SQL是一种用于管理和处理关系型数据库的语言。
它具有灵活、可扩展和可移植的特性,已经成为许多数据库管理系统的标准查询语言。
在Excel 中,我们可以使用SQL语句来查询数据库中的数据、筛选、排序、计算、汇总等。
第二步:如何在Excel中启用SQL查询功能在Excel中,要使用SQL语句,首先需要在选项中启用“Microsoft Query”插件。
打开Excel,点击顶部菜单栏的“文件”,选择“选项”,在“高级”选项卡下找到“开发人员”部分,勾选“Microsoft Query”,然后点击“确定”以保存设置。
这样,我们就可以在Excel中使用SQL语句进行查询了。
第三步:如何构建SQL查询语句在Excel中,可以通过选择数据源并构建SQL查询语句来实现数据查询功能。
首先,在Excel中打开一个空白工作表,点击顶部菜单栏的“数据”,然后选择“来自其他源”,接着选择“从Microsoft Query”选项。
在“选择数据源”对话框中,选择您要查询的数据源,可以是Excel文件、外部数据库或者其他支持的数据源类型。
在选择数据源后,将会显示“查询窗口”,其中可以构建SQL查询语句。
可以直接输入SQL语句,也可以使用可视化工具来辅助构建。
对于初学者,可以使用可视化工具来轻松构建SQL查询语句。
第四步:SQL查询语句的语法规则SQL查询语句由一系列的关键字和表达式组成,用于指定所需的操作和条件。
以下是一些常见的SQL查询语句及其用法:1. SELECT语句:用于从表中选择所需的列。
Excel中使用SQL查询语句,让你的数据分析如虎添翼
Excel中使⽤SQL查询语句,让你的数据分析如虎添翼作者:Excel⾼⼿。
在我们进⾏数据处理的过程中,我们常常会调⽤⼀些外部数据,此时使⽤SQL查询语句是⾮常⽅便的,今天我们就来给⼤家详细讲解⼀下SQL查询语句中⽤得最多的SELECT语句的⼀些基本⽤法。
1.SELECT 语法SELECT [ALL|DISTINCT|DISTINCTROW|TOP]{|talbe.|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}FROM table_source[ WHERE search_condition ][ GROUP BY group_by_expression ][ HAVING search_condition ][ ORDER BY order_expression [ ASC | DESC ] ][LIMIT [offset,] rows | rows OFFSET offset]DISTINCT 去除重复值DISTINCTROW忽略基于整个重复记录的数据,⽽不仅仅是重复字段。
执⾏步骤:1.先从from字句⼀个表或多个表创建⼯作表2.将where条件应⽤于1)的⼯作表,保留满⾜条件的⾏3.GroupBy 将2)的结果分成多个组4.Having 将条件应⽤于3)组合的条件过滤,只保留符合要求的组。
5.Order By对结果进⾏排序。
6. LIMIT限制查询的条数2.FROM⼦句FROM⼦句是SELECT语句中必须要有的⼀部分,它指定了查询所需要的数据源的名称。
语法:FROM table_source。
参数解释:table_source可以是表、视图等等,⼀个语句中最多可以使⽤256个表源。
如果使⽤的表过多,查询性能是会受到影响的,所以不建议使⽤太多表源。
请看下⾯的⽰例:Select distinct 供货商信息.单位名称,供货商信息.地址 from 供货商信息3.WHERE⼦句在查询数据的时候,我们常常是希望查询出满⾜⼀定条件的数据,⽽⾮数据表中的所有数据,这个时候我们就可以使⽤WHERE⼦句来实现。
