1.什么是SQLite
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
2.为何选择SQLite
选择SQLite的原因很简单,因为它:
- 开源
- 轻量级
- 安装配置简单
- 不存在繁琐的用户管理
- 兼容标准的SQL语句操作
这几个特性对一个SQL新手来说,是最好不过的。
3.RSQLite入门
基本概念
- Table:观测的集合
- Field:类似于R中data.frame的column names(列名)
- Column:变量
- Row:观测
- data types:
安装配置
install.packages("RSQLite")
建立一个连接对象
library(RSQLite)
db<- dbConnect(SQLite(), dbname = 'Test.sqlite')
这样,一个连接数据库的对象就建立起来了。不过,严格来说,这个时候,数据库还未建立起来。
建立一个表格
首先,使用CREATE语句建立一个表格。
#当已经存在该table,把它删除,否则后面建立table时会报错
dbSendQuery(conn = db,
"drop table if exists MOBILE_PHONE")
## <SQLiteResult>
dbSendQuery(conn = db,
"CREATE TABLE MOBILE_PHONE
(Product_ID INTEGER,
product_Name TEXT,
price REAL,
Brand_name TEXT)")
## <SQLiteResult>
导入数据
向表格添加数据——手动添加
向表格添加数据可以使用INSERT语句。
dbSendQuery(conn = db,
"INSERT INTO MOBILE_PHONE
VALUES(1,'iPhone 6s',6000,'Apple')")
## <SQLiteResult>
dbSendQuery(conn = db,
"INSERT INTO MOBILE_PHONE
VALUES(2,'华为P8',3000,'华为')")
## <SQLiteResult>
dbSendQuery(conn = db,
"INSERT INTO MOBILE_PHONE
VALUES(3,'三星 Galaxy S6',5000,'三星')")
## <SQLiteResult>
查询结果
dbListTables(db)
## [1] "MOBILE_PHONE"
dbListFields(db,"MOBILE_PHONE")
## [1] "Product_ID" "product_Name" "price" "Brand_name"
head(dbReadTable(db,"MOBILE_PHONE"))
向表格添加数据——导入外部数据(csv,excel,data.frame)
以ISLR包中的Hitters数据集为例,导入该数据集。该数据集描述了美国1986年和1987年的棒球运动员相关数据。
library(ISLR)
str(Hitters)
## 'data.frame': 322 obs. of 20 variables:
## $ AtBat : int 293 315 479 496 321 594 185 298 323 401 ...
## $ Hits : int 66 81 130 141 87 169 37 73 81 92 ...
## $ HmRun : int 1 7 18 20 10 4 1 0 6 17 ...
## $ Runs : int 30 24 66 65 39 74 23 24 26 49 ...
## $ RBI : int 29 38 72 78 42 51 8 24 32 66 ...
## $ Walks : int 14 39 76 37 30 35 21 7 8 65 ...
## $ Years : int 1 14 3 11 2 11 2 3 2 13 ...
## $ CAtBat : int 293 3449 1624 5628 396 4408 214 509 341 5206 ...
## $ CHits : int 66 835 457 1575 101 1133 42 108 86 1332 ...
## $ CHmRun : int 1 69 63 225 12 19 1 0 6 253 ...
## $ CRuns : int 30 321 224 828 48 501 30 41 32 784 ...
## $ CRBI : int 29 414 266 838 46 336 9 37 34 890 ...
## $ CWalks : int 14 375 263 354 33 194 24 12 8 866 ...
## $ League : Factor w/ 2 levels "A","N": 1 2 1 2 2 1 2 1 2 1 ...
## $ Division : Factor w/ 2 levels "E","W": 1 2 2 1 1 2 1 2 2 1 ...
## $ PutOuts : int 446 632 880 200 805 282 76 121 143 0 ...
## $ Assists : int 33 43 82 11 40 421 127 283 290 0 ...
## $ Errors : int 20 10 14 3 4 25 7 9 19 0 ...
## $ Salary : num NA 475 480 500 91.5 750 70 100 75 1100 ...
## $ NewLeague: Factor w/ 2 levels "A","N": 1 2 1 2 2 1 1 1 2 1 ...
#建立连接
db.hitters<-dbConnect(SQLite(),dbname = "Hitters.sqlite")
#写入数据
dbWriteTable(conn = db.hitters,name = "Hitters",value = Hitters,overwrite = T,row.names = FALSE)
tmp = dbReadTable(db.hitters,"Hitters")
head(tmp)
建立基本查询
使用SELECT语句建立一个关于行的查询。
dbGetQuery(db.hitters,"select * from Hitters where Salary >= 1000")[1:5,]
使用SELECT语句建立一个关于列的查询。
dbGetQuery(db.hitters,"select League,Hits,Salary from Hitters where League = 'A'")[1:5,]
其他更复杂的查询
可以结合使用SQL逻辑操作符(AND,OR,NOT等),以及行,列选取等建立其他更复杂的查询操作。
dbGetQuery(db.hitters,"select League,Hits,Salary from Hitters where League = 'A' AND Salary >= 1000")[1:5,]
4.参考文献