Access SQL语句经验总结.docx
- 文档编号:5503677
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:19
- 大小:30.30KB
Access SQL语句经验总结.docx
《Access SQL语句经验总结.docx》由会员分享,可在线阅读,更多相关《Access SQL语句经验总结.docx(19页珍藏版)》请在冰豆网上搜索。
AccessSQL语句经验总结
对Access表的数据内容进行操作的SQL语句:
到这里就好办了,对数据的读写操作时针对adotable的操作
TADOQuery.Append;//新增记录
TADOQuery.Edit;//修改当前记录指针记录
TADOQuery.Post;//提交新增或者修改的记录
TADOQuery.Cancel;//取消对记录的修改
TADOQuery.Delete;//删除记录
新增的例子:
TADOQuery.append;
TADOQuery.FieldValues['名字']:
='张三';
TADOQuery.FieldValues['时间']:
='2007-9-7';//注意字段类型
TADOQuery.FieldValues['地址']:
='XX区XX路XX号';
TADOQuery.post;
修改的例子:
TADOQuery.edit;
TADOQuery.FieldValues['名字']:
='张三';
TADOQuery.FieldValues['时间']:
='2007-9-7';//注意字段类型
TADOQuery.FieldValues['地址']:
='XX区XX路XX号';
TADOQuery.post;
删除的例子
TADOQuery.delete;//注意删除的是记录指针位置的数据
获取数据:
通过移动记录指针,移动到合适的位置然后直接读取
procedurebutton1click(sender:
object);
var
strAddress,strName:
String;
dtDate:
TDateTime;
begin
adotable.next;//指针向下一条,就是当前记录的下一条记录
strAddress:
=TADOQuery.FieldValues['地址'];
strName:
=TADOQuery.FieldValues['名字'];
dtDate:
=TADOQuery.FieldValues['时间'];
showmessage(strAddress+' '+strName+formatDateTime('YYYY-MM-DD',dtDate))
end;
1.创建表createtable[t_test](idCounter(1,1) primary key,u_namevarchar(50),fatheridint)
idCounter(1,1) primary key设置id为主键并自动增长
2.修改字段类型:
Sql="altertable[表名]AlterCOLUMN字段名] varchar(50)"
3.删除表:
Sql="Droptable[表名]"
4.删除字段:
sql="altertable[表名]drop[字段名]"
5.修改字段:
AlterTABLE[表名]AlterCOLUMN[字段名]类型(大小)NULL
6.添加字段:
Sql="altertable[表名]addcolumn[字段名]varchar(200)"
新建约束:
AlterTABLE[表名]ADDCONSTRAINT约束名CHECK([约束字段]<--brstyle='font-size:
14px;font-style:
normal;font-weight:
normal;color:
rgb(54,46,43);'/>
删除约束:
AlterTABLE[表名]DropCONSTRAINT约束名
新建默认值:
AlterTABLE[表名]ADDCONSTRAINT默认值名DEFAULT'Gziu.CoM'FOR[字段名]
删除默认值:
AlterTABLE[表名]DropCONSTRAINT默认值名
版权声明:
本文为博主原创文章,未经博主允许不得转载。
Delphi的Query控件Open跟ExecSQL的区别
第一点是:
区分好Query控件的Open方法和ExecSQL方法。
这两个方法都可以实现执行SQL语句,但要根据不同情况分别使用。
如果这条SQL语句将返回一个结果集,必须使用Open方法,如果不返回一个结果集,则要使用ExecSQL方法。
例如:
对于不用返回结果集的要用execsql
反之则用open;
insert ,update,delete就要用到execsql;
select就要用open
说得对,例子:
with query1 do
close;
SQL.Clear;
SQL.Add('Delete From Country Where Name=''England''');
ExecSQL;
一、数据类型
Access数据库为字段提供了10种数据类型,它们的用法和所占存储空间大小如下:
1.文本型(Text):
用于输入文本或文本与数字相结合的数据,最长为255个字符(字节),默认值是50。
在Access中,每一个汉字和所有特殊字符(包括中文标点符号)都算作一个字符。
表示方法:
用英文单引号(’ ’)或英方双引号(” ”)括起来。
例:
’王刚’、’会计2班’、’3246291’等。
2.货币型(Currency):
用来存储货币值,占8个字节,在计算中禁止四舍五入。
3.数字型(Number):
用于可以进行数值计算的数据,但货币除外。
数字型字段按字段大小分字节、整型、长整型、单精度型、双精度型、同步复制ID和小数7种情形,分别占1、2、4、4、8、16和12个字节。
表示方法:
直接书写即可。
例:
3246291
4.日期/时间型(Date/Time):
用于存储日期和(或)时间值,占8个字节。
表示方法:
用英文字符#号括起来。
例:
#2010-02-25#、#02/25/2010#、#2010-02-25 15:
30#、#2010-02-253:
30pm#、#15:
30#都是合法的表示方法。
不过要注意:
日期和时间之间要留有一个空格。
5.自动编号型(AutoNumber):
用于在添加记录时自动插入的序号(每次递增1或随机数),默认是长整型,也可以改为同步复制ID。
自动编号不能更新。
6.是/否型(Yes/No):
用于表示逻辑值(是/否,真/假),占1个字节。
表示方法:
.T. .F. Truefalse
7.备注型(Memo):
用于长文本或长文本与数字(大于255个字符)的结合,最长为65535个字符。
8.OLE对象型(OLEObject):
用于使用OLE协议在其它程序中创建的OLE对象(如Word文档、Excel电子表格、图片、声音等),最多存储1GB(受磁盘空间限制)。
9.超级链接型(HyperLink):
用于存放超级链接地址,最多存储64000个字符。
10.查阅向导型(LockupWizard):
让用户通过组合框或列表框选择来自其它表或值列表的值,实际的字段类型和长度取决于数据的来源。
附件A中列出了Access的全部数据类型的适用范围和它们的默认宽度(即默认的存储空间)。
二、如何确定字段数据类型
1、和金钱有关的,用货币型,和金钱无关但需数值计算的选数字型,无需数值计算又不超过255个字符的选文本型,超过255个字符的选备注型。
2、如果只有两个确定的值可供选择,可以用是/否型,也可以用文本型。
其他如日期型类型,含义明显,不再叙述。
一、基础
1、说明:
创建数据库
CREATEDATABASEdatabase-name
2、说明:
删除数据库
dropdatabasedbname
3、说明:
备份sqlserver
--- 创建备份数据的 device
USEmaster
EXECsp_addumpdevice'disk','testBack','c:
\mssql7backup\MyNwind_1.dat'
--- 开始备份
BACKUPDATABASEpubsTOtestBack
4、说明:
创建新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)
根据已有的表创建新表:
A:
createtabletab_newliketab_old(使用旧表创建新表)
B:
createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
5、说明:
删除新表
droptabletabname
6、说明:
增加一个列
Altertabletabnameaddcolumncoltype
注:
列增加后将不能删除。
DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:
添加主键:
Altertabletabnameaddprimarykey(col)
说明:
删除主键:
Altertabletabnamedropprimarykey(col)
8、说明:
创建索引:
create[unique]indexidxnameontabname(col….)
删除索引:
dropindexidxname
注:
索引是不可更改的,想更改必须删除重新建。
9、说明:
创建视图:
createviewviewnameasselectstatement
删除视图:
dropviewviewname
10、说明:
几个简单的基本的sql语句
选择:
select*fromtable1where 范围
插入:
insertintotable1(field1,field2)values(value1,value2)
删除:
deletefromtable1where 范围
更新:
updatetable1setfield1=value1where 范围
查找:
select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!
排序:
select*fromtable1orderbyfield1,field2[desc]
总数:
selectcountastotalcountfromtable1
求和:
selectsum(field1)assumvaluefromtable1
平均:
selectavg(field1)asavgvaluefromtable1
最大:
selectmax(field1)asmaxvaluefromtable1
最小:
selectmin(field1)asminvaluefromtable1
11、说明:
几个高级查询运算词
A:
UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。
当 ALL 随 UNION 一起使用时(即 UNIONALL),不消除重复行。
两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B:
EXCEPT 运算符
EXCEPT运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。
当 ALL 随 EXCEPT 一起使用时 (EXCEPTALL),不消除重复行。
C:
INTERSECT 运算符
INTERSECT运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。
当 ALL随 INTERSECT 一起使用时 (INTERSECTALL),不消除重复行。
注:
使用运算词的几个查询结果行必须是一致的。
12、说明:
使用外连接
A、left (outer) join:
左外连接(左连接):
结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL:
selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
B:
right (outer) join:
右外连接(右连接):
结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:
full/cross (outer) join:
全外连接:
不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:
Groupby:
一张表,一旦分组完成后,查询后只能得到组相关的信息。
组相关的信息:
(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:
不能以text,ntext,image类型的字段作为分组依据
在selecte统计函数中的字段,不能和普通的字段放在一起;
13、对数据库进行操作:
分离数据库:
sp_detach_db;附加数据库:
sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb'old_name','new_name'
二、提升
1、说明:
复制表(只复制结构,源表名:
a 新表名:
b)(Access可用)
法一:
select*intobfromawhere1<>1(仅用于SQlServer)
法二:
selecttop0*intobfroma
2、说明:
拷贝表(拷贝数据,源表名:
a 目标表名:
b)(Access可用)
insertintob(a,b,c)selectd,e,ffromb;
3、说明:
跨数据库之间表的拷贝(具体数据使用绝对路径)(Access可用)
insertintob(a,b,c)selectd,e,ffrombin‘具体数据库’where 条件
例子:
..frombin'"&Server.MapPath(".")&"\data.mdb"&"'where..
4、说明:
子查询(表名1:
a 表名2:
b)
selecta,b,cfromawhereaIN(selectdfromb) 或者:
selecta,b,cfromawhereaIN(1,2,3)
5、说明:
显示文章、提交人和最后回复时间
selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
6、说明:
外连接查询(表名1:
a 表名2:
b)
selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
7、说明:
在线视图查询(表名1:
a)
select*from(SELECTa,b,cFROMa)Twheret.a>1;
8、说明:
between的用法,between限制查询数据范围时包括了边界值,notbetween不包括
select*fromtable1wheretimebetweentime1andtime2
selecta,b,c,fromtable1whereanotbetween 数值1and 数值2
9、说明:
in 的使用方法
select*fromtable1wherea[not]in(‘值1’,’值2’,’值4’,’值6’)
10、说明:
两张关联表,删除主表中已经在副表中没有的信息
deletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1)
11、说明:
四表联查问题:
select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere .....
12、说明:
日程安排提前五分钟提醒
SQL:
select*from 日程安排 wheredatediff('minute',f开始时间,getdate())>5
13、说明:
一条sql 语句搞定数据库分页
selecttop10b.*from(selecttop20 主键字段,排序字段 from 表名 orderby 排序字段 desc)a,表名 bwhereb.主键字段 =a.主键字段 orderbya.排序字段
具体实现:
关于数据库分页:
declare@startint,@endint
@sqlnvarchar(600)
set@sql=’selecttop’+str(@end-@start+1)+’+fromTwhereridnotin(selecttop’+str(@str-1)+’RidfromTwhereRid>-1)’
execsp_executesql@sql
注意:
在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理。
Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。
因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引)
14、说明:
前10条记录
selecttop10*formtable1where 范围
15、说明:
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablenameta wherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)
16、说明:
包括所有在 TableA中但不在 TableB和TableC中的行并消除所有重复行而派生出一个结果表
(selectafromtableA)except(selectafromtableB)except(selectafromtableC)
17、说明:
随机取出10条数据
selecttop10*from tablename orderby newid()
18、说明:
随机选择记录
selectnewid()
19、说明:
删除重复记录
1),deletefromtablenamewhereidnotin(selectmax(id)fromtablenamegroupbycol1,col2,...)
2),selectdistinct*intotempfrom tablename
deletefrom tablename
insertinto tablename select*fromtemp
评价:
这种操作牵连大量的数据的移动,这种做法不适合大容量但数据操作
3),例如:
在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段
altertable tablename
--添加一个自增列
addcolumn_b intidentity(1,1)
deletefrom tablename wherecolumn_bnotin(
select max(column_b)from tablename groupby column1,column2,...)
altertable tablename dropcolumn column_b
20、说明:
列出数据库里所有的表名
selectnamefromsysobjectswheretype='U'//U代表用户
21、说明:
列出表里的所有的列名
selectnamefromsyscolumnswhereid=object_id('TableName')
22、说明:
列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
selecttype,sum(casevenderwhen'A'thenpcselse0end),sum(casevenderwhen'C'thenpcselse0end),sum(casevenderwhen'B'thenpcselse0end)FROMtablenamegroupbytype
显示结果:
typevenderpcs
电脑 A1
电脑 A1
光盘 B2
光盘 A2
手机 B3
手机 C3
23、说明:
初始化表table1
TRUNCATETABLEtable1
24、说明:
选择从10到15的记录
selecttop5*from(selecttop15*fromtableorderbyidasc)table_别名 orderbyiddesc
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“where1=1” 是表示选择全部 “where1=2”全部不选,
如:
if@strWhere!
=''
begin
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']where'+@strWhere
end
else
begin
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']'
end
我们可以直接写成
错误!
未找到目录项。
set@strSQL='selectcount(*)asTotalfrom['+@tblName+']where1=1 安定 '+@strWhere 2、收缩数据库
--重建索引
DBCCREINDEX
DBCCINDEXDEFRAG
--收缩数据和日志
DBCCSHRINKDB
DBCCSHRINKFILE
3、压缩数据库
dbccshrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
execsp_change_users_login'update_one','newname','oldname'
go
5、检查备份集
RESTOREVERIFYONLYfromdisk='E:
\dvbbs.bak'
6、修复数据库
ALTERDATABASE[dvbbs]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Access SQL语句经验总结 SQL 语句 经验总结