当前位置:   article > 正文

多年实战总结Access、SQLServer以及SQLite数据库常见差异_sqlite vs access

sqlite vs access

日期:2021年01月09日
作者:Commas
注释:很久很久没有更新文章了,2020年虐我千百遍,2021年可以待我如初恋。今年第一更,记录自己知识积累的同时,也希望可以帮助到大家。接触了好几种关系型数据库,总结一下它们之间的差异吧……


目录


一、常见数据库类型定义比较

序号类型AccessSQLServerSQLite
1文本(以10个字符为例)TEXT(10)NVARCHAR(10)TEXT(10)
2长文本MEMONVARCHAR(MAX)TEXT
3日期DATETIMEDATETIMEDATETIME
4浮点数DOUBLEFLOATDOUBLE
5整数INTEGERINTEGERINTEGER

【Access】数据库类型定义示例如下:

CREATE TABLE [book] (
 [id] COUNTER NOT NULL CONSTRAINT [PK_book] PRIMARY KEY,
 [book_name] TEXT(24) NOT NULL,
 [book_comment] TEXT NULL,
 [publish_date] DATETIME NOT NULL,
 [price] DATETIME NOT NULL,
 [num] INTEGER NOT NULL DEFAULT 0
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

【SQLServer】数据库类型定义示例如下:

CREATE TABLE [book] (
 [id] INTEGER IDENTITY(1,1) NOT NULL CONSTRAINT [PK_book] PRIMARY KEY,
 [book_name] NVARCHAR(24) NULL,
 [book_comment] NVARCHAR(MAX) NOT NULL,
 [publish_date] DATETIME NOT NULL,
 [price] FLOAT NULL,
 [num] INTEGER NULL DEFAULT 0,
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

SQLite】 数据库类型定义示例如下:

CREATE TABLE [book](
 [id] INTEGER NOT NULL CONSTRAINT [PK_book] PRIMARY KEY AUTOINCREMENT,
 [book_name] TEXT(24) NULL COLLATE NOCASE,
 [book_comment] TEXT NOT NULL COLLATE NOCASE
 [publish_date] DATETIME NOT NULL,
 [price] DOUBLE NULL,
 [num] INTEGER NULL DEFAULT 0
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、常见数据库语法差异比较

(1)SQL通配符*和%比较

在数据库搜索数据时,SQL通配符可以替代一个或多个字符;
注释:序号为1、2比较常用,且SQL通配符必须与 LIKE 运算符一起使用。

序号通配符含义AccessSQLServerSQLite
1*替代一个或多个字符××
2%替代一个或多个字符×
3_仅替代一个字符×
4[X]字符列中的任何单一字符,其中为任意字符××
5[^X]不在字符列中的任何单一字符,其中为任意字符××

匹配开头是"替代"的数据,示例如下:

SELECT * FROM A WHERE A.Comment LIKE '替代*';
SELECT * FROM A WHERE A.Comment LIKE '替代%';
  • 1
  • 2

匹配开头是"替代",结尾为任意字符的三个字符的数据,示例如下:
如“替代品”,而“替代商品”不匹配;

SELECT * FROM A WHERE A.Comment LIKE '替代_';
  • 1

匹配开头是"替"或者“代”的数据,示例如下:
如“替换身份”、“代劳吃饭”等等


SELECT * FROM A WHERE A.Comment LIKE '[替代]%';
  • 1
  • 2

匹配开头不是"替"或者“代”的数据,示例如下:
如“我替换你”、“你代劳我”等等

SELECT * FROM A WHERE A.Comment LIKE '[^替代]%';
  • 1

匹配结尾是"a"或者“b”的数据,示例如下:
如“qqa”、“qqb”等等

SELECT * FROM A WHERE A.Comment LIKE '%[ab]';
  • 1

匹配结尾不是"a"或者“b”的数据,示例如下:
如“qqac”、“qqbc”等等

SELECT * FROM A WHERE A.Comment LIKE '%[^ab]';
  • 1

(2)JOIN比较

JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

序号类型AccessSQLServerSQLite
1LEFT JOIN
2RIGHT JOIN×
3INNER JOIN

(2-1)【Access/SQLServer/SQLite】之LEFT JOIN示例:

LEFT JOIN 关键字会从左表 (A) 那里返回所有的行,即使在右表 (B) 中没有匹配的行。在这里插入图片描述

SELECT * FROM A LEFT JOIN comment ON A.id = B.iid;
  • 1

(2-2)【Access/SQLServer】之RIGHT JOIN示例:

RIGHT JOIN关键字会从表 (B) 那里返回所有的行,即使在左表 (A) 中没有匹配的行。在这里插入图片描述

SELECT * FROM A RIGHT JOIN B ON A.id = B.iid;

--SQLite没有RIGHT JOIN,需要转换成LEFT JOIN。
SELECT * FROM B LEFT JOIN A ON B.Iid = A.id;
  • 1
  • 2
  • 3
  • 4

(2-3)【Access/SQLServer/SQLite】之 INNER JOIN示例:

INNER JOIN 关键字会返回AB两个表交集数据行。
在这里插入图片描述

SELECT * FROM A INNER JOIN B ON A.id = B.iid;
  • 1

(3)查询中的+和&的比较

序号操作符AccessSQLServerSQLite
1+数值类型相加,字符类型拼接数值类型相加,字符类型拼接数值相加(字符类型强转为数值,不成功则为0)
2||不支持不支持字符拼接

【Access/SQLServer】示例如下:

select 1+1;       --结果为:2
select 'a'+1;     --结果为:在将 varchar 值 'a' 转换成数据类型 int 时失败。
select '1'+1      --结果为:2
select 'a'+'b';   --结果为:ab
select 'a'||'b';  --结果为:“|”附近有语法错误。
  • 1
  • 2
  • 3
  • 4
  • 5

【SQLite】示例如下:

select 1+1;       --结果为:2
select 'a'+1;     --结果为:1(分析,‘a’强制转为0,0+1=1)
select '1'+1      --结果为:2
select 'a'+'b';   --结果为:0(分析,‘a’、‘b’强制转为0,0+0=0)
select 'a'||'b';  --结果为:“|”附近有语法错误。
  • 1
  • 2
  • 3
  • 4
  • 5

(4)排序查询的比较

序号类型AccessSQLServerSQLite
1TOP×
2LIMIT××

【Access/SQLServer】示例如下:

--(1)从班级表class中,找出第1条数据
SELECT TOP 1 * FROM class;

--(2)从班级表class中,找出前3条数据
SELECT TOP 3 * FROM class;

--(3)从班级表class中,找出前50%的数据
SELECT TOP 50 PERCENT * FROM  ac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

【SQLite】语法:
LIMIT [offset_index=0,],numLIMIT num OFFSET offset_index
其中,num为多少行,offset_index为偏移位数(从0开始计数),示例如下:

--(1)从班级表class中,找出第1条数据
SELECT * FROM class LIMIT 1;

--(2)从班级表class中,找到偏移量为5(即4+1)后面的3条数据;
-- 或者说,从第5条(即4+1)数据开始,向后取3条数据
SELECT * FROM class LIMIT 4,3;

--(3)从班级表class中,找到偏移量为5(即4+1)后面的3条数据;
-- 或者说,从第5条(即4+1)数据开始,向后取3条数据
SELECT * FROM class LIMIT 3 OFFSET 4;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(5)复制表及其数据的比较

【Access、SQLServer】示例:

-- (1)复制表结构+数据
SELECT * INTO newTable FROM oldTable;
-- (2)仅仅复制表结构
SELECT * INTO newTable FROM oldTable WHERE 1=0;
  • 1
  • 2
  • 3
  • 4

【SQLite】示例:

-- (1)复制表结构+数据
CREATE TABLE newTable AS SELECT * FROM oldTable;
-- (2)仅仅复制表结构
SELECT * INTO newTable FROM oldTable WHERE 1=0;

  • 1
  • 2
  • 3
  • 4
  • 5

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/112262317

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/681643
推荐阅读
相关标签
  

闽ICP备14008679号