SQL 从头开始第 1 部分 - SQL 入门
欢迎阅读 SQL 系列文章的第一篇,希望这是一篇相当长且有用的文章。
在我开始编写 SQL 之前,我想确保大家的理解一致。让我们先来介绍一下这个主题。
只是提醒一下,我假设您对本文的计算机终端有非常少量的了解,但如果您遇到困难,请随时在评论中提出问题。
为什么要学习 SQL?
@dabit3最近指出,大多数网络应用程序基本上都是列表和表格(并且您可以围绕制作这些列表和表格建立相当稳固的职业生涯)。
但是,这些表单中提交的数据会发生什么?这些列表中的内容又从何而来?纳德暗示了答案:通常它是一个与数据库对话的 API。
SQL 是数据库语言。如果你想了解这些列表和表单挂载到什么地方,以及它们对应用程序意味着什么,SQL 是探索和理解的最佳工具。
如今,编写基于数据库的软件并不需要掌握 SQL 知识。我们可以使用 Rails 构建基于 ORM 的 Web 应用,这样就完全不需要 SQL 代码,但这无疑会导致应用程序效率低下。
如果您不是 Web 开发人员,学习 SQL 可能看起来没那么有趣,但 SQL 数据库并非仅用于 Web 应用。SQL 广泛应用于您的所有操作系统,也用于构建移动应用。如果您对数据科学或业务分析感兴趣,那么 SQL 是必不可少的工具。
即使技术不太精通的人,学习 SQL 也能受益匪浅。如果您是一位产品经理,想知道每天有多少用户注册了您的应用程序,是让开发人员为您编写查询语句更简单,还是自己花几秒钟输入查询语句更轻松?如果您想了解其中有多少用户位于日本西海岸?掌握一些基本的 SQL 知识可以帮助您在几秒钟内回答这些问题以及更多类似的问题。
想要更多数据?SQL 无处不在,它每年都会出现在StackOverflow 的开发者调查中。
根据 StackOverflow 统计,最流行的编程语言:
如果 SQL 已经无处不在,那么大多数开发人员都应该掌握一些基础知识。SQL 是一项市场需求旺盛且极其有用的技能,所以更好的问题可能是“为什么不学习 SQL?”
什么是 SQL?
结构化查询语言 (SQL) 是一种编程语言,其起源可追溯到 70 年代,但至今仍被广泛使用。您正在访问的网站正在运行 SQL 查询来显示您正在浏览的内容。
开发人员使用 SQL 与数据库交互。如果您使用 Rails 或 Django 构建过网站,那么您可能熟悉使用 Ruby 或 Python 与数据库交互,但实际上,您的应用程序是根据您用 Ruby 或 Python 编写的代码生成 SQL 的。
当我们编写 SQL 时,我们通常试图完成四个“CRUD”操作之一,或者直接管理数据库。我们稍后会详细讨论 CRUD,但您应该知道,CRUD 操作都与数据操作有关。例如,我们可能将销售记录存储在数据库中,并需要更改其中一条记录以反映退款或折扣。我们可能想找出 8 月份有多少客户购买了圣诞树。这些任务都可以用 SQL 来解决。
SQL 与我们用于构建网站、移动应用程序和视频游戏(C#、JavaScript、Ruby、Python 等)的现代编程语言有很大不同。
我们可以用一个词来概括 SQL 和 Ruby 之类的语言之间最大的区别之一:声明式。SQL 是一种“声明式”编程语言。通俗地说,这意味着当我们编写 SQL 时,我们通常不需要描述代码如何运行,而只需声明我们想要发生的事情。
下面是一些类似 SQL 的伪代码,可以阐明这个想法:
# We want a list of Twitter usernames
# for all the user accounts on DEV
Show me every DEV user's Twitter username
From the database's user table
Where the user has linked a Twitter account
如果您以前见过 SQL,您可能会注意到此伪代码与返回类似数据集的实际查询之间存在一些相似之处:
SELECT twitter_username
FROM users
WHERE twitter_username IS NOT NULL
这个 SQL 看起来不太像我们用 JavaScript 或 Python 编写的代码。这可能是因为在这些语言中,我们必须告诉编程语言更多关于如何从计算机内存中检索信息的内容。在 SQL 中,我们只需告诉计算机我们需要什么信息,而不是如何检索这些信息。
网上有很多关于SQL 的历史和发展的信息,但我认为这些信息足以引起讨论。
设置 SQL 游乐场
如果我们想学习 SQL,我们需要一个编写 SQL 的环境和一些可供探索的数据。我们需要一个数据库。
市面上有很多用于创建和操作数据库的工具。你可能听说过一些(SQL Server、PostgreSQL、MySQL、CockroachDB、SQLite),也可能有自己喜欢的,但你不应该花太多时间考虑这些!
每个数据库提供商都会有点不同,但通常你在一种 SQL 数据库上学到的东西也会在其他数据库上起作用。
为了撰写本文,我可能会在多个环境之间切换,但很多示例都来自 DEV 数据库。DEV 使用 PostgreSQL,在本地设置起来可能相当麻烦,所以如果你只是想体验一下 SQL,我不建议你直接跳到那个“兔子洞”里。
我建议你为你的 SQL 学习环境设置SQLite。它易于上手,出现问题时也易于修复,而且对系统占用不大。
如果您和我一样使用 Ubuntu,则可以使用以下命令安装 SQLite3:
sudo apt-get install sqlite3
如果您使用的是 MacOS,我可能会选择 brew 选项:
brew install sqlite3
对于 Windows 用户来说,情况会稍微复杂一些,而且我不是 Windows 用户,所以你得自己动手试试你的搜索引擎了。如果你是 Windows 用户,并且之前安装过 SQLite,欢迎在评论区留下一些链接或指南(我可能会在文章的这一部分稍后附上评论)。
sqlite3
您可以通过在终端中运行来测试您的 SQLite 安装。它应该看起来像这样:

设置 playground 的下一步是创建一个虚拟数据集。网上有很多可供学习的数据集,但有一个非常常见的数据集叫做“Northwind”,很容易用 SQLite 运行。
您需要在您的机器上为数据库创建一个新目录,然后从 GitHub获取Northwind 脚本。
我认为最简单的方法是使用 cURL 获取此文件并将其传输到文件中:
# Go check the URL in your browser before you blindly cURL something!
curl -LJ0 https://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/Northwind.Sqlite3.create.sql > nw.sql
如果这对你来说看起来很陌生,不要太担心。这是从 GitHub 上的仓库抓取文件,并将其放入当前目录中名为 的文件中nw.sql
。
一旦我们的机器上有该文件,我们将创建一个新的数据库并运行脚本以用虚拟数据填充它。
# Create the database
sqlite3 Northwind.db
# You'll be dropped into the database's command line interface
# Run the contents of nw.sql with the .read command
.read nw.sql

如果您正确地遵循了这些步骤,您应该会看到您的控制台吐出大量信息(希望没有错误)!
当控制台速度变慢并且您sqlite>
再次看到提示时,尝试输入(而不是粘贴)这个简单的查询并看看会发生什么:
# Don't forget the semi-colon!
SELECT ContactName FROM customers LIMIT 5;
在按下回车键之前,试着想象一下这会产生什么效果。它和英语非常相似,所以你可能会比你想象的更接近。
Maria Anders
Ana Trujillo
Antonio Moreno
Thomas Hardy
Christina Berglund
此查询从我们的客户表中返回 5 个客户的姓名。
如果您在控制台中看到与我的结果类似的结果,则说明 SQLite 和 Northwind 数据集已准备就绪!
这应该能为您提供一个安全的 SQL 环境,让您无需担心损坏实际数据库。您也可以Northwind.db
随时按照以下步骤删除文件并重新创建数据库,所以不用担心会破坏任何东西!
在下一篇文章中,我们将设置一个工具,使我们的数据库可视化变得更加容易,我们将定义一些数据库词汇(表、行和列),并且我们将讨论从头开始编写查询。
奖金
如果您想在终端中进一步探索 Northwind 数据集,可以使用.tables
命令向 SQLite 询问数据库中的表列表。
看看你能不能想出如何获取 5 位员工的名字。我会在下一篇文章中给出答案。
还有更多...
这些天我写了很多文章,我运营着一个播客,并且我已经开始发送一份关于我听到的所有精彩故事的新闻通讯摘要。
您还可以在Twitter上关注我,在那里我会制作一些有趣的表情包并谈论作为一名开发人员的感受。
文章来源:https://dev.to/jacobherrington/sql-from-scratch-part-1-getting-started-with-sql-2g3i