一、深入理解查询

a)         子查询:源于一个查询而不是表的查询

b)        使用查询设计窗口
准则:同一行上几个字段的准则组成为“AND”关系,不同行间为“OR”关系。(先同行,再下一行)
“别名:字段名”格式可以为一个字段指定显示别名
其他查询:选择查询(从一个或多个表中提取数据)
交叉表查询,操作查询(用查询结果创建新表等),
参数查询:在准则中输入“[提示信息]”,则会提示输入参数内容作为该字段准则
查询à生成表查询:可以用查询结果生成新表

c)        查询优化:从左到右,从上到下的准则
初始查询不要包括备注OLE对象等大字段

d)        查询操作符

                         i.              算术运算 +,-,*,/,Mod,^,/(整除),&,Between,In,Like…
(算术,赋值,比较,逻辑,连接,标识符,其他)

                       ii.              文字比较

                      iii.              标识符:如字段名,命名常量:Ture,Flase,No,Yes,Null…

                     iv.              函数
VBA定义了150多个函数
日期和时间函数,文本操作函数,数据类型和转换,数学和三角,金融,常规目的函数(用于创建查询,窗体,报表等),其他(Windows应用DDE,汇总SQL求和等)
使用立即窗口调试

                       v.              例子:
Forms!PersonalActionsàPersonalActions窗体
Customers!CompanynameàCustomers表的Companyname字段
Is Null,Is Not Null, Like “sof*”, like “sof??”, In(“ Shanghai ”,” Beijing ”,” Chengdu ”)
Between 1 and 5

Chr(13)à回车(CR) chr(10)à换行(LF)
日期/时间格式用“#”包围:#10:30:29#,#1-jan-80#...
标识符中有空格等标点,用[]括起来:[Order Details]!Quantity

e)         多表查询和交叉表查询

                         i.              首先确认哪些/哪个字段具有相同值,可以建立相关关系
一般为主键和外键指定相同得名称,这样设计确立连接时更容易

                       ii.              连接
等值连接(内连接):显示某表中的查询记录和另一表中相应记录(Where field1=filed2)【用得最多】{Inner Join}
外连接:(左)可显示参与查询的表的所有记录,不管连接表中是否有相应记录,(右):显示多方表中所有记录,不管主表中是否有相应记录。可用于数据库维护(Left join/right join)
在设计器中双击两张表的连接线设定连接属性(会出现相应的箭头){1等值,2左连,3右连}
自连接:在单个表内结合数据
Theta连接:采用比较操作符

                      iii.              查询属性à工具栏上查询窗口,比如可设定查询唯一值(去掉多余行)等。。

                     iv.              查阅向导/添加子数据表/添加子查询

                       v.              在查询中更新数据
一般查询记录的Recordset对象为不可更新的Dynaset
不可更新的情况:
查询属性“唯一值”(dinstinct)为“是”
使用了自连接
使用了总计函数(SUM()),在交叉表查询中使用了SQL总计函数
在一多关系中一方表没有唯一(无重复)索引的主键

                     vi.              Eg:
按日统计发文数:
SELECT Count(tblbbsPost.pid) AS pid之Count, Format([posttime],"yyyy/mm/dd") AS 表达式1 FROM tblbbsPost GROUP BY Format([posttime],"yyyy/mm/dd");
参数查询:
SELECT Count(tblbbsPost.pid) AS pid之Count, Format([posttime],"yyyy/mm/dd") AS 表达式1 FROM tblbbsPost WHERE (((Format([posttime],"yyyy/mm/dd"))=[输入您要查询哪天的发文数(yyyy-mm-dd):])) GROUP BY Format([posttime],"yyyy/mm/dd");