SQL语句在Access和SQL Server里面的不同
2009-11-11 00:44
435 查看
做了一个Winform的营养测量软件,来回的捣腾着Access数据库,还是那几句增删改查,不过用多了,发现Access数据库下的SQL语句和SQL Server下正宗的SQL还有有很大的不同。
我的感觉是,Accees数据库虽然可以称得上是小型的关系型数据库,并且也是使用的结构化查询语言SQL,但它的语法(主要体现在函数上),却类似vbscript的语法,我想,这应该和Access属于Office系列有关,基于它的开发和应用,自然就与VBA扯上关系,因而Access的函数库也就是VBA的函数库,而非SQL函数库。下面,我们来具体看下Access和SQL Server在查询语句的编写上具体的不同。
一、数据类型转换:
Access:
SELECT '调查'+CStr(Did) as diaocha FROM CZdengji
SQL Server:
select artid,'调查'+Cast(listid As varchar) as did from kingart where artdate>=getdate()
Access中SQL查询的数据类型转换有很多函数,每一个函数都可以强制将一个表达式转换成某种特定数据类型。具体如下:CBool(expression) 、CByte(expression) 、CCur(expression) 、CDate(expression) 、CDbl(expression) 、CDec(expression) 、CInt(expression) 、CLng(expression) 、CSng(expression) 、CStr(expression) 、CVar(expression) 、CStr(expression),相信不用说明,大家也看得懂这各种转换符的意思。
二、IIF函数(ACCESS专用)
Access:
SELECT Id,IIF(Isfinished=1,'已完成','进行中'),Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC
SQL Server
的写法就相对更多,可以自定义函数,也可以使用case语句,如select Id,case Isfinished when 1 then '已完成'
when 0 then '进行中' end,Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC
三、DISTINCT关键字用法:
Access里面distinct(expression)的用法单一,
expression
只能为指定字段,而不能为表达式,SQL Server则不同,
expression
除了可以为单个字段,也可以为一个子查询等复杂表达式。
四、日期格式化
Access:
使用format()函数,SELECT TOP 5 arttitle,format(artdate,'YY-MM-DD') as arttime FROM kingart WHERE listid=9,这里使用format()函数,指定artdate(日期型)查询出来的格式为YY-MM-DD。
SQL Server:
使用convert()函数,select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news,这里的120,是指定格式为YY-MM-DD,如果是其他数字(101-120),就是其他的格式。
其它一些常用的SQL语句集锦
SELECT Top 5 * From Food WHERE Fid not in(Select top 5 Fid FROM Food) //查询第5到第10条记录
delete from
Food
where charindex('2007',uptime)>0 or charindex('2008',
uptime
)>0 //删除Food表中uptime列包含有2007或2008的记录,即删除时间为2007年和2008年的更新记录
select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news //
SQL Server里面的convert函数,转换成
varchar(10)类型,
120为指定转换后的格式。
select Mealtype as 餐别,Fname as 食物名称,sum(rjjingshisz)/2 as 人均净食生重总和 from CZdengji WHERE Did=6 group by Mealtype,Fname //分组查询,GROUP BY的本意就是重复的字段合为一,对应的信息,进行汇总(count、sum等运算)
Select Count(ID) from Flow where convert(varchar(21),visittime,120) like '2007-01-26% '
,日期型数据模糊查询。
select * from ('MSDASQL','DRIVER={SQL Server};SERVER=服务器名字;UID=对端数据库的账号;PWD=对端密码', 对端数据库.权限者.对端的表) as 表 //跨服务器查询
我的感觉是,Accees数据库虽然可以称得上是小型的关系型数据库,并且也是使用的结构化查询语言SQL,但它的语法(主要体现在函数上),却类似vbscript的语法,我想,这应该和Access属于Office系列有关,基于它的开发和应用,自然就与VBA扯上关系,因而Access的函数库也就是VBA的函数库,而非SQL函数库。下面,我们来具体看下Access和SQL Server在查询语句的编写上具体的不同。
一、数据类型转换:
Access:
SELECT '调查'+CStr(Did) as diaocha FROM CZdengji
SQL Server:
select artid,'调查'+Cast(listid As varchar) as did from kingart where artdate>=getdate()
Access中SQL查询的数据类型转换有很多函数,每一个函数都可以强制将一个表达式转换成某种特定数据类型。具体如下:CBool(expression) 、CByte(expression) 、CCur(expression) 、CDate(expression) 、CDbl(expression) 、CDec(expression) 、CInt(expression) 、CLng(expression) 、CSng(expression) 、CStr(expression) 、CVar(expression) 、CStr(expression),相信不用说明,大家也看得懂这各种转换符的意思。
二、IIF函数(ACCESS专用)
Access:
SELECT Id,IIF(Isfinished=1,'已完成','进行中'),Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC
SQL Server
的写法就相对更多,可以自定义函数,也可以使用case语句,如select Id,case Isfinished when 1 then '已完成'
when 0 then '进行中' end,Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC
三、DISTINCT关键字用法:
Access里面distinct(expression)的用法单一,
expression
只能为指定字段,而不能为表达式,SQL Server则不同,
expression
除了可以为单个字段,也可以为一个子查询等复杂表达式。
四、日期格式化
Access:
使用format()函数,SELECT TOP 5 arttitle,format(artdate,'YY-MM-DD') as arttime FROM kingart WHERE listid=9,这里使用format()函数,指定artdate(日期型)查询出来的格式为YY-MM-DD。
SQL Server:
使用convert()函数,select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news,这里的120,是指定格式为YY-MM-DD,如果是其他数字(101-120),就是其他的格式。
其它一些常用的SQL语句集锦
SELECT Top 5 * From Food WHERE Fid not in(Select top 5 Fid FROM Food) //查询第5到第10条记录
delete from
Food
where charindex('2007',uptime)>0 or charindex('2008',
uptime
)>0 //删除Food表中uptime列包含有2007或2008的记录,即删除时间为2007年和2008年的更新记录
select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news //
SQL Server里面的convert函数,转换成
varchar(10)类型,
120为指定转换后的格式。
select Mealtype as 餐别,Fname as 食物名称,sum(rjjingshisz)/2 as 人均净食生重总和 from CZdengji WHERE Did=6 group by Mealtype,Fname //分组查询,GROUP BY的本意就是重复的字段合为一,对应的信息,进行汇总(count、sum等运算)
Select Count(ID) from Flow where convert(varchar(21),visittime,120) like '2007-01-26% '
,日期型数据模糊查询。
select * from ('MSDASQL','DRIVER={SQL Server};SERVER=服务器名字;UID=对端数据库的账号;PWD=对端密码', 对端数据库.权限者.对端的表) as 表 //跨服务器查询
相关文章推荐
- Access和SQL Server里面的SQL语句的不同之处
- access与sql server中sql语句的不同<不断更新中...>
- ACCESS中使用SQL语句应注意的地方、与sql server的区别及几点技巧(整理中)
- SQL语句实现SQL Server及ACCESS复制表结构或表结构及内容到新的表
- SQL语句参考,包含Access、MySQL 以及 SQL Server
- Access和sql查询语句的不同;Delphi中的双引号是没有的。
- ACCESS中使用SQL语句应注意的地方、与sql server的区别及几点技巧(整理中)
- Sql Server 和 Access 操作数据库结构Sql语句小结
- Sql Server 和 Access 操作数据库结构Sql语句
- 操作SQL2000 与ACCESS SQL语句有一些不同点。ACCESS SQL语句要求高
- Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
- SQL SERVER 2000 的企业管理器与查询分析器对于同一SQL语句有两个不同查询结果!
- SQL语句实现SQL Server及ACCESS复制表结构或表结构及内容到新的表
- ORACLE 的SQL语句与SQL SERVER 中的SQL语句中一些不同的地方
- Oracle、SQL Server、Access利用SQL语句进行高效果分页
- [MSSQL]SQL Server里面导出SQL脚本(表数据的insert语句)(转)
- Sql Server 和 Access 操作数据库结构Sql语句
- [MSSQL]SQL Server里面导出SQL脚本(表数据的insert语句)(转)
- SQL Server里面导出SQL脚本(表数据的insert语句)
- sql server和access 中sql语句的区别(佚名)