-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchap2.qmd
124 lines (93 loc) · 2.11 KB
/
chap2.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
---
title: "必知必会第2课:检索数据"
author: "黄天元"
format: html
editor: visual
---
## 数据库的连接
```{r}
library(pacman)
p_load(tidyverse,DBI,RSQLite)
mydb = dbConnect(RSQLite::SQLite(), "data/TYSQL.sqlite")
```
## 基于SQL的数据操作
```{r}
# 2.2
dbGetQuery(mydb,"SELECT prod_name FROM Products;")
# 2.3
dbGetQuery(mydb,"SELECT prod_id, prod_name, prod_price
FROM Products;")
# 2.4
dbGetQuery(mydb,"SELECT *
FROM Products;")
# 2.5
dbGetQuery(mydb,"SELECT vend_id
FROM Products;")
dbGetQuery(mydb,"SELECT DISTINCT vend_id
FROM Products;")
# 2.6
dbGetQuery(mydb,"SELECT prod_name
FROM Products
LIMIT 5;")
dbGetQuery(mydb,"SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;")
# 2.7
dbGetQuery(mydb,"SELECT prod_name -- 这是一条注释
FROM Products;")
```
## 基于tidyverse的数据操作
```{r}
mydb_products = tbl(mydb,"Products")
# 2.2
mydb_products %>%
select(prod_name)
# 2.3
mydb_products %>%
select(prod_id, prod_name, prod_price)
# 2.4
mydb_products
# 2.5
mydb_products %>%
select(vend_id)
mydb_products %>%
distinct(vend_id)
# 2.6
mydb_products %>%
select(prod_name) %>%
head(5)
mydb_products %>%
select(prod_name) %>%
mutate(row_id = row_number()) %>%
filter(row_id > 5) %>%
head(5)
# 2.7
mydb_products %>%
select(prod_name) # 这是一条注释
```
## 转译机制
可以使用`show_query`函数来调查tidyverse包是如何把相关代码转译为SQL语句的。
```{r}
mydb_products %>%
select(prod_name) %>%
show_query()
```
## 练习
1. 使用转译机制,看看R语言把相关代码都转译成什么SQL语句。
2. 请使用SQL和R两种方式,解决课后的挑战题。
```{r}
#| echo: false
#| eval: false
## SQL
# 参考:https://forta.com/books/0135182794/challenges/
## R
# 1
tbl(mydb,"Customers") %>%
select(cust_id)
# 2
tbl(mydb,"OrderItems") %>%
distinct(prod_id)
# 3
tbl(mydb,"Customers") %>%
select(cust_id) # 在最左侧放入井号可以注释掉,也可以只运行上面一行
```