课程来源:https://classroom.udacity.com/courses/ud198
(Entry relationship diagram) 实体关系图
这些图可帮助您可视化所分析的数据,包括:
(Structured Query Language)
企业使用数据库的原因:
1 确保数据的完整性
2 可以快速访问数据
3 数据易于分享
SQL的关键是理解语句。一些声明包括:
每个查询中使用:SELECT … FROM…。
通用的做法是将表名和列名保留小写的同时,大写命令字.这样可以使查询更易于阅读,而在编写更复杂的查询时,查询将变得更加重要.
表名和变量名中通常使用下划线并在列名称中避免空格
SQL查询会忽略空格,因此可以根据需要在代码之间添加尽可能多的空格和空白行,查询结果是相同的.例如:
SELECT account_id
FROM orders
最好的做法是在每个语句的末尾加上分号,如果环境允许,也可以一次运行多个查询。
LIMIT可以让你看到的一个表的前几行语句。这比加载整个数据集要快得多。
LIMIT命令始终是一个查询的最后一部分, 例如:
SELECT *
FROM orders
LIMIT 10;
ORDER BY语句允许我们对我们造成任何列使用的数据进行排序
使用ORDER BY只会对查询结果产生临时影响
DESC可以在ORDER BY语句的列之后添加按降序排序,因为默认情况是按升序排序(ASC)。
降序(descending)
使用ORDER BY要注意排序多个字段时的顺序问题.例如, 以下两个查询
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY account_id, total_amt_usd DESC;
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY total_amt_usd DESC, account_id;
在查询1中,将每个帐户ID的所有订单分组在一起,然后在每个分组中,订单的显示顺序为最大订单量到最小订单量。在查询2中,由于首先按总金额排序,因此订单从最大到最小显示,而不管它们来自哪个account_id。然后,将它们按照account_id排序。
可以将WHERE命令视为过滤数据
包括 >, < , >=, <=, =, != 6种
WHERE语句还可以用非数字数据使用。我们可以在此处使用=and !=运算符。这里需要确保对文本数据使用单引号
创建由现有列组合而成的新列称为派生列。通常,您想使用AS关键字为新列指定名称或“别名” 。
此派生列及其别名通常只是临时的,仅在查询期间存在。例如:
SELECT id, (standard_amt_usd/total_amt_usd)*100 AS std_percent, total_amt_usd
FROM orders
LIMIT 10;
在这里,我们将标准纸面美元金额除以总订单量,以找到该订单的标准纸面百分比,并使用AS关键字将此新列命名为“ std_percent
可以使用的算术运算符为: +, -, *, / 4种
如果是除法, 注意数据中的至少一个值在您的公式中创建了零除的情况.
通配符(wildcard)
% 代表一个或任意数量的字符
使用LIKE需要区分大小写
例如: name字段中以C开始的记录
SELECT name
FROM accounts
WHERE name LIKE 'C%';
name字段包含one的记录
SELECT name
FROM accounts
WHERE name LIKE '%one%';
name字段以s结尾的记录
SELECT name
FROM accounts
WHERE name LIKE '%s';
可以检查同一查询中一个列值中对应的一个或多个数据.
文本可以使用单引号或双引号, 如果文本中带有``, 则可能需要使用双引号
例如:
SELECT *
FROM web_events
WHERE channel IN ('organic', 'adwords');
WHERE column >= 6 AND column <= 10
等价
WHERE column BETWEEN 6 AND 10
BETWEEN 包含两边的端点值
注意使用BETWEEN获取日期,!虽然BETWEEN通常包括端点,但它假设日期时间为00:00:00(即午夜)例如:
获取2016年的数据,右侧端点设置为“ 2017-01-01”
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;
OR经常可能需要使用括号来确保要执行的逻辑已正确执行
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%’;
Statement | How to Use It | Other Details |
---|---|---|
SELECT | SELECT Col1, Col2, … | Provide the columns you want |
FROM | FROM Table | Provide the table where the columns exist |
LIMIT | LIMIT 10 | Limits based number of rows returned |
ORDER BY | ORDER BY Col | Orders table based on the column. Used with DESC. |
WHERE | WHERE Col > 5 | A conditional statement to filter your results |
LIKE | WHERE Col LIKE ‘%me%’ | Only pulls rows where column has ‘me’ within the text |
IN | WHERE Col IN (‘Y’, ‘N’) | A filter for only rows with column of ‘Y’ or ‘N’ |
NOT | WHERE Col NOT IN (‘Y’, ‘N’) | NOT is frequently used with LIKE and IN |
AND | WHERE Col1 > 5 AND Col2 < 3 | Filter rows where two or more conditions must be true |
OR | WHERE Col1 > 5 OR Col2 < 3 | Filter rows where at least one condition must be true |
BETWEEN | WHERE Col BETWEEN 3 AND 5 | Often easier syntax than using an AND |
一个总体的例子:
SELECT col1, col2
FROM table1
WHERE col3 > 5 AND col4 LIKE '%os%'ORDER BY col5
LIMIT 10;