`
苹果超人
  • 浏览: 198329 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQLite3与SQL差异小结------网上的

阅读更多
1 TOP
这是一个大家经常问到的问题,例如在SQLSERVER中可以使用如下语句来取得记录集中的前十条记录:
SELECT TOP 10 * FROM [index] ORDER BY indexid DESC;
但是这条SQL语句在SQLite中是无法执行的,应该改为:
SELECT * FROM [index] ORDER BY indexid DESC limit 0,10;
其中limit 0,10表示从第0条记录开始,往后一共读取10条

2 创建视图(Create View)
SQLite在创建多表视图的时候有一个BUG,问题如下:
CREATE VIEW watch_single AS SELECT DISTINCTwatch_item.[watchid],watch_item.[itemid] FROM watch_item;
上面这条SQL语句执行后会显示成功,但是实际上除了
SELECT COUNT(*) FROM [watch_single ] WHERE watch_ single.watchid = 1;
能执行之外是无法执行其他任何语句的。其原因在于建立视图的时候指定了字段所在的表名,而SQLite并不能正确地识别它。所以上面的创建语句要改为:
CREATE VIEW watch_single AS SELECT DISTINCT [watchid],[itemid] FROM watch_item;
但是随之而来的问题是如果是多表的视图,且表间有重名字段的时候该怎么办?

3 COUNT(DISTINCT column)
SQLite在执行如下语句的时候会报错:
SELECT COUNT(DISTINCT watchid) FROM [watch_item] WHERE watch_item.watchid = 1;
其原因是SQLite的所有内置函数都不支持DISTINCT限定,所以如果要统计不重复的记录数的时候会出现一些麻烦。比较可行的做法是先建立一个不重复的记录表的视图,然后再对该视图进行计数。

4 外连接
虽然SQLite官方已经声称LEFT OUTER JOIN 已经实现,但还没有 RIGHT OUTER JOIN 和 FULL OUTER JOIN。但是实际测试表明似乎并不能够正常的工作。以下三条语句在执行的时候均会报错:
SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE tags.[tagid] = tag_rss.[tagid](*);
SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE LEFT OUTER JOIN tag_rss.[tagid] = tags.[tagid];
SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE LEFT JOIN tag_rss.[tagid] = tags.[tagid];
此外经过测试用+号代替*号也是不可行的。

收集SQLite与Sql Server的语法差异


1.返回最后插入的标识值
返回最后插入的标识值sql server用@@IDENTITY
sqlite用标量函数LAST_INSERT_ROWID()
返回通过当前的 SQLConnection 插入到数据库的最后一行的行标识符(生成的主键)。此值与 SQLConnection.lastInsertRowID 属性返回的值相同。

2.top n
在sql server中返回前2行可以这样:
select top 2 * from aa
order by ids desc

sqlite中用LIMIT,语句如下:
select * from aa
order by ids desc
LIMIT 2

3.GETDATE ( )
在sql server中GETDATE ( )返回当前系统日期和时间
sqlite中没有

4.EXISTS语句
sql server中判断插入(不存在ids=5的就插入)
IF NOT EXISTS (select * from aa where ids=5)
BEGIN
insert into aa(nickname)
select 't'
END
在sqlite中可以这样
insert into aa(nickname)
select 't'
where not exists(select * from aa where ids=5)

5.嵌套事务
sqlite仅允许单个活动的事务

6.RIGHT 和 FULL OUTER JOIN
sqlite不支持 RIGHT OUTER JOIN 或 FULL OUTER JOIN

7.可更新的视图
sqlite视图是只读的。不能对视图执行 DELETE、INSERT 或 UPDATE 语句,sql server是可以对视图 DELETE、INSERT 或 UPDATE

8.关于日期时间类型列的默认设置:

对"列"的设置包括三个字段:Name、Type、Default

Name:logTime(随意命名);

Type:❶Date类型,得到的值形如"2011-04-23",

      ❷DATETIME类型,得到的值形如"2011-04-23 11:49:04.000";
Default:datetime('now','localtime')  我采用的是两个参数,后面的localtime不要丢弃,不然时间不准确。
分享到:
评论

相关推荐

    sqlite-jdbc-3.34.0-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...

    sqlite-shell-win32-x86: sqlite3.exe

    网上可以下到sqlite-shell-win32-x86: sqlite3.exe 2. 为了方便命令行执行,将sqlite3.exe放到svn 项目的主目录下,和.svn目录同级下。 3. cmd进入该目录下,执行 sqlite3 .svn/wc.db "select * from work_queue"....

    _sqlite3.cpython-36m-x86_64-linux-gnu.so

    解决运行diango时报错No module named '_sqlite3’,需要把此文件放到服务器安装的python目录下的lib-dynload中

    sqlite3.exe sqlite3.exe sqlite-dll-win64-x64-3230100

    标题中的 "sqlite3.exe sqlite3.exe sqlite-dll-win64-x64-3230100" 指的是这个压缩包包含了两个 `sqlite3.exe` 文件以及一个特定版本(3230100)的 `sqlite-dll-win64-x64`,即64位 Windows 平台的 SQLite3 动态...

    sqlite-shell-linux-x86-3080900.zip

    总的来说,"sqlite-shell-linux-x86-3080900.zip" 是在Linux环境中管理和操作SQLite数据库的重要工具,它提供了一个直接与数据库交互的界面,使得数据管理变得简单易行。无论你是初学者还是经验丰富的开发者,熟悉并...

    SQLite开发笔记3(在arm-linux平台上建立嵌入式C数据库)

    成功编译后,在指定的安装路径`/root/sqlite-3.6.5/build/bin`下会生成可执行文件`sqlite3`,在`/root/sqlite-3.6.5/build/include`下生成头文件`sqlite3.h`,在`/root/sqlite-3.6.5/build/lib`下生成静态库`...

    SQLiteStudio-3.4.4-windows-x64-installer.zip

    SQLite本身是一个开源、轻量级的嵌入式SQL数据库引擎,广泛应用于各种桌面应用程序、移动设备和服务器环境,尤其适合那些对数据库性能有需求但又不需要大型数据库系统的企业或个人。 在Windows环境下安装SQLite...

    sqlite-tools-win-x64-3440200.zip

    "sqlite-tools-win-x64-3440200.zip"这个压缩包包含了三个主要的SQLite实用工具,它们分别是sqlite3_analyzer.exe、sqlite3.exe和sqldiff.exe。 1. **sqlite3.exe**:这是SQLite的命令行接口,也是最基础的工具。...

    sqlite-tools-linux-x86-3350400.zip

    在“sqlite-tools-linux-x86-3350400.zip”这个压缩包中,包含了以下关键的SQLite工具: 1. **sqlite3**: 这是SQLite的主要命令行接口。用户可以通过这个工具执行SQL语句,创建和管理数据库,查询数据,甚至进行...

    SQLite3-net2-4.6-DLL

    3. sqlite-netFx451-static-binary-x64-2013-1.0.109.0.zip、sqlite-netFx45-static-binary-x64-2012-1.0.109.0.zip、sqlite-netFx451-static-binary-Win32-2013-1.0.109.0.zip 和 sqlite-netFx45-static-binary-Win...

    sqlite3-dll-win32-x86

    SQLite3是一个轻量级的、自包含的、开源的SQL数据库引擎,广泛应用于各种应用程序中,尤其是那些需要嵌入式数据库功能的场景,如桌面应用、移动应用以及服务器端应用等。 SQLite3工具是与这个DLL文件一同使用的,它...

    sqlite-tools-win32-x86-3360000.zip(sqllite安装包)

    这个“sqlite-tools-win32-x86-3360000.zip”压缩包是SQLite的Windows 32位版本工具集,版本号为3360000,包含了用于管理SQLite数据库的一系列命令行工具。 1. SQLite数据库系统: SQLite是一个自包含、无服务器、...

    sqlite-shell-win32-x86-3080200.zip

    1. **安装与运行**:解压"sqlite-shell-win32-x86-3080200.zip"到任意目录,然后找到sqlite3.exe,双击运行或在命令行中输入其路径启动。 2. **连接数据库**:在命令行中,输入`.open 数据库文件名`,例如`.open ...

    sqlite3-win32-x86-307

    SQLite3是一种轻量级、开源的关系型数据库管理系统,它不依赖于服务器进程,可以直接嵌入到应用程序中。这个“sqlite3-win32-x86-307”压缩包是针对Windows 32位系统的SQLite3版本,由VS2010编译生成的静态导入库和...

    sqlite-tools-win32-x86-3290000

    sqlite-tools-win32-x86-3290000 通常包含了用于管理SQLite数据库的命令行工具,如sqlite3.exe,这个工具可以用来创建、打开、查询和管理SQLite数据库文件(通常以.db为扩展名)。 用户可以在该目录下运行sqlite3....

    sqlite-netFx46-binary-bundle-x64-2015-1.0.113.0.zip

    标签"sqlite-netFx46"着重强调了这个软件包与.NET Framework 4.6的兼容性。 压缩包内的文件名列表揭示了几个关键组件: 1. **System.Data.SQLite.dll.config**:这是SQLite .NET数据提供程序的配置文件,可能包含...

    sqlite-jdbc-3.34.0-API文档-中英对照版.zip

    赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...

Global site tag (gtag.js) - Google Analytics