CSDN博客

img sofoo

Access 2000使用心得(4)-深入理解查询

发表于2004/10/14 9:41:00  1034人阅读

分类: Database

一、深入理解查询

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 pidCount, Format([posttime],"yyyy/mm/dd") AS 表达式
1 FROM tblbbsPost GROUP BY Format([posttime],"yyyy/mm/dd");
参数查询:
SELECT Count(tblbbsPost.pid) AS pidCount, 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");

阅读全文
0 0

相关文章推荐

img
取 消
img