在数据科学领域,SQL是一种必须掌握的工具,它主要用于查询关系型数据库中以表格形式存储的数据。SQL通过不同的命令帮助从这些表中获取数据。因此,如果是数据科学的初学者,学习SQL是必不可少的。本文将介绍使用SQL可以完成的任务以及常用的SQL命令。列出了所有基本命令及其用途,帮助更容易理解它们的目的。
请注意:使用的是SQLite数据库浏览器和一个名为Dummy_Sales_Data的虚拟数据集,该数据集是使用Faker创建的,可以在GitHub仓库中免费获取!
这是最基本且几乎每次都使用的SQL命令。顾名思义,它用于从数据库中选择一些数据。不会随机选择数据;需要在SELECT语句中提供特定的列名。例如,假设只想从数据集中选择OrderID、Shipping_Address、UnitPrice和Sales_Manager列,只需做如下操作:
SELECT OrderID, Shipping_Address, UnitPrice, Sales_Manager
然而,当需要从数据集中选择所有列时,不需要逐个输入所有列名;可以直接使用星号(*)代替列名,如下所示:
SELECT *
这就是如何选择数据集中的一个或多个或所有列。但是,接下来,还需要告诉计算机想要这些列的数据集。这时下一个重要的SQL命令就派上用场了。
在SQL中,FROM告诉程序想从哪个数据集中提取数据。理想情况下,数据库包含多个以表形式存储的数据集。因此,FROM是告诉程序查找哪个数据集的唯一方式。要获取选择的表中的数据,只需在FROM关键字旁边指定表名。继续上述SELECT的例子,假设想从虚拟销售数据集中获取这些列。这个数据集在数据库中的名称是Dummy_Sales_Data_v1。所以,要获取所需的数据,需要编写以下SQL代码:
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1
SELECT FROM语句的输出 | 图片由提供
在SQL中,WHERE子句用于过滤记录,即数据集的行。需要在WHERE子句中指定一个条件,只有满足这个条件的行才会被检索。例如,在上述例子中,如果想选择只有Pablo是销售经理的行,可以这样做:
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1 WHERE Sales_Manager = 'Pablo'
上述代码的最后一行告诉如何在WHERE子句中编写条件。同样,可以在WHERE子句中使用逻辑AND和OR操作符添加多个条件。
AND:此操作符仅在所有由AND分隔的条件都满足时检索记录。
OR:此操作符在任何由OR分隔的条件满足时检索记录。
继续上述例子,假设想要选择Pablo或Stella是销售经理的所有行。可以使用OR操作符在WHERE子句中编写这些条件,如下所示:
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1 WHERE Sales_Manager = 'Pablo' OR Sales_Manager = 'Stella'
WHERE子句中两个条件的输出 | 图片由提供
在SQL中,此子句用于按升序或降序排序检索到的记录。数值列根据其值排序,而非数值列则按升序排列,即从a到z。要按顺序排列行,只需编写ORDER BY关键字,后跟想要排序结果集的列名。继续上述例子,假设想按UnitPrice的升序排列结果集,即最低单价出现在顶部。可以这样做:
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1 WHERE Sales_Manager = 'Pablo' ORDER BY UnitPrice
SQL按升序排列记录 | 图片由提供
默认情况下,如所见,数据集按单价的升序排列。然而,要按降序排列,需要在列名旁边提及另一个关键字DESC,如下所示。
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1 WHERE Sales_Manager = 'Pablo' ORDER BY UnitPrice DESC
SQL按降序排列记录 | 图片由提供
在SQL中,LIMIT子句指定想要检索的记录数量。只需在LIMIT关键字旁边简单地提及数字,如下所示。
SELECT OrderID, Sales_Manager, Shipping_Address, UnitPrice FROM Dummy_Sales_Data_v1 WHERE Sales_Manager = 'Pablo' LIMIT 5
SQL LIMIT子句 | 图片由提供
如所见,现在只从结果集中检索了5条记录。这个关键字在处理大型数据集时非常有用,因为从结果集中检索所有行要么不必要,要么会影响性能。记住,LIMIT关键字放在代码的最后。
到目前为止,所做的只是提取数据。然而,数据分析不仅仅是关于数据提取。SQL中还有许多其他命令、子句和函数可以帮助进行数据分析。在这个初学者阶段,可以关注其中最简单的一个。
在SQL中,GROUP BY根据GROUP BY子句中指定的列中相同的值对行或记录进行分组。当想要对行进行分组并执行聚合数学运算时,例如加法、计数或求平均值,就会使用到它。在GROUP BY中,可以使用聚合函数,如SUM()、MAX()、MIN()、AVG()和COUNT()。
例如,假设想要查看每个销售经理处理的订单总数。这意味着本质上是在计算属于每个销售经理的数据集中的OrderID,对吧?这意味着需要将属于同一销售经理的所有行分组,然后计算每个销售经理有多少个订单ID。这可以使用SQL中的GROUP BY轻松完成,如下所示。
SELECT Sales_Manager, COUNT(OrderID) FROM Dummy_Sales_Data_v1 GROUP BY Sales_Manager
SQL GROUP BY和COUNT | 图片由提供
如所见,它返回了每个销售经理处理的订单数量。类似地,可以使用其他聚合函数。
这是一个简单的概述,介绍了作为数据分析师或任何处理数据的人可以使用SQL完成的任务。还有更多的函数和命令可以让使用SQL完成整个数据分析任务。可以在高级SQL概念和其他SQL相关文章中找到它们。以下是这次快速阅读的一些学习和收获——