练习 38:SQL 简介

原文:Exercise 38: Introduction To SQL

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

学习如何建模和设计实体数据的最佳方法,是从非常基本的搭积木开始。数据库的 SQL(“SeQueL”)风格数十年来已成为数据建模和存储的标准。一旦你知道基本的 SQL,你可以轻松地使用任何 NoSQL 或对象关系映射(ORM)系统。SQL 是一种非常形式化的存储,操作和访问数据的方式,向你提供了一种思考它的形式化方式。这也不是很困难,因为这个语言并不像完整的编程语言那样图灵完备。

SQL 无处不在,我不是因为我想让你使用它而这么说。这只是一个事实。我敢打赌,现在你的口袋里有一些 SQL。所有 Android 手机和 iPhone 都可以轻松访问名为 SQLite 的 SQL 数据库,手机上的许多应用程序都可以直接使用它。它撑起了银行,医院,大学,政府,小企业和大型企业;这个星球上的每个计算机,和每一个人最终都会接触一些运行 SQL 的东西。SQL 是一个非常成功和健壮的技术。

SQL 的问题是,每个人似乎都讨厌它的本质。大多数程序员不能忍受,这是一种奇怪的笨拙的“非语言”。在任何现代问题很久之前,比如“网络规模”或面向对象编程,他就被设计了出来。尽管基于坚实的数学构建的操作理论之上,但是它有令人讨厌的足够的错误。树?嵌套对象和父子关系?SQL只是嘲笑你,给你一个大型的扁平的表,说“你弄清楚它吧,兄弟”。

如果每个人都如此讨厌它,为什么要学习 SQL?因为这个假设的仇恨背后,是缺乏对 SQL 的理解以及如何使用它。部分 NoSQL 运动是对过时数据库服务器的反应,也是对 SQL 的恐惧的反应,它来源于对其工作原理的忽视。通过学习 SQL,你实际上将学习一些重要理论概念,它们适用于过去和现在几乎所有数据存储系统。

无论 SQL 仇恨者声称什么,你应该学习 SQL,因为它是无处不在的,实际上并不足够难以学习。成为博学的 SQL 用户,将帮助你为要使用的数据库做出明智的决定,无论是否使用 SQL,并且作为程序员,更深入地了解你使用的许多系统。

SQL 是什么?

我将 SQL 读作“Sequal”,但如果你愿意也可以读作“S-Q-L”。SQL 也代表结构化查询语言,但现在还没有人甚至关心,因为那只是一个营销手段。SQL 所做的事情,只是为你提供了一种语言,用于与数据库中的数据交互。然而,它的优势在于,它匹配了许多年前建立的理论,定义了良好结构化数据的属性。这不完全相同(一些诋毁者感叹它),但它足够有用。

译者注:不要理会那些让你读成“S-Q-L”的人,就算标准是这样,你可以把“Sequal”当做别名。

SQL 的工作原理是,它了解表中的字段,以及如何根据字段的内容在表中查找数据。所有 SQL 操作都是你对表执行的四个常规操作之一:

名称 中文缩写 首字母 意义
创建 C 将数据放入表中
读取 R 从表中查询数据
更新 U 修改已经在表中的数据
删除 D 从表中移除数据

这缩写为“CRUD”,被认为是每个数据存储系统必须具备的基本功能。事实上,如果你不能以某种方式来执行这四种之一,那么最好有一个很好的理由。

译者注:一些人把它们简写为 CURD 或者 CRUD,其实都是一样的。

我喜欢通过将其与 Excel 等电子表格软件进行比较,来解释 SQL 的工作原理:

  • 数据库是整个电子表格文件。
  • 表格是电子表格中的标签/表格,每个表格都有一个名称。
  • 列就是列。
  • 行就是行。
  • 然后,SQL为你提供了一种语言,用于对其进行 CRUD 操作,来生成新表或更改现有表。

最后一条是重要的,不了解这个会使人们产生问题。SQL 只知道表,每个操作都生成表。它通过修改现有表来“生成”表,或者返回一个新的临时表作为数据集。

在阅读本书时,你将开始了解此设计的意义。例如,面向对象语言与 SQL 数据库不匹配的原因之一是,OOP 语言围绕图来组织,但 SQL 只希望返回表。虽然可以将几乎任何图形映射到表格,反之亦然,但它为 OOP 语言增加了翻译负担。如果 SQL 返回一个嵌套数据结构,那么这不会是一个问题。

起步

我们将使用 SQLite3 作为本节的练习工具。SQLite3 是一个完整的数据库系统,具有几乎无需设置的优点。你只需下载一个二进制文件,就像大多数其他脚本语言一样使用它。有了它,你将能够学习 SQL,而不会卡在数据库服务器的管理。

安装 SQLite3 很简单:

  • 请访问 SQLite3 下载页面,并为你的平台获取二进制文件。寻找“Precompiled Binaries for X”,X 是你的操作系统的首选项。
  • 或使用你的操作系统的软件包管理器进行安装。如果你使用 Linux ,那么你知道这是什么意思。如果你使用 macOS ,那么首先得到一个包管理器,然后使用它来安装 SQLite3。

安装完成后,请确保你可以启动命令行并运行它。这是一个快速测试,你可以尝试:

$ sqlite3 test.db
SQLite version 3.7.8 2011-09-19 14:49:19
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test (id);
sqlite> .quit

然后看到test.db文件在那里。如果它可以工作,那么你就完成了。你应该确保你的 SQLite3 版本与我在这里的版本相同:3.7.8。有时,旧版本的东西不能正常工作。

学习 SQL 词汇

要开始学习SQL,你需要为这些 SQL 术语创建速记卡(或使用 Anki)。在这之后的练习中,你将学习这些 SQL 语句,并将其应用于不同的问题。思考 SQL 语言的最佳方法是,将所有东西看做CREATEREADUPDATEDELETE操作。即使一个单词是INSERT,你仍然会将其视为CREATE操作,因为它将创建数据。首先,只要花一些时间记住这些单词,并继续研究,就像本节的练习一样。

CREATE

创建数据库的表格,可以储存数据的列。

INSERT

向数据库表格添加行,并填充在数据的列中。

UPDATE

修改表中的一列或者多列。

DELETE

从表中删除一行。

SELECT

查询一个表或一系列表,返回带有结果的临时表。

DROP

销毁一个表。

FROM

SQL 语句的常见部分,用于指定要使用表的那些列。

IN

用于表示元素集合。

WHERE

用在查询中,来表示一些东西应该来自哪里。

SET

用在更新中,来表示哪一列修改成什么。

SQL 语法

接下来,你将为 SQL 的另一组重要语法结构创建速记卡。他们不会太多,但是写下它们(或使用 Anki),并开始研究他们,以便你更快地学习语言。你正在学习的语法用于 SQLite3,我们将在本书中使用它。这是一个相当普遍的 SQL 语法,但每个数据库都有不同的奇怪的偏好,你必须学习它。一旦了解它,很容易弄清楚另外一个数据库的用法。

你将需要访问 SQLite 3 定义页面来创建所需的卡。该页面列出了 SQLite 了解的所有内容,但仅关注上面列出的主要语句。添加你不明白的其他任何单词。他们的图表有点复杂,但它们只是 SQL BNF 的图形视图,你在第五部分中了解了它们。如果你不记得 ABNF,返回第五部分并重新学习。

深入学习

  • 访问 SQLite3 语法列表并浏览所有可用的命令。他们中的大多数都不会有意义,但是如果你有任何兴趣,那么你也可以为他们做速记卡。
  • 在完成剩余练习的整个时间里,研究这些速记卡。

笨办法学 Python · 续 练习 38:SQL 简介相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 45:创建 ORM

    练习 45:创建 ORM 原文:Exercise 45: Creating an ORM 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这本书的 SQL 部分的最后一个练习是一 ...

  8. 笨办法学 Python · 续 练习 40:SQL 读取

    练习 40:SQL 读取 原文:Exercise 40: Reading with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在 CRUD 矩阵中,你只知道&quo ...

  9. 笨办法学 Python · 续 第六部分:SQL 和对象关系映射

    第六部分:SQL 和对象关系映射 原文:Part VI: SQL and Object Relational Mapping 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本 ...

最新文章

  1. 185页深度报告 扒一扒AI金融的老底【附下载】
  2. ffmpeg php win32,解决PHP5.3.x下ffmpeg安装配置问题
  3. 云炬VB开发笔记 2可视化编程基础
  4. webStorm activeCode
  5. python中链表和数组_数据结构笔记(一):数组、链表|python基础教程|python入门|python教程...
  6. linux下的awk程序在哪里编写,如何编写awk命令和脚本
  7. checkbox居中 editor_radio 或 CheckBox 关联 其他元素 整体选择
  8. GitHub 配置及简单使用
  9. SVG 教程 (四)多边形,曲线,路径
  10. mysql 连接失败的日志(或者输出)结果分析
  11. Unity 编辑器内建图标获得
  12. 初识Vocaloid3
  13. 任务栏可以点,电脑桌面却不显示内容的解决方法
  14. Linux三剑客(grep、sed、awk)
  15. HTML5期末大作业:基于HTML+CSS+JavaScript茶文化中国水墨风格绿色茶叶销售(5页) 学生网页设计作业源码
  16. Eclipse中pep8规范,修改每行字符长度
  17. js串口 Java web串口 调用客户端的串口 串口上云 硬件上云
  18. 去掉字符串中的所有空格
  19. python实时显示图片_任何显示来自Cam的实时图像的快速Python GUI
  20. 建立良好体验度的Web注册系统

热门文章

  1. python 字典处理_Python 6 个字典操作你必须知道
  2. 视频封面自动播放两秒钟html,使用videojs轻松搭建一个播放器
  3. python写网页脚本_东拼西凑用python脚本登录web管理页面做巡检(实现)
  4. Linux netfilter源码分析(7)
  5. STM32 FSMC/FMC原理保姆级讲解(一)
  6. 【LeetCode】【HOT】739. 每日温度(栈)
  7. 【LeetCode】剑指 Offer 61. 扑克牌中的顺子
  8. HIT Software Construction Lab6引发出来对锁的问题的探究
  9. Java 文件操作-File
  10. 深入理解Scala的隐式转换