原文:
www.kdnuggets.com/2022/10/10-essential-sql-commands-data-science.html
图片由作者提供
这是学习 SQL 命令的新一天,这些命令将帮助你在数据科学职业中。你将使用 SQL 查询来提取、保存和修改数据库以满足你的需求。
1. 谷歌网络安全证书 - 快速进入网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT
那么,是什么阻止你学习提取数据和在 SQL 数据库上执行快速分析的最常用命令呢?
在这篇文章中,我们将通过使用在线 SQL 编辑器学习基本 SQL 命令及代码示例。它允许用户在线运行查询而不会遇到问题。该平台提供了一个编辑器和三个用于练习的 SQL 表。数据库包括三个表:Customers、Orders和Shippings。
-
选择
-
唯一
-
条件
-
LIKE
-
按顺序排列
-
作为
-
连接
-
UNION
-
按组
-
CASE
SELECT 命令允许我们从表中提取选择的或所有列。这是 SQL 查询的基本构建块。
在我们的例子中,我们使用*
从Customer表中显示所有列。
SELECT *
FROM Customers;
客户编号 | 名 | 姓 | 年龄 | 国家 |
---|---|---|---|---|
1 | John | Doe | 31 | 美国 |
2 | Robert | Luna | 22 | 美国 |
3 | David | Robinson | 22 | 英国 |
4 | John | Reinhardt | 25 | 英国 |
5 | Betty | Doe | 28 | 阿联酋 |
在第二个示例中,我们只展示了Customers表中的三列。你可以输入用逗号“,”分隔的列名,并以FROM命令和表名结束。
SELECT first_name,
last_name,
country
FROM Customers;
名 | 姓 | 国家 |
---|---|---|
John | Doe | 美国 |
Robert | Luna | 美国 |
David | Robinson | 英国 |
John | Reinhardt | 英国 |
Betty | Doe | 阿联酋 |
DISTINCT 用于显示列中的唯一值。它现在只显示一个 John,而不是两个 John。
SELECT DISTINCT first_name
FROM Customers;
名 |
---|
John |
Robert |
David |
Betty |
WHERE 命令用于条件和过滤。我们将过滤表以显示年龄大于 25 的客户。除了大于,你还可以使用小于**<、小于或等于<=、大于或等于>=和等于=**。
SELECT *
FROM Customers
WHERE age > 25;
结果显示我们只有两个年龄大于 25 的客户。
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
1 | John | Doe | 31 | 美国 |
5 | Betty | Doe | 28 | 阿联酋 |
你还可以使用AND、OR、BETWEEN和IN来组合两个或多个条件。在我们的案例中,我们正在寻找年龄大于 25 的美国客户。
SELECT *
FROM Customers
WHERE age > 25
AND country == 'USA';
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
1 | John | Doe | 31 | 美国 |
LIKE 命令用于字符串过滤。你提供表达式,它将用来查找匹配该表达式的值。例如,如果你想要所有以 J 开头的名字,可以使用“J%”。要查找以 J 结尾的名字,我们将使用“%J”。这很简单。
SELECT *
FROM Customers
WHERE first_name LIKE "J%";
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
1 | John | Doe | 31 | 美国 |
4 | John | Reinhardt | 25 | 英国 |
尝试查找first_name以“J”开头且last_name以“e”结尾的客户。你可以通过阅读 SQL LIKE 操作符示例教程来了解更多创建表达式的其他方法。
SELECT *
FROM Customers
WHERE first_name LIKE "J%"
OR last_name LIKE "%e";
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
1 | John | Doe | 31 | 美国 |
4 | John | Reinhardt | 25 | 英国 |
5 | Betty | Doe | 28 | 阿联酋 |
ORDER BY 用于对查询结果进行排序。我们使用 ORDER BY 对结果进行基于first_name的升序排序。
SELECT *
FROM Customers
ORDER BY first_name;
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
5 | Betty | Doe | 28 | 阿联酋 |
3 | David | Robinson | 22 | 英国 |
1 | John | Doe | 31 | 美国 |
4 | John | Reinhardt | 25 | 英国 |
2 | Robert | Luna | 22 | 美国 |
你可以尝试使用DESC在末尾对结果进行降序排序。
SELECT *
FROM Customers
ORDER BY first_name DESC;
customer_id | first_name | last_name | age | country |
---|---|---|---|---|
2 | Robert | Luna | 22 | 美国 |
1 | John | Doe | 31 | 美国 |
4 | John | Reinhardt | 25 | 英国 |
3 | David | Robinson | 22 | 英国 |
5 | Betty | Doe | 28 | 阿联酋 |
AS 命令用于创建别名或重命名列名。在下面的示例中,我们将“customer_id”重命名为“ID”,将“first_name”重命名为“Name”。
SELECT customer_id AS ID,
first_name AS Name
FROM Customers;
ID | Name |
---|---|
1 | John |
2 | Robert |
3 | David |
4 | John |
5 | Betty |
你将联接多个表进行数据分析,这非常简单。只需在第一个表后使用LEFT JOIN、INNER JOIN、RIGHT JOIN或FULL JOIN。写下第二个表的名称,然后跟上ON来在特定列上联接表。在我们的案例中,两个表都有一个名为customer_id的公共列。我们将使用“==”符号联接这两个表的列名。
SELECT first_name,
item,
amount
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id == Orders.customer_id
first_name | item | amount |
---|---|---|
John | Keyboard | 400 |
Robert | Mousepad | 250 |
David | Monitor | 12000 |
John | Keyboard | 400 |
John | Mouse | 300 |
Betty |
UNION 用于将两个查询结果一起显示。在这个例子中,我们将Customer表中的“first_name”显示为“Name_item”,并将Orders表中的“item”一起显示。
注意: 确保两个查询显示相同数量的列。
SELECT first_name AS Name_item
FROM Customers
UNION
SELECT item
FROM Orders
如你所见,结果包含了Customers表中的 first_name 和 Orders 表中的 item。列按 A-Z 排序。
Name_item |
---|
Betty |
David |
John |
Keyboard |
Monitor |
Mouse |
Mousepad |
Robert |
GROUP BY 命令在数据分析任务中经常使用。你可以对任意列进行分组,从而更好地理解数据分布。
GROUP BY 需要聚合函数:
-
COUNT: 总行数
-
SUM: 所有值的总和
-
MAX: 最大值
-
MIN: 最小值
-
AVG: 平均值
你可以使用聚合函数和 GROUP BY 将列中的值合并为类别。在下面的示例中,我们将对金额进行 SUM 聚合,并按 item 名称进行分组。
SELECT item,
SUM(amount)
FROM Orders
GROUP BY item
单个键盘的价格是 400,我们售出了 2 个键盘。它将其加总显示为 800。我知道这是一个简单的例子,但这是一个开始。
item | SUM(amount) |
---|---|
Keyboard | 800 |
Monitor | 12000 |
Mouse | 300 |
Mousepad | 250 |
CASE 命令类似于 Python 或其他语言中的if-else 语句。我们将用它来根据条件创建类别。
如果金额小于 1000,返回 ‘Low’,否则返回 ‘High’。
该命令以CASE开头,以END和列名结尾。
If 被替换为 WHEN,else 被替换为 ELSE。
SELECT item,
amount,
CASE
WHEN amount < 1000 THEN 'Low'
ELSE 'High'
END AS Priority
FROM Orders;
item | amount | Priority |
---|---|---|
Keyboard | 400 | Low |
Mouse | 300 | Low |
Monitor | 12000 | High |
Keyboard | 400 | Low |
Mousepad | 250 | Low |
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学专业人士,热衷于构建机器学习模型。目前,他专注于内容创作和撰写关于机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是使用图神经网络为那些受精神疾病困扰的学生构建人工智能产品。