例:现有两个表
一个名为“考试成绩”,记录的是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 '[%][%]'