无论你喜欢还是讨厌它,如今都无法逃脱sql的影响。每个行业都在使用它,几乎每个人都至少接触过sql查询,无论他们的工作是什么。事实上,从不在工作中使用sql的人群占越来越少的比例。
如果你在技术领域工作,你应该了解什么是sql以及如何使用它。幸运的是,它是一个很容易上手的工具。事实上,学习sql的第一天,大多数人就能从表中快速调用整列数据,并且可能还能根据某些条件进行筛选,使他们的搜索更加精确。
掌握sql的关键是了解可以使用的不同类型的sql查询以及它们的用途。这就是我们将在这里讨论的内容。对于完全的新手,我们还将解释sql是什么以及如何使用它来使数据分析更加有效。
最后,我们甚至会提供一些资源指南,以帮助您提升sql技能或解决在分析过程中遇到的任何问题。
让我们开始查询吧!
什么是sql?
在我们开始讨论sql查询之前,我们需要先了解sql的实际含义。sql代表结构化查询语言(structured query language),一种简单的编程语言,用于管理和“通信”与关系数据库。
关系数据库将数据存储为表,而不是键值对。因此,我们使用sql来访问结构化数据,而不是非结构化数据。
当大多数人想到使用sql时,他们通常会想象从一个巨大的数据库中提取小片段的数据。虽然读取数据可能是sql最常用的功能,但您也可以使用sql来创建、更新和删除数据库和表。
由于数据无处不在,sql可用于各种情况,但您最常会看到它被数据分析团队使用,或者在商业智能、营销、医疗保健和web开发中使用。
使用sql的主要优点在于其简单性以及从庞大的数据集中轻松检索相关信息的能力。通过展示一些“代码”样例,您将看到它有多简单,一旦开始查询数据库,您将认识到您可以利用sql获取多少数据。
虽然sql有一些主要的缺点,但重要的是要记住它的局限性。首先,查询数据通常是相当昂贵的。许多服务(如snowflake)按查询收费,因此,如果您在查询过程中过于沉迷,可能会遇到一位不满的经理。
除了费用之外,我们还想强调sql仅适用于表格数据。处理非结构化数据是完全不同的。
主要的sql查询类型有哪些?
既然您已经对sql有了适当的了解,让我们考虑一些主要的查询类型,何时使用它们以及如何使用它们。
当然,这些并不是所有的sql查询。实际上,有很多类型和变体,您可以学习以增加对更高级查询的了解。但是现在,我们将查看您应该在开始时熟悉的主要sql查询。
sql查询类型可以分为以下几类:
select查询
在最基本和基础的查询中,您使用select从一个表中调用列。
join查询
顾名思义,join允许您将不同的表连接成一个单一的表。
子查询
子查询或查询中的查询允许您以更有创意的方式对数据进行过滤和操作。
聚合查询
聚合函数允许您对您的查询数据进行计算。如果您曾经使用过excel,您可能已经知道聚合函数是什么。
修改查询
insert、update和delete等操作允许您使用sql修改表格或数据库。如果您在生产环境中工作,请小心使用这些操作。
让我们详细介绍每个查询,并看一些示例。
sql查询:select
select语句是可用的sql查询中最关键的语句。事实上,如果没有select,您几乎无法运行查询,因为sql的整个目的是从表中调用数据集。
您可以运行的绝对最基本的查询是:
select *
from [table_name_goes_here]
通过使用星号,您告诉工具您希望从该表中获取所有信息。
对于刚开始熟悉sql的初学者来说,这是一个完全可以运行的命令。然而,在现实世界中,除非您处理的是相对较小的数据集,否则这并不是很实用。如果是一个大表,您可能需要等待很长时间才能完成查询,并且可能还需要花费很多钱。
幸运的是,您可以使用过滤条件限定select语句,并且甚至可以指定要调用的列。
假设您有一个“customers”表,就像在这个免费在线查询编辑器中所示,其中显示了客户id、名字和姓氏、客户年龄以及他们居住的国家。
如果您只想知道这些客户的名字和姓氏,您可以编写如下代码:
select sql查询的示例,显示customers表中记录的first_name和age。
©jingzhengli.com
由于我们指定了要查看的列,sql只返回了表的一部分,而不是整个表。
然而,这只是显示表中数据的宽泛视图。如果您想要更具体的查询怎么办?
使用select where
我们也可以调用所有列,但使用where子句指定特定的条件。如果我们只想看到来自美国的客户,我们可以这样做:
select where sql查询正在显示拥有特定条件的记录。
©jingzhengli.com
请注意这里的语法。sql在非数字数据周围需要使用单引号。否则,您将会收到错误。
您还可以在select语句的末尾使用order by和group by来按升序或降序值排列数据,或按特定值组进行排序,例如国家。
使用order by按年龄对记录进行排序。
©jingzhengli.com
sql查询:join
joins 是一个有点棘手的命令,但它们是一个重要的命令,因为它们允许您将来自不同表的数据合并到单个查询中。使joins复杂的是,您经常需要识别两个表之间的共同列。这是一个分解:
inner join:返回在连接列中存在匹配的所有行。
left join:即使右表中没有匹配项,也返回左表中的所有行。
right join:即使左表中没有匹配项,也返回右表中的所有行。
full join:即使在另一个表中没有匹配项,也返回两个表中的所有行。
假设我们想检查来自我们的“customers”表的数据,以及来自“orders”表的数据:
使用join显示来自customers和orders表的数据。
©jingzhengli.com
通过我们的sql技巧,我们现在可以看到哪些客户下了订单以及频率如何。如您所见,一个客户下了两次订单。
这可能不是一个令人震惊的见解,但希望这使您对joins如何帮助您开始看到关系型数据库中不同表之间的模式或关系有一个好的理解。
子查询
如果您知道如何使用子查询进一步过滤和操作数据,那么您就离成为sql专家的路上很近了。所谓的“嵌套查询”的真正聪明之处就像joins一样,它们允许您分析来自不同表的数据。
子查询基本上只是嵌套的查询。
©jingzhengli.com
这个嵌套查询从orders表和shippings表中获取数据。它要求sql识别出任何已下订单但尚未收到货物的客户。
与joins一样,子查询的挑战在于您需要寻找不同表之间某种共同的关系。在这里,我们能够找到“customer”或“customer_id”作为数据集之间的相似点。
聚合sql查询
对于数学爱好者来说,聚合将很快成为您最喜欢的一组sql查询,因为它们允许您对数据进行计算。
主要的聚合函数包括count,sum,avg,min和max。
count返回满足您指定条件的表中的行数:
count适用于想要知道表中行数的情况。
©jingzhengli.com
如果我们想知道我们客户的平均年龄呢?
avg用于找到数字的平均值,例如数据库中客户的年龄。
©jingzhengli.com
或者我们数据库中最年轻的客户?
使用select min显示我们的customers表中具有最小年龄的记录。
©jingzhengli.com
小测验:您能找出要运行的查询来标识我们数据库中年龄最大的客户吗?
修改sql查询
修改语句用于更新数据库中的信息。在使用这些命令时,您应该谨慎,不要通过阻碍公司数据来打扰数据库管理员。除非是您自己的数据库,那就玩得开心吧!
常见的修改命令包括insert,update和delete。
假设您公司的宗旨是永远不要相信30岁以上的任何人,因此您想删除数据库中年龄超过30岁的任何客户:
使用delete from查询修改表。
©jingzhengli.com
这里还有另一种情况,您需要调整一条记录,而不是完全删除它。betty doe刚刚结婚,她的姓氏现在是robinson。使用update命令来修改您customers表中的她的记录:
使用update和set查询更改一个客户的姓名。
©jingzhengli.com
在这里,我们使用了betty的客户id来定位她,而不是她以前的姓氏,以确保我们更新了正确的客户。
还要注意,与我们在这里处理的其他查询不同,我们不需要select语句。这是有道理的,因为您实际上并没有查询数据,而是更改某些数据。
如何了解更多关于sql查询的信息
我们在这里只是浅尝辄止,了解了sql可以完成的工作。我们介绍的查询类型是最常用的。但在现实世界中,您通常会看到更长更复杂的sql查询,从真正庞大的数据集中检索数据。
不过,不要害怕。在线上有很多可以帮助您掌握sql的资源。只要有足够的练习,您就可以掌握它。毕竟,这是一种旨在简单直观的编程语言。
对于sql初学者来说,最好的免费资源之一是由w3 schools提供的课程。本教程简短而简明,并且非常实用,甚至为您提供了一个内置的查询工具,这样您就不必担心将sql软件包安装到计算机上。
互联网上还有很多免费学习sql查询的资源,比如youtube上的快速课程。
您也可以选择付费课程。当然,付费从来都不是一件有趣的事情,但请将其视为对可能带来更高薪工作的投资。coursera,udemy和datacamp都是获得sql专家指导的好地方,通常会提供实践操作的指导。
除了这些学习资源外,还有一些在线社区可以获取有关sql相关项目的支持。 stackoverflow是一个开发者论坛,用户可以向其他开发者或数据科学家寻求帮助,以解决某些问题,或者在我们的案例中,找到执行更复杂的sql查询的最佳方法。
此帖子顶部显示的图像为©maria vonotna/shutterstock.com。