Parch & Posey 数据库
实体关系图
实体关系图 (ERD) 是查看数据库中数据的常用方式。下面是我们将用于 Parch & Posey 数据库的 ERD。这些图可帮助你可视化正在分析的数据,包括:
- 表的名称。
- 每个表中的列。
- 表配合工作的方式。
你可以将下面的每个框看作一个电子表格。
注意事项
在 Parch & Posey 数据库中,共有五个表(基本上是 5 个电子表格):
- web_events
- accounts
- orders
- sales_reps
- region
你可以将每个表视为一个单独的电子表格。然后将每个电子表格中的列放在表名下面。例如,region 表有两列: id
和 name
,而 web_events 表有四列。
将这些表格连接在一起的 "crow's foot" 表示法显示了一个表中的列与另一个表中的列之间的关联。
关于 SQL 数据库中所存储数据的几个要点:
-
数据库中的数据存储在类似于 Excel 电子表格的表中。
大多数情况下,可以将数据库视为一堆 Excel 电子表格。每个电子表格都有行和列。每行保存有关交易、个人、公司等的数据。而每列所保存的数据与你关心的某一特定行相关,如名称、位置、唯一身份等。
-
同一列中的所有数据必须符合数据类型。
将整个列认为是定量离散的或是某种字符串。这说明如果特定列中有一行字符串,那么整个列可能会更改为文本数据类型。 如果想使用此列进行数学计算,这可能会非常糟糕!
-
列类型一致是快速使用数据库的主要原因之一。
数据库通常会存储海量数据。因此,知道这些列都是相同类型的数据意味着可快速从数据库获取数据。
数据库类型
SQL 数据库
数据库的类型有很多,都用于不同的用途。在本课中,我们将使用 Postgres,这是一个流行的开源数据库,具有非常完整的分析函数库。
一些最受欢迎的数据库包括::
- MySQL
- Access
- Oracle
- Microsoft SQL Server
- Postgres
你也可以在其他编程框架中编写 SQL,如 Python、Scala 和 HaDoop。
SQL 的关键是理解语句。这几个语句包括:
- CREATE TABLE 是一个在数据库中创建新表的语句。
- DROP TABLE 是删除数据库中表的语句。
- SELECT 读取并显示数据。我们将这称为查询。
LIMIT 命令始终是查询的最后一部分。下面的例子仅显示 orders 表的前 10 行和所有列:
SELECT *
FROM orders
LIMIT 10;
SELECT occurred_at, account_id, channel
FROM web_events
LIMIT 15;
ORDER BY 语句可使我们按任意行排序表。如果熟悉 Excel,这与使用过滤器进行排序相似。
ORDER BY 语句始终在 SELECT 和 FROM 语句之后,但位于 LIMIT 语句之前。 学习其他命令时,这些语句的顺序将更为重要。 如果使用 LIMIT 语句,它将始终显示在最后。
SELECT id,occurred_at,total_amt_usd
FROM orders
order by total_amt_usd DESC
limit 5
DESC表示逆序
order by 按照后面的列头排序
limit 显示限制的个数
查询orders表格,按照订单日期的从新到旧降序排列,同时每个日期下的订单按照total_amt_usd
降序排列,显示前5行。
SELECT *
FROM orders
ORDER BY occurred_at DESC, total_amt_usd DESC
LIMIT 5;
WHERE 语句中使用的常用符号包括:
>
(大于)
<
(小于)
>=
(大于或等于)
<=
(小于或等于)
=
(等于)
!=
(不等于)
通常将 WHERE 与非数字数据字段一起使用时,我们会使用 LIKE、NOT 或 IN 运算符。
SELECT name, website, primary_poc
FROM accounts
WHERE name = 'Exxon Mobil';
name | website | primary_poc |
---|---|---|
Exxon Mobil | www.exxonmobil.com | Sung Shields |
SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders
LIMIT 10;
SELECT id, account_id,
poster_amt_usd/(standard_amt_usd + gloss_amt_usd + poster_amt_usd) AS post_per
FROM orders;
逻辑运算符简介
- LIKE
可用于进行类似于使用 WHERE 和=
的运算,但是这用于你可能 不 知道自己想准确查找哪些内容的情况。
- IN
用于执行类似于使用 WHERE 和=
的运算,但用于多个条件的情况。
- NOT
这与 IN 和 LIKE 一起使用,用于选择 NOT LIKE 或 NOT IN 某个条件的所有行。
- AND & BETWEEN
可用于组合所有组合条件必须为真的运算。
- OR
可用于组合至少一个组合条件必须为真的运算。
SELECT name
FROM accounts
WHERE name LIKE 'C%';
SELECT name
FROM accounts
WHERE name LIKE '%one%';
SELECT name,primary_poc, sales_rep_id
FROM accounts
WHERE name IN ('Walmart','Target','Nordstrom');
SELECT *
FROM web_events
WHERE channel IN ('organic', 'adwords');
SELECT name
FROM accounts
WHERE name NOT LIKE 'C%';
SELECT name, primary_poc, sales_rep_id
FROM accounts
WHERE name NOT IN ('Walmart', 'Target', 'Nordstrom');
WHERE column >= 6 AND column <= 10
WHERE column BETWEEN 6 AND 10
上面两个相等
SELECT *
FROM orders
WHERE standard_qty >1000
AND poster_qty =0
AND gloss_qty =0;
SELECT *
FROM accounts
WHERE name != 'C%' AND name ='%s' ;
SELECT *
FROM web_events
WHERE channel IN ('organic', 'adwords') AND occurred_at BETWEEN '2016-01-01' AND '2017-01-01'
ORDER BY occurred_at DESC;
SELECT *
FROM orders
WHERE standard_qty = 0 AND (gloss_qty > 1000 OR poster_qty > 1000);
SELECT *
FROM accounts
WHERE (name LIKE 'C%' OR name LIKE 'W%')
AND ((primary_poc LIKE '%ana%' OR primary_poc LIKE '%Ana%')
AND primary_poc NOT LIKE '%eana%');
语句 | 用法 | 其他详情 |
---|---|---|
SELECT | SELECT Col1, Col2, ... | 提供你想要的列 |
FROM | FROM Table | 提供列存在的表 |
LIMIT | LIMIT 10 | 限制返回的行数 |
ORDER BY | ORDER BY Col | 根据列对表排序。与 DESC 一起使用。 |
WHERE | WHERE Col > 5 | 用于过滤结果的条件语句 |
LIKE | WHERE Col LIKE '%me% | 仅拉取文本中包含 'me' 的列 |
IN | WHERE Col IN ('Y', 'N') | 仅过滤包含 'Y' 或 'N' 列的行 |
NOT | WHERE Col NOT IN ('Y', 'N') | NOT 经常与 LIKE 和 IN 一起使用 |
AND | WHERE Col1 > 5 AND Col2 < 3 | 过滤两个或多个条件必须为真的行 |
OR | WHERE Col1 > 5 OR Col2 < 3 | 过滤至少一个条件必须为真的行 |
BETWEEN | WHERE Col BETWEEN 3 AND 5 | 通常比使用 AND 的语法简单 |