- 浏览: 786495 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句
一、 简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,email
FROM testtable
WHERE name='张三'
(一) 选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列
例如,下面语句显示testtable表中所有列的数据: SELECT *
FROM testtable
2、选择部分列并指定它们的显示次序
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如: SELECT nickname,email
FROM testtable
3、更改列标题
在选择列表中,可重新指定列标题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: SELECT 昵称=nickname,电子邮件=email
FROM testtable
4、删除重复行
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如: SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,
’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2
where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join
c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时
间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表
名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字
段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(
类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排
名,等等.)
select a,b,c from tablename ta where a=(select max(a) from
tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除
所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except
(select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from
tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便
地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0
end),sum(case vender when 'C' then pcs else 0 end),sum(case
vender when 'B' then pcs else 0 end) FROM tablename group by
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id
asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们
可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见
的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500
就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查
其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码
。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。
虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个
小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候
不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录
的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " &
objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代
码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内
容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次
取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储
三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR
ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),
你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这
一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这
里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &
" AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有
Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left
join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)
+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)
+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法
的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在
该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变
量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][,
Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语
句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可
知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于
告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定
该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开
始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的
事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,
事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并
恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间
的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对
象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生
,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
以下是MS SQL
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack',
'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2
type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old
definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改
变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col
….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ --
-like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去
表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即
UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自
TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所
有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT
ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有
重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时
(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所
有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN
b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的
所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录
。
其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from a;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from a in ‘具体数据库’
where 条件
例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"'
where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者:
select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select
max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON
a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not
between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,
’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2
where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join
c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时
间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表
名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字
段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(
类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排
名,等等.)
select a,b,c from tablename ta where a=(select max(a) from
tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除
所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except
(select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from
tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便
地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0
end),sum(case vender when 'C' then pcs else 0 end),sum(case
vender when 'B' then pcs else 0 end) FROM tablename group by
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id
asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们
可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见
的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500
就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查
其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码
。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。
虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个
小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候
不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录
的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " &
objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代
码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内
容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次
取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储
三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR
ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),
你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这
一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这
里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &
" AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有
Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left
join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)
+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)
+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法
的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在
该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变
量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][,
Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语
句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可
知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于
告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定
该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开
始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的
事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,
事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并
恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间
的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对
象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生
,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
Access基本操作
Access基本操作
一、数据库的基本概念和设计方法
所谓数据库实际上是关于某一特定主题或目标的信息集合。它把大量数据按一定的结构进行存储,集中管理和统一使用这些数据,实现数据共享。在Access中,数据库不仅包含用于存放加工过的信息的表,还包含以表中所存放的信息为操作对象的查询、窗体、报表、页等数据库对象。
一般地,数据库的设计应遵循以下几个步骤:
1、确定创建数据库所要完成的目的。
2、确定创建数据库中所需要的表。
3、确定表中所需要的字段。
4、明确有唯一值的主关键字段。
5、确定表之间的关系。
6、优化设计。
7、输入数据并创建其他数据库对象。
二、创建数据库
在Access中既可以使用人工的方法按照自己的要求来建立数据库,也可以使用软件为用户提供的各种数据库向导,前者更为自由而后者则显然要方便一些。
A、自行创建数据库
使用人工的方法按照自己的要求来建立数据库,首先应创建一个空数据库,然后再将对象加入到数据库中。创建空数据库的步骤为:
1、在启动Access后的Microsoft Access对话框中选择“空Access数据库”选项。
2、在弹出的“文件新建数据库”对话框中选择数据库存放的位置、输入数据库的名称并单击“创建”按钮,进入Access数据库窗口,即完成了空数据库的创建。
B、使用数据库向导创建数据库
Access为用户提供了多种数据库向导,使用数据库向导可以方便地完成数据库的创建工作。具体步骤如下:
1、在启动Access后的Microsoft Access对话框中选择“Access数据库向导、数据页和项目”选项。
2、在弹出“新建”对话框后单击“数据库”选项卡,选择一种数据库。
3、在弹出的“文件新建数据库”对话框中,选择数据库存放的位置,输入数据库的名称并单击“创建”按钮。
4、依次在数据库向导窗口中为数据库中的各个表选择字段、选择显示样式、确定打印报表所用的样式、输入所建数据库的标题、确定是否在所有报表上加一幅图片,最后启动该数据库,至此就完成了使用向导创建数据库的工作。
三、表的基本概念
表是数据库中存储数据的最基本的对象,常称为“基础表”,是构成数据库的一个重要组成部分。表由若干记录组成,每一行称为一个记录,对应着一个真实的对象;每一列称为一个字段,对应着对象的一个属性信息。每个表的关键字(关键字可以为一个字段或多个字段)使表中的记录唯一。在表内还可以定义索引,当表内存放大量数据时可以加速数据的查找。
Access中的所有数据都存放在数据表中。表是一个数据库系统的基础,只有建立表后,才可以建立查询、窗体和报表等其他项目,逐步完善数据库。
四、创建表
Access提供了三种创建新表的方法:
1、使用数据库向导,在一个操作中创建整个数据库所需的全部表、窗体及报表。
2、使用表向导来选择表的字段,这些字段可以从其他已定义好的表中选择。
3、使用设计视图创建表。
不管使用哪一种方法来创建表,随时都可以使用表设计试图来进一步自定义表。由于第一种方法已包含在使用数据库向导创建数据库的内容之中,这里着重说明后两种方法的实现。
A、利用表向导创建表
利用表向导创建新表,一般情况下能满足数据库开发者的要求,至于多余的字段可以用其他的方法将其删除。利用表向导创建表的步骤如下:
1、在数据库窗口中,单击“对象”列表中的“表”,双击“使用向导创建表”。
2、在弹出的“表向导”对话框中单击“表向导”并单击“确定”按钮。
3、在弹出的对话框中选择要使用的表并添加所需要的字段(可以重命名)后单击“下一步”按钮。
4、为表指定名称并确认主键,单击“下一步”按钮。
5、选择创建完表后的动作,然后单击“完成”按钮。
B、利用设计视图创建表
使用设计器建立表的方法有两种:一种方法是直接使用设计器来创建新表,另一种方法是使用表向导来构造一个结构相近的表,然后在设计器中打开修改。下面介绍使用设计器来创建新表的步骤:
1、在数据库窗口中,单击对象列表中的“表”,双击“使用设计器创建表”的按钮,进入“新建表”对话框。
2、在各栏中输入字段名称、选择数据类型,然后设置字段属性。
3、接着选中要设置为关键字的字段,单击“编辑”菜单中“主键”命令,设置“主关键字”,此时在所选字段左边行选定器上出现钥匙标记。
4、保存所设计的表。
五、关于主关键字与建立表间关系
A、设置主关键字
为了提高Access在查询、窗体和报表操作中的快速查找能力和组合保存在各个不同表中信息的性能,必须为建立的表指定一个主关键字。主关键字可以包含一个或多个字段,以保证每条记录都有唯一的值。设定主关键字的目的就在于保证表中的所有记录都能够被唯一识别。如果表中没有可以用作唯一识别表中记录的字段,则可以使用多个字段来组合成主关键字。其设置步骤如下:
1、在表设计器中,单击字段名称左边的字段选择按钮,选择要作为主关键字的字段。单击字段选择按钮的同时按住Ctrl键可以同时选择多个字段。
2、单击“编辑”菜单中的“主键”命令,则在该字段的左边显示钥匙标记。
B、建立表间关系
在表中定义主关键字除了可以保证每条记录可以被唯一识别外,更重要的作用在于多个表间的连接。当数据库中包含多个表时,需要通过主关键字的连接来建立表间的关系,使各表协同工作。
要在两个表间建立关系,必须在这两个表中拥有相同数据类型的字段。其设置步骤如下:
1、打开表所在的数据库窗口。
2、单击“工具”菜单中的“关系”命令,弹出“显示表”对话框。
3、选择要建立关系的表,然后单击“添加”按钮,依次添加完所需要的表后,单击“关闭”按钮。
4、在关系对话框中选择其中一表中的主关键字,拖曳到另一表中相同的主关键字,释放鼠表键后,弹出“编辑关系”对话框。
5、若在“编辑关系”对话框中选中“实施参照完整性”和“级联更新相关字段”复选框,则使在更新主表中记录的同时更新关系表中的相关记录。
6、若在“编辑关系”对话框中选中“实施参照完整性”和“级联删除相关字段”复选框,则使在删除主表中记录的同时删除关系表中的相关记录。
7、接着单击“联接类型”按钮,弹出“联接属性”对话框,在此选择联接的方式。
8、在“编辑关系”对话框中单击“创建”按钮,即在创建关系的表之间有一条线将其连接起来,表示已创建好表之间的关系。
9、关闭关系对话框,按需要选择是否保存关系的设定。
编辑或修改关联性的操作是直接用鼠标在这一条线上双击,然后在弹出的“编辑关系”对话框中进行修改。删除关联性的操作是先用鼠标在这一条线上单击,然后再按Delete键删除。
六、记录的基本操作
Access只允许每次操作一个记录,正在操作的记录在行选定器上显示一个“三角图标”用于标记当前记录。当改变当前记录的数据但又没有保存时,行选定器上显示一个“笔型图标”。
记录的基本操作包括添加记录、修改记录和删除记录。
A、添加记录
打开表的数据视图画面时,表的最末端有一条空白的记录,在记录的行选定器上显示一个星花图标,标示可以从这里开始增加新的记录。单击“插入”菜单中的“新记录”或直接选定该行即可添加记录。输入完数据后,移到另一个记录时会自动保存该记录。
B、修改记录
可用Tab键或直接用鼠标移到要修改的字段进行修改。
C、删除记录
选择一条或多条记录后按Delete键删除所有选中的记录。
七、总结
读过本文之后,相信您应该可以轻松地创建一个小型的数据库了,然而相比于Access强大而繁多的功能,这篇文章涉及的仅仅是最最简单和基本的一些操作,关于查询、窗体、报表、页以及宏与模块的内容将比表的基础操作更为复杂,有兴趣的读者可以查询其它的资料,以便顺利地设计和制作出高质量的应用系统
一、 简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,email
FROM testtable
WHERE name='张三'
(一) 选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列
例如,下面语句显示testtable表中所有列的数据: SELECT *
FROM testtable
2、选择部分列并指定它们的显示次序
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如: SELECT nickname,email
FROM testtable
3、更改列标题
在选择列表中,可重新指定列标题。定义格式为:
列标题=列名
列名 列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题: SELECT 昵称=nickname,电子邮件=email
FROM testtable
4、删除重复行
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如: SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,
’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2
where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join
c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时
间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表
名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字
段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(
类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排
名,等等.)
select a,b,c from tablename ta where a=(select max(a) from
tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除
所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except
(select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from
tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便
地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0
end),sum(case vender when 'C' then pcs else 0 end),sum(case
vender when 'B' then pcs else 0 end) FROM tablename group by
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id
asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们
可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见
的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500
就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查
其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码
。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。
虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个
小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候
不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录
的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " &
objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代
码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内
容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次
取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储
三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR
ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),
你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这
一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这
里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &
" AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有
Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left
join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)
+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)
+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法
的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在
该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变
量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][,
Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语
句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可
知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于
告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定
该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开
始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的
事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,
事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并
恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间
的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对
象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生
,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
以下是MS SQL
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack',
'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2
type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old
definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改
变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col
….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ --
-like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去
表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即
UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自
TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所
有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT
ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有
重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时
(INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所
有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN
b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的
所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录
。
其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from a;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from a in ‘具体数据库’
where 条件
例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"'
where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者:
select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select
max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON
a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not
between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,
’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2
where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join
c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时
间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表
名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字
段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(
类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排
名,等等.)
select a,b,c from tablename ta where a=(select max(a) from
tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除
所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except
(select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from
tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便
地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0
end),sum(case vender when 'C' then pcs else 0 end),sum(case
vender when 'B' then pcs else 0 end) FROM tablename group by
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id
asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们
可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见
的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500
就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查
其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码
。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。
虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个
小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候
不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录
的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " &
objRec("c_email")
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代
码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内
容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次
取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储
三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR
ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),
你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这
一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这
里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &
" AND " & RNumber & "+ 9"
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有
Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left
join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)
+'...' else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)
+'...',field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法
的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute("SQL 查询语言")
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在
该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变
量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute "SQL 操作性语句" [, RecordAffected][,
Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语
句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可
知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于
告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定
该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开
始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的
事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,
事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并
恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间
的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对
象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生
,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
Access基本操作
Access基本操作
一、数据库的基本概念和设计方法
所谓数据库实际上是关于某一特定主题或目标的信息集合。它把大量数据按一定的结构进行存储,集中管理和统一使用这些数据,实现数据共享。在Access中,数据库不仅包含用于存放加工过的信息的表,还包含以表中所存放的信息为操作对象的查询、窗体、报表、页等数据库对象。
一般地,数据库的设计应遵循以下几个步骤:
1、确定创建数据库所要完成的目的。
2、确定创建数据库中所需要的表。
3、确定表中所需要的字段。
4、明确有唯一值的主关键字段。
5、确定表之间的关系。
6、优化设计。
7、输入数据并创建其他数据库对象。
二、创建数据库
在Access中既可以使用人工的方法按照自己的要求来建立数据库,也可以使用软件为用户提供的各种数据库向导,前者更为自由而后者则显然要方便一些。
A、自行创建数据库
使用人工的方法按照自己的要求来建立数据库,首先应创建一个空数据库,然后再将对象加入到数据库中。创建空数据库的步骤为:
1、在启动Access后的Microsoft Access对话框中选择“空Access数据库”选项。
2、在弹出的“文件新建数据库”对话框中选择数据库存放的位置、输入数据库的名称并单击“创建”按钮,进入Access数据库窗口,即完成了空数据库的创建。
B、使用数据库向导创建数据库
Access为用户提供了多种数据库向导,使用数据库向导可以方便地完成数据库的创建工作。具体步骤如下:
1、在启动Access后的Microsoft Access对话框中选择“Access数据库向导、数据页和项目”选项。
2、在弹出“新建”对话框后单击“数据库”选项卡,选择一种数据库。
3、在弹出的“文件新建数据库”对话框中,选择数据库存放的位置,输入数据库的名称并单击“创建”按钮。
4、依次在数据库向导窗口中为数据库中的各个表选择字段、选择显示样式、确定打印报表所用的样式、输入所建数据库的标题、确定是否在所有报表上加一幅图片,最后启动该数据库,至此就完成了使用向导创建数据库的工作。
三、表的基本概念
表是数据库中存储数据的最基本的对象,常称为“基础表”,是构成数据库的一个重要组成部分。表由若干记录组成,每一行称为一个记录,对应着一个真实的对象;每一列称为一个字段,对应着对象的一个属性信息。每个表的关键字(关键字可以为一个字段或多个字段)使表中的记录唯一。在表内还可以定义索引,当表内存放大量数据时可以加速数据的查找。
Access中的所有数据都存放在数据表中。表是一个数据库系统的基础,只有建立表后,才可以建立查询、窗体和报表等其他项目,逐步完善数据库。
四、创建表
Access提供了三种创建新表的方法:
1、使用数据库向导,在一个操作中创建整个数据库所需的全部表、窗体及报表。
2、使用表向导来选择表的字段,这些字段可以从其他已定义好的表中选择。
3、使用设计视图创建表。
不管使用哪一种方法来创建表,随时都可以使用表设计试图来进一步自定义表。由于第一种方法已包含在使用数据库向导创建数据库的内容之中,这里着重说明后两种方法的实现。
A、利用表向导创建表
利用表向导创建新表,一般情况下能满足数据库开发者的要求,至于多余的字段可以用其他的方法将其删除。利用表向导创建表的步骤如下:
1、在数据库窗口中,单击“对象”列表中的“表”,双击“使用向导创建表”。
2、在弹出的“表向导”对话框中单击“表向导”并单击“确定”按钮。
3、在弹出的对话框中选择要使用的表并添加所需要的字段(可以重命名)后单击“下一步”按钮。
4、为表指定名称并确认主键,单击“下一步”按钮。
5、选择创建完表后的动作,然后单击“完成”按钮。
B、利用设计视图创建表
使用设计器建立表的方法有两种:一种方法是直接使用设计器来创建新表,另一种方法是使用表向导来构造一个结构相近的表,然后在设计器中打开修改。下面介绍使用设计器来创建新表的步骤:
1、在数据库窗口中,单击对象列表中的“表”,双击“使用设计器创建表”的按钮,进入“新建表”对话框。
2、在各栏中输入字段名称、选择数据类型,然后设置字段属性。
3、接着选中要设置为关键字的字段,单击“编辑”菜单中“主键”命令,设置“主关键字”,此时在所选字段左边行选定器上出现钥匙标记。
4、保存所设计的表。
五、关于主关键字与建立表间关系
A、设置主关键字
为了提高Access在查询、窗体和报表操作中的快速查找能力和组合保存在各个不同表中信息的性能,必须为建立的表指定一个主关键字。主关键字可以包含一个或多个字段,以保证每条记录都有唯一的值。设定主关键字的目的就在于保证表中的所有记录都能够被唯一识别。如果表中没有可以用作唯一识别表中记录的字段,则可以使用多个字段来组合成主关键字。其设置步骤如下:
1、在表设计器中,单击字段名称左边的字段选择按钮,选择要作为主关键字的字段。单击字段选择按钮的同时按住Ctrl键可以同时选择多个字段。
2、单击“编辑”菜单中的“主键”命令,则在该字段的左边显示钥匙标记。
B、建立表间关系
在表中定义主关键字除了可以保证每条记录可以被唯一识别外,更重要的作用在于多个表间的连接。当数据库中包含多个表时,需要通过主关键字的连接来建立表间的关系,使各表协同工作。
要在两个表间建立关系,必须在这两个表中拥有相同数据类型的字段。其设置步骤如下:
1、打开表所在的数据库窗口。
2、单击“工具”菜单中的“关系”命令,弹出“显示表”对话框。
3、选择要建立关系的表,然后单击“添加”按钮,依次添加完所需要的表后,单击“关闭”按钮。
4、在关系对话框中选择其中一表中的主关键字,拖曳到另一表中相同的主关键字,释放鼠表键后,弹出“编辑关系”对话框。
5、若在“编辑关系”对话框中选中“实施参照完整性”和“级联更新相关字段”复选框,则使在更新主表中记录的同时更新关系表中的相关记录。
6、若在“编辑关系”对话框中选中“实施参照完整性”和“级联删除相关字段”复选框,则使在删除主表中记录的同时删除关系表中的相关记录。
7、接着单击“联接类型”按钮,弹出“联接属性”对话框,在此选择联接的方式。
8、在“编辑关系”对话框中单击“创建”按钮,即在创建关系的表之间有一条线将其连接起来,表示已创建好表之间的关系。
9、关闭关系对话框,按需要选择是否保存关系的设定。
编辑或修改关联性的操作是直接用鼠标在这一条线上双击,然后在弹出的“编辑关系”对话框中进行修改。删除关联性的操作是先用鼠标在这一条线上单击,然后再按Delete键删除。
六、记录的基本操作
Access只允许每次操作一个记录,正在操作的记录在行选定器上显示一个“三角图标”用于标记当前记录。当改变当前记录的数据但又没有保存时,行选定器上显示一个“笔型图标”。
记录的基本操作包括添加记录、修改记录和删除记录。
A、添加记录
打开表的数据视图画面时,表的最末端有一条空白的记录,在记录的行选定器上显示一个星花图标,标示可以从这里开始增加新的记录。单击“插入”菜单中的“新记录”或直接选定该行即可添加记录。输入完数据后,移到另一个记录时会自动保存该记录。
B、修改记录
可用Tab键或直接用鼠标移到要修改的字段进行修改。
C、删除记录
选择一条或多条记录后按Delete键删除所有选中的记录。
七、总结
读过本文之后,相信您应该可以轻松地创建一个小型的数据库了,然而相比于Access强大而繁多的功能,这篇文章涉及的仅仅是最最简单和基本的一些操作,关于查询、窗体、报表、页以及宏与模块的内容将比表的基础操作更为复杂,有兴趣的读者可以查询其它的资料,以便顺利地设计和制作出高质量的应用系统
发表评论
-
oracle获取指定的日期、时间
2012-07-17 14:32 1074--本周 select trunc(sysdate, 'd ... -
Oracle 常用日期提取脚本汇总
2012-07-17 14:30 814Oracle 常用日期提取脚本汇总 1、本周第一天和最后一 ... -
Windows下安装PostgreSQL8.2图解
2010-08-20 13:16 1180Windows下安装PostgreSQL8.2图解 -
关于用户角色权限管理一点想法
2010-06-09 10:46 1090关键字: 权限 --------------------- ... -
sql语句解析顺序
2010-05-20 14:47 1355标准的 SQL 的解析顺序 ... -
postgreSql 利用触发器创建动态表
2010-05-20 14:43 1729在postgresql 中如果在程序运行中需要根据插入数据条件 ... -
使用反射实现ORM
2010-01-14 22:09 935首先Bean在符合JavaBean的要求,即有一个无参的构造方 ... -
模板设计模式_构建公共通用的Dao
2010-01-14 22:04 953核心代码: Connection的工具类:详见:JDBC数据 ... -
使用构造函数创建JavaScript对象
2010-01-14 21:31 948<!DOCTYPE html PUBLIC " ... -
数据库行转列
2010-01-14 21:09 810create table score ( s_id int ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2010-01-14 20:56 910Insert是T-sql中常用语句,Insert INTO t ... -
mysql导入导出
2010-01-12 12:05 14641. 导出 view plaincopy to clip ... -
mysql导入与导出和删除多条数据数据
2010-01-12 11:57 2256数据导出: mysql> select * from ... -
MySQL索引分类和各自用途
2010-01-12 11:43 1488一、 MySQL: 索引以B树格 ... -
各种主流数据库的分页写法
2010-01-11 16:38 639------------------------------- ... -
MySQL中进行树状所有子节点的查询
2010-01-06 21:16 1228在Oracle 中我们知道有一个 Hierarchical Q ... -
MySQL中进行树状所有子节点的查询
2009-12-29 14:52 1002在Oracle 中我们知道有一个 Hierarchical Q ... -
有关SQL模糊查询
2009-12-28 12:50 1197执行 数据库查询时,有 ... -
视图,存储过程,触发器的好处
2009-12-23 11:33 1065视图的优点: 提高数据安全性,可以不让用户看到表中的某个字 ... -
处理上百万条的数据库如何提高处理查询效率
2009-12-18 12:42 15751.对查询进行优化,应尽量避免全表扫描,首先应考虑在 wher ...
相关推荐
综上所述,"超好用的SQL语句生成及分析器"是一个集成了SQL编写辅助和性能分析功能的工具,适用于数据库管理人员和开发人员。它可以帮助用户轻松构建SQL语句,同时提供分析功能来提升数据库操作的效率。配套的Delphi ...
本主题聚焦于如何利用SQL语句在易语言环境中为超级列表框添加合计行,这是一项能显著提高代码效率和易读性的技巧。 超级列表框是GUI(图形用户界面)设计中常见的一种组件,它允许用户以表格形式展示和操作数据,...
"超经典SQL语句大全"这份文档显然是为了帮助用户掌握SQL SERVER中的核心概念和常用语法。下面,我们将详细讨论SQL的关键字以及一些经典语句。 1. **SQL关键字**: SQL的关键字是构成SQL语句的基础,例如`SELECT`、...
1.INSERT (往数据表里插入记录的语句)INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT 字段名1, 字段名2, …… FROM 另外的表名; 字符串...
### 超全SQL语句大全(葵花宝典) #### 一、基础知识与操作 1. **创建数据库** - 语法: ```sql CREATE DATABASE database-name; ``` - 描述:用于创建一个新的数据库实例。 2. **删除数据库** - 语法: `...
- 参数化查询:避免直接在SQL语句中拼接用户输入,使用参数化查询可以防止SQL注入。 - 权限控制:合理分配数据库用户的权限,避免过度授权。 - 日志审计:记录数据库操作日志,便于追踪异常行为。 6. 其他: - ...
10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...
存储过程是一组预编译的SQL语句,可以被多次调用,提高性能并减少网络流量。触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的存储过程。 九、联接(JOIN) SQL支持不同类型的联接,如内连接...
"超经典的SQL语句大全"是一个集合了各种高效、实用的SQL语法示例的资源,对于学习和提升SQL技能极具价值。以下是基于这个主题的详细知识点讲解: 1. **基本查询**: - `SELECT`:用于从表中选取数据,如`SELECT * ...
总的来说,这个压缩包提供了一个全面的SQL Server学习资源,从基础语法到高级技巧,再到实际问题的解决,覆盖了SQL Server使用中的各个方面。无论是初学者还是希望深入研究的开发者,都能从中受益。通过系统学习并...
- `SELECT`语句用于从数据库中检索数据,基本语法为`SELECT [ALL | DISTINCT] [TOP n [PERCENT]] <select_list>`。 - `*`代表选择所有列,`table_name.*`则选择指定表的所有列。 - 可以单独选择列名,如`SELECT ...
ALTER SQL 语句实例 ALTER TABLE 语句是 PostgreSQL 中用来修改表定义的语句。它可以通过更改、添加、删除列和约束,或者通过启用或禁用约束和触发器来更改表的定义。 ALTER TABLE 语句有多种子形式,包括: 1. ...
首先说明这个是收集与csdn 多年来的精华帖 ...包括备份还原,导入导出、行列转换、动态sql基本语法、游标、复制 等等,可以说是丰富多彩、包罗万象。 这里不多在阐述,绝对的物超所值,谁下谁知道。
sql语句-linq语言-lambda表达式对照。 超级全面的Ling语法、SQL语法、lambda表达式对照(相同功能的不同于法)、 可以帮助对SQL、linq、lambda表达式存在疑惑不明白的在这里面可以充分提现出来语法间的对比和学习。让...
SQL 是用于访问和处理数据库的标准的计算机语言。...这些DQL保留字常与其它类型的SQL语句一起使用 《SQL查询语句大全集锦》当前最流行的数据库查询语法,对学习sql有一定的帮助,感兴趣的可以了解一下
自然语言处理(NLP)与SQL语句生成是人工智能领域中的一个重要交叉点,它涉及到深度学习、机器学习和实际项目应用。在这个项目中,“基于自然语言处理的NL2SQL语句生成算法.zip”提供了一个数据集和源代码,旨在帮助...
SQL的语法规则遵循一定的层次结构,例如,查询首先包含一个SELECT子句,接着可以有FROM和WHERE子句,最后可能还有GROUP BY和HAVING子句等。 词法和语法分析器的实现通常涉及自底向上或自顶向下的方法,或者是两者...
### SQL语句SELECT用法详解 #### 一、概述 SQL(Structured Query Language)是一种用于管理...以上是对SQL语句`SELECT`的详细解析及其使用方法。通过灵活运用这些子句和选项,可以构建出满足各种需求的复杂查询。