【用于数据分析的 SQL(一)】【基本 SQL】

一、 前言

了解单个表的SQL基础知识,学习不同的方式筛选表的关键命令。

二、 实体关系图

实体关系图(ERD) 是查看数据库中数据的常用方法。以下是我们将从羊皮纸和波西使用的数据库的 ERD。这些图表可帮助您可视化要分析的数据,包括:

1.表的名称。
2.每个表中的列。
3.表协同工作的方式。

在这里插入图片描述

使用上面的图像和您的 ERD 新知识,将每个图像与适当的 ERD 相匹配。
在这里插入图片描述

三、 SELECT和FROM

SQL 命令,该命令将用于您编写的每个查询:SELECT…FROM…;

1.SELECT指示要为哪个列提供数据。
2.From指定要从哪个表选择列。请注意,此表中需要存在列。
如果要从表中的所有列中提供数据,请使用"*",如此:

请注意,使用 SELECT不会创建数据库中包含这些列的新表,它只是提供作为此命令的结果或输出的数据。

即使 SQL 不区分大小写,但通常和最佳做法是大写所有 SQL 命令,并保留查询中其他所有内容小写。

四、 LIMIT

SELECT(选择列)和FROM(选择表)语句。当您只想查看表的后几行时,LIMIT语句很有用。与加载整个数据集时,加载速度要快得多。

限制命令始终是查询的最后一部分。显示订单表的前 10 行以及所有列的示例

SELECT * FROM orders LIMIT 10;

五、 ORDER BY

ORDER BY语句允许我们使用任何列中的数据对结果进行排序。如果您熟悉 Excel 或 Google 表格,则使用ORDER BY类似于使用列对工作表进行排序。但是,一个关键区别是,在 SQL 查询中使用 ORDER BY 只会对该查询的结果产生临时影响,这与在 Excel 或工作表中按列对工作表进行排序不同。

ORDER BY语句始终在 SELECT 和FROM 语句之后查询中,但在LIMIT 语句之前。如果使用 LIMIT 语句,它将始终显示在最后。

可以在ORDER BY语句中的列之后添加以按降序排序,因为默认值是按升序排序。

1.编写查询以返回订单表中的 10 个最早订单。包括 、 和 。id occurred_at total_amt_usd

SELECT id, occurred_at, total_amt_usd 
FROM orders 
ORDER BY occurred_at
LIMIT 10;

2.编写查询以返回最大前5个订单。包括 、 和 。total_amt_usd id account_id total_amt_usd

SELECT id, account_id, total_amt_usd 
FROM orders 
ORDER BY
total_amt_usd DESC  
LIMIT 5;

3.编写一个查询,显示所有订单的订单 ID、科目 ID 和总美元金额,首先按科目 ID(按升序)排序,然后按总美元金额(降序)排序。 id, account_id, total_amt_usd

SELECT  id, account_id, total_amt_usd 
FROM orders 
ORDER BY account_id,toal_amt_usd DESC;

4.编写一个查询,该查询再次显示每个订单的订单 ID、科目 ID 和总美元金额,但这次首先按总美元金额(按降序排序),然后按科目 ID(按升序)排序。

SELECT id, account_id, total_amt_usd 
FROM orders 
ORDER BY total_amt_usd DESC, account_id;

六、 WHERE

使用WHERE语句,我们可以根据必须满足的条件显示表的子集。您还可以将WHERE 命令视为筛选数据。

WHERE 语句中使用的常用符号包括:
1.>(大于)
2.<(小于)
3.>=(大于或等于)
4.<=(小于或等于)
5.=(等于)
6.!=(不等于)

1.从订单表中拉出前 5 行和所有列,这些行和所有列的美元金额大于或等于 1000。gloss_amt_usd

SELECT * 
FROM orders 
WHERE gloss_amt_usd >= 1000 
LIMIT 5;

2.从小于 500 的订单表中拉出前10 行和所有列。total_amt_usd

SELECT * 
FROM orders 
WHERE total_amt_usd < 500 
LIMIT 10;

七、 派生列

创建现有列组合的新列称为派生列(或"计算"或"计算"列)。通常,您希望使用 AS 关键字为新列指定名称或"别名"。

此派生列及其别名通常只是临时的,仅在查询期间存在。下次运行查询并访问此表时,新列将不存在。

如果使用数学表达式从现有列派生新列,则这些熟悉的数学运算符将非常有用:
*(乘法)
+(添加)
-(减法)
/(部门)

八、 算术运算符

创建除以的列,以查找每个订单的标准纸张的单位价格。将结果限制为前 10 个订单,并包括和字段。standard_amt_usd standard_qty id account_id

SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders LIMIT 10;

九、 逻辑运算符

LIKE 执行类似于使用WHERE 和的操作,但对于您可能不知道要查找的确切操作
IN 执行类似于使用WHERE和 的操作,但对于多个条件
NOT 与 IN和 Like 一起使用,以选择所有不确定或不确定的行
AND & BETWEEN 合并所有组合条件必须为 true 的操作
OR 合并至少一个组合条件必须为 true 的操作

1.名称以"C"为起点的所有公司。

SELECT name 
FROM accounts 
WHERE name 
LIKE 'C%';

2.名称包含名称某处字符串"one"的所有公司。

SELECT name 
FROM accounts 
WHERE name 
LIKE '%one%';

3.名称以"s"结束的所有公司。

SELECT name 
FROM accounts 
WHERE name 
LIKE '%s';

4.使用帐户表查找帐户 ,以及沃尔玛、Target 和 Nordstrom 的帐户。
name primary_poc sales_rep_id

SELECT name, primary_poc, sales_rep_id
FROM accounts
WHERE name IN ('Walmart', 'Target', 'Nordstrom');

5.使用帐户表查找除沃尔玛、Target 和 Nordstrom 以外的所有商店的帐户名称、主 poc 和销售代表 ID。

SELECT name, primary_poc, sales_rep_id
FROM accounts
WHERE name NOT IN ('Walmart', 'Target', 'Nordstrom');

6.使用帐户表,查找名称不以"C"和"s"结束的所有公司。

SELECT name
FROM accounts
WHERE name NOT LIKE 'C%' AND name LIKE '%s';

7.在 SQL 中使用"之间"运算符时,结果是否包括终结点的值?通过编写一个查询来找出这个重要问题的答案,该查询显示所有订单的订单日期和数据,其中gloss_qty介于 24 和 29 之间。然后查看输出,查看"之间"运算符是否包含开始值和结束值。gloss_qty

SELECT occurred_at, gloss_qty 
FROM orders
WHERE gloss_qty BETWEEN 24 AND 29;

SQL 中的介于一起的运算符是包容性的;即,包括终结点值。
因此,此查询中的"之间"语句等效于写入了"gloss_qty >= 24 和 gloss_qty <= 29"

8.查找以"C"或"W"为起点的所有公司名称,主要联系人包含"ana"或"Ana",但它不包含"eana"

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%');

下一篇:【用于数据分析的 SQL(二)】【SQL JOINS】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值