日记大全

日记大全 > 句子大全

EXCEL通过vba连接数据库(使用SQL语句多表精确查询和模糊查询)

句子大全 2023-06-09 04:37:01
相关推荐

例:现有两个表

一个名为“考试成绩”,记录的是19年的期末考试成绩

一个名为“18年考试成绩”,记录的是18年期末考试成绩

两个表除了分数不一样,其它是一样的。

表格格式如下:

现在要显示这两个表所有人员18年和19年的期末成绩中的“语文”和“数学"成绩,语法如下:

select 考试成绩.姓名 as 姓名,考试成绩.语文 as 19年语文成绩,[18年考试成绩.语文] as 18年语文成绩,考试成绩.数学 as 19年数学成绩,[18年考试成绩.数学] as 18年数学成绩 from 考试成绩,18年考试成绩 where [考试成绩.学号]=[18年考试成绩.学号]

结果:

需要注意:

一、要把两个表连接,把同一个人的相关字段显示在同一行,应该有一个共同的不重复的字段作为条件字段,比如学号,身份证号,手机号等等,

二、字段名最好用中括号[]括起来,不然有些字段名会出错,至少我在ACCESS数据库就出现这样的问题。

三、如果不指定要显示的字段将会把两个表所有列都显示,两个表左右并列显示。完全一样的字段也会重复显示。

四、如果不指定别名,将会使用“数据表名.列名”作为字段名

比如本例一个名字18年考试成绩的数据表,要取其中语文字段,如果不使用[]号括起来,写成 18年考试成绩.语文 将会出现问题,SQL全语句如下:

select 考试成绩.姓名 as 姓名,考试成绩.语文 as 19年语文成绩,18年考试成绩.语文 as 18年语文成绩,考试成绩.数学 as 19年数学成绩,[18年考试成绩.数学] as 18年数学成绩 from 考试成绩,18年考试成绩 where [考试成绩.学号]=[18年考试成绩.学号]

执行时提示:

select 考试成绩.姓名 as 姓名,考试成绩.语文 as 19年语文成绩,"18年考试成绩.语文" as 18年语文成绩,考试成绩.数学 as 19年数学成绩,[18年考试成绩.数学] as 18年数学成绩 from 考试成绩,18年考试成绩 where [考试成绩.学号]=[18年考试成绩.学号]

如果用单引号把 ’18年考试成绩.语文‘括起来,那么这个括起来的字段名将会作为一个字符串填充到该列所有字段,查询结果如下图所示:

其中[18年考试成绩.学号],也可以写成[18年考试成绩].[学号]。

另外在实际测试中发现如果字段名里有()的话也是要使用[]括起来的,比如有一个字段为’数量(件)‘,写SQL语句时要写成[数量(件)],不然也会出错。所以为了防止出错,可以把所有的字段都使用中括号括起来,强调一下这里的测试环境是ACCESS2007,不保证所有数据库都是一样。

后面的别名 as 18年数学成绩 也可以用中括号括起来,但不要用引号,如果使用单引号"括起来,如写成as "18年数学成绩",那么字段名会变成18年数学成绩",后面多一个单个号,前面没有,如果用双引号括起来,则连双引号一起显示为字段名。

如果要显示两个表中指定人员的指定字段信息则可以使用and增加一个条件,比如要在两个表中查询姓名为"陈爱銮"的人员的两个年度的语文和数学成绩。

select 考试成绩.姓名 as 姓名,考试成绩.语文 as 19年语文成绩,[18年考试成绩.语文] as 18年语文成绩,考试成绩.数学 as 19年数学成绩,[18年考试成绩.数学] as 18年数学成绩 from 考试成绩,18年考试成绩 where [考试成绩.学号]=[18年考试成绩.学号] and [考试成绩.姓名]="陈爱銮"

执行查询结果如下:

另外如果需要模糊查询就可以使用like运算符,

select 考试成绩.姓名 as 姓名,考试成绩.语文 as 19年语文成绩,[18年考试成绩.语文] as 18年语文成绩,考试成绩.数学 as 19年数学成绩,[18年考试成绩.数学] as 18年数学成绩 from 考试成绩,18年考试成绩 where [考试成绩.学号]=[18年考试成绩.学号] and [考试成绩.姓名] like "[唐曾陈]%"

查询结果如下:

其中like运算符后面用单引号括起来,‘[唐曾陈]%’,意思是以唐曾陈三个字任意一个开头,后面%意思是接任意数量的任意字符。

"[!唐黎陈]_",意思开头不是“唐黎陈”三个字符中的任何一个字符,而且一个中括号[]代表一个字符,后面接一个下横线(_),代表后面还有一个任意字符,一共是两个字符并且前面的字符是不包含中括号[]里面所列的字符的其它任意字符。

下面是LKIE运算符说明:

在中括号 ([ ]) 中,可以用由一个或多个字符 (字符列表) 组成的组与字符中的任一字符进行匹配,这个组几乎包括任何一个字符代码以及数字。

注意 为了与左括号 ([)、下横线(_)或问号 (?)、数字符号 (#) 、百分号(%)或星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。

如果要查询的字符里包含上面特殊字段,除了右中括号(]),其它的特殊字符应该放在中括号里括起来。一个中括号只代表一个中括号里的字符,如果要查询两个同样的字符应该使用两次中括号括起来。比如要查两个百分号(%%),可以写成 like "[%][%]"

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新