banner_SQL

通过Toptal皮特·塞弗顿和乌德米

对初学者指南感兴趣吗?看,皮特吃饱了SQL过程

注:这篇文章是我们“入门”系列的一部分,是关于一些最受欢迎的课程主题的免费文本教程。

要跳转到特定的部分,请点击下面的目录:

介绍

什么是数据库

四种基本SQL操作,或CRUD

创建数据

读取数据

更新数据

删除数据

结论


介绍

也许很难相信,但是SQL在我们周围的任何地方都被使用。每个操作任何类型数据的应用程序都需要将数据存储在某个地方。不管它是大数据或者只是一个只有几行简单数据的表,一个政府或一个小型初创企业,或者一个跨越多个服务器的大数据库,或者一个运行自己的小数据库的移动电话,SQL是无处不在的。

但是什么是SQL?SQL代表年代tructuredueryl通常发音为“ess-que-el”。SQL是数据库语言,是专门为与数据库通信而构建的。SQL是一种简单的语言,类似于英语语言,因为命令的结构几乎像英语句子。这些句子的结构类似于声明语句,因此SQL也被称为声明性语言。

虽然SQL是数据库语言,但您还需要选择一个数据库管理系统来将所有内容组合在一起。在这篇文章中,我们将讨论MySQL,它的使用以及与SQL语法的关系。MySQL创建于1995年,在网络应用中特别受欢迎。

image02

当有许多可用的工具可以直观地编写SQL查询时,为什么要学习一门全新的语言呢?在使用一些SQL工具时,了解SQL语言并理解可视化工具正在做什么以及为什么做是很重要的。有时需要手动编写一些SQL语句,不仅因为这是最快的方法,而且因为它更强大,而且通常是实现目标的唯一方法。

什么是关系数据库

我们提到过SQL是数据库语言。什么是数据库?数据库是一种存储机制,旨在提供对存储信息的访问和操作。数据库中的信息存储在称为表的对象中。表由其名称唯一标识,并由列和行组成。列包含列名、列数据类型和列的任何其他属性。行包含列的记录或数据。数据库中的许多表都有关系,或者它们之间的链接,要么是一对一的关系,要么是一对多的关系。这就是为什么这种数据库被称为关系模型数据库的原因。

描述数据库结构最简单的方法是将其与许多人熟悉的Excel电子表格进行比较。数据库是一个电子表格文件。电子表格中的工作表是一些表,每个表都有一个名字。两种方法中的列和行是相同的。SQL语言可用于创建新表或更改现有表,以及获取数据、更新数据或删除数据。

假设我们有一个存储在随机单独文本文件中的著名电影引用的大集合。即使我们更有条理,使用Excel电子表格,我们面临的问题也是一样的。用这种方式存储引号,我们不能很快地从一部电影中获取所有引号,或从一个角色获取所有引号。如果我们将文本文件或电子表格移动到数据库中,并创建具有它们之间关系的表,所有这些都成为可能。关系到底是什么意思?关系模型是描述数据和这些数据实体之间关系的一种方法。在我们的示例中,关系是每个单引号与存储电影标题或存储所有字符的表之间的连接。

下面是一个稍微简化的示例,只有一个名为“Movie_quotes”的示例表。它有四列,一列是引用文本,一列是引用的角色,一列是电影和一年。我们收集了8个电影引用,我们的样本表如下:

Movie_quotes
Q_TEXT Q_CHARACTER Q_MOVIE Q_YEAR
我马上就回来 《终结者》 《终结者》 1984
我觉得你缺乏信仰令人不安。 达斯·维达 星球大战 1977
这是一个陷阱! 海军上将Ackbar 星球大战 1983
别告诉我胜算有多大。 汉独奏 星球大战 1980
做的。或不。没有尝试。 尤达 星球大战 1980
蠢人做蠢事。 阿甘 阿甘 1994
我妈妈常说:生活就像一盒巧克力。

你永远不知道你会得到什么。

阿甘 阿甘 1994
跑,福尔斯特!快跑! 珍妮 阿甘 1994

四种基本SQL操作,或CRUD

有很多SQL命令,但有四种通用的SQL操作可以对表和它的数据做事情:

这些基本SQL操作的首字母缩写为“CRUD”,它们被认为是由每个数据库都必须具有的四个基本功能或特性组成的基本集合。

通过介绍这些基本特性,我们将介绍基本和最重要的SQL命令:“创建”“插入”“选择”“更新”“删除”,“下降”。

创建数据

首先,我们需要在MySQL数据库中创建表。要创建一个新表,创建表的语句。简单的格式和'创建表语句语法如下:

CREATE TABLE table_name (column_1 data_type, column_2 data_type, column_3 data_type);

首先是关键字“CREATE TABLE”,然后是表名。这是SQL与英语语言的简单性和相似性的一个完美例子。关键字后面跟着一个开括号,其中定义了附加参数、列名和列数据类型,后面跟着一个闭括号。需要注意的是,所有SQL语句都应该以';'结尾。

需要遵守的规则很少。表名和列名必须以字母开头,后面可以是字母、数字或下划线。它们的长度不能超过30个字符。SQL保留关键字作为表或列名的名称(例如'选择”、“创建”、“插入’等)。

在我们的示例中,最简单的列名是'文本”、“字符”、“电影”和“一年”。但问题是,大多数这些名字都是保留词。为了避免任何可能的冲突,在我们的示例中,我们将创建带有前缀'Q_”。

不同数据库的数据类型有所不同,但以下是MySQL中最常见的数据类型。它们可以分为三个主要类别,数字、日期和字符串。

数据类型指定在该特定列中可以存储什么类型的数据。如果要使用名为' Q_CHARACTER '的列来保存名称,那么该列应该具有' varchar '(变长字符)数据类型。保存影片年份的列类型为' number ',在我们的示例列' Q_YEAR '中。

最终的SQL命令将创建我们的表与所需的表结构如下:

创建表Movie_quotes (' Q_TEXT ' varchar(200), ' Q_CHARACTER ' varchar(20), ' Q_MOVIE ' varchar(20), ' Q_YEAR ' number(4));

这个SQL命令的结果将创建一个空表的列:

image03

下一步是用我们的电影引用数据填充表。有许多具有图形界面(GUI)的工具可用来管理数据库中的表和数据。但是通常编写一个SQL脚本会更快,它基本上是一组将按顺序执行的SQL命令。当您需要用大量数据填充表时,这尤其方便。

在MySQL数据库表中插入或添加一行数据的SQL命令是插入”。格式如下:

INSERT INTO table_name (column_1, column_2,…)column_n) VALUES (value_1, value_2,…value_n);

要向表中插入一行数据,插入关键字后面跟着关键字”“还有一张桌子的名字。在括号中后跟用逗号分隔的列名是可选的,但是定义列以确保将正确的数据插入到正确的列中是一种良好的实践。最后一部分是定义用关键字'插入什么数据,后面是用括号括起来的值列表。请注意字符串应该用单引号括起来,数字不应该。

我们的示例SQL脚本将填充' Movie_quotes '表,如下所示:

插入Movie_quotes

(q_text, q_character, q_movie, q_year)

VALUES (' I ' ll be back ', ' The Terminator ', ' The Terminator ', 1984);

如果你想批量添加,你可以简化代码,看起来像这样:

插入Movie_quotes(q_text, q_character, q_movie, q_year)价值观(“我觉得你缺乏信仰令人不安。,《黑武士》,《星球大战》,1977),(“这是一个陷阱!,《阿克巴上将》,《星球大战》,1983年),(“别告诉我胜算有多大。,“汉·索罗”,《星球大战》,1980年),('。或不。没有尝试。,《尤达》,《星球大战》,1980年),(“蠢人做蠢事。”,《阿甘正传》,1994),(“我妈妈常说:生活就像一盒巧克力。你永远不知道你会得到什么。,《阿甘正传》,1994),('跑,福尔斯特!快跑!《阿甘正传》,《珍妮·柯伦》,1994);

读取数据

有了保存在数据库中的数据,我们现在可以查询该数据并查看表中存储了什么,并且可以以不同的方式过滤和排序该数据。

当查询MySQL数据库时,三个最重要的语句是:

SELECT子句告诉计算机您希望返回哪些值。

FROM子句告诉您可以在数据库中的哪些表中找到值。

WHERE子句列出了在选择信息之前希望信息满足的条件。WHERE子句在您完成基础知识之后才会使用,但之后会涉及到大量的SQL使用。

SELECT column_1, column_1,…从table_name column_n;

声明的列名决定在结果中返回哪些列,以及返回的顺序。如果我们想要选择所有的列,或者我们不知道表中到底有哪些列,我们可以使用一个通配符星号' * ',它将从数据库中选择所有内容:

SELECT * FROM table_name;

查询将显示来自我们示例表的所有数据如下所示:

SELECT * FROM Movie_quotes;

image07

而一个只显示后跟电影年份的引号列表的查询,看起来是这样的:

SELECT Q_TEXT, Q_YEAR FROM Movie_quotes;

有时我们不想从表中获取所有数据。当表中有很多数据时,或者当我们搜索符合特定条件的特定数据时,可能会出现这种情况。对此我们可以使用'在哪里SQL子句。“在哪里子句将过滤记录,并将从数据库检索的记录限制为那些符合指定定义的条件:

SELECT column_1, column_1,…column_n FROM table_name WHERE column_name operator value;

如前所述,“在哪里'子句是可选的,但如果我们决定使用它,下面的操作符是可用的:

数学运算符不言自明。“之间的运算符查找两个声明值之间的值,包括两端相等。“就像'模式匹配操作符是一个非常强大的操作符,它允许我们只选择与我们指定的类似的行。百分号''可以用作通配符,以匹配可能出现在指定字符之前或之后的任何可能字符。

例如,为了只获得来自《星球大战》电影的电影引用,我们会这样写:

SELECT * FROM Movie_quotes WHERE Q_MOVIE = '星球大战';

image04

请注意:在哪里'子句是区分大小写的,并且下面的SQL命令不会返回任何结果:

SELECT * FROM Movie_quotes WHERE Q_MOVIE = ' STAR WARS ';

image00

也可以有多个"在哪里'子句,并结合逻辑运算符'”和“”。如果我们使用了不止一个的逻辑运算符,则应考虑使用的条款。

同样,为了演示这个示例,让我们返回《星球大战》和《终结者》中所有的电影引用:

SELECT * FROM Movie_quotes WHERE Q_MOVIE = '星球大战' AND Q_MOVIE = '终结者';

上面的例子最好使用“IN”子句:

SELECT * FROM Movie_quotes WHERE Q_MOVIE IN('星球大战','终结者');

到目前为止,我们只讨论了如何从数据库中过滤数据。返回的行将按照它们进入(提交)数据库的顺序进行排序。为了控制行出现的顺序,我们可以通过包含' order by '子句对输出数据进行排序。' ORDER BY '子句包含一个或多个指定排序顺序的列名:

SELECT column_1, column_1,…column_n FROM table_name WHERE column_name操作符

为了扩展我们之前的《星球大战》电影引用例子,现在按年份排序,我们可以这样写:

SELECT * FROM Movie_quotes WHERE Q_MOVIE = '星战' ORDER BY Q_YEAR;

image08

默认情况下,列的排序顺序是从最小值升序到最大值。要将列的排序顺序改为降序,可以包含DESC'关键字后面的列名:

SELECT * FROM Movie_quotes WHERE Q_MOVIE = ' Star Wars ' ORDER BY Q_YEAR DESC;

image05

命令子句不限于单个列。可以包含以逗号分隔的列列表以进行排序。返回的行将按第一个指定的列排序,然后按下一个指定的列排序。还需要注意的是,排序列不需要包含在选定列的列表中。我们可以这样写查询:

SELECT Q_TEXT, Q_CHARACTER, Q_MOVIE FROM Movie_quotes WHERE Q_MOVIE = ' Star Wars ' ORDER BY Q_YEAR DESC;

更新数据

在我们最初插入数据之后,并不限制我们只读取该数据。我们可以对任何行中的任何列中的任何数据进行更改。“更新语句用于更新或更改记录。

更新语句语法如下:

UPDATE table_name SET column_name = new_value WHERE column_name operator value;

当使用'更新的语句,谨慎地构造一个在哪里的条款。“在哪里子句指定应该更新哪个或哪些记录。如果我们不用a '在哪里子句在执行更新语句时,我们将更新指定列中的所有数据。

让我们看看我们的'Movie_quotes的表。我们所有的引号都用标点结尾,除了终结者。这是一个关于如何使用'的完美例子。更新声明:

UPDATE Movie_quotes SET Q_TEXT = '我会回来的! '' WHERE Q_MOVIE = ' The Terminator ';

就像之前解释的,如果我们省略'在哪里,我们会更新所有的quotes行,并说“我会回来的!”通过只选择电影“终结者”的行,我们只更新了一列Q_TEXT'。

删除数据

当数据库被大量使用时,迟早有必要从数据库中删除过时的数据。我们可以只从表中删除几行,也可以删除整个表。

删除语句用于删除表中的行。该命令的语法如下:

DELETE FROM table_name WHERE column_name operator value;

就像'更新'声明,该'在哪里子句指定应该删除哪个或哪些记录。没有指定的'在哪里'条款,所有的行和记录将被删除:

从Movie_quotes删除;

让我们假设我们不再喜欢电影《阿甘正传》,想要删除电影中的台词。要从该影片中删除所有引号,我们将编写以下SQL命令:

DELETE FROM Movie_quotes WHERE Q_MOVIE = '阿甘正传';

终于,我们看够了这些电影。我们不再对电影台词感兴趣,而是把兴趣转向了音乐。我们开始收集歌词。有了我们目前学到的所有SQL知识,更改数据库非常简单。

首先,我们需要清理数据库中不再感兴趣的数据。要删除包含所有行的表,可以使用'删除表的声明。值得注意的是,删除表'语句不同于使用'删除语句,删除表中的所有记录。删除表中的所有记录只剩下表本身和所有定义的表结构;包括列数据类型定义和与该表相关的其他数据库信息。删除表将删除表、所有表定义以及表中的所有行。

删除表语句语法如下:

删除表table_name;

要从数据库中删除' Movie_quotes '表,可以这样写:

删除表Movie_quotes;

现在我们的数据库是空的,可以接受新数据了。我们可以从头开始CRUD过程,创建一个名为“Song_Lyrics”的新表,并从我们最喜欢的新歌曲构建一个歌词数据库。

结论

在本文中,我们介绍了所涉及的四个基本数据库函数CRUD:如何创建新数据、读取该数据、更新想要更改的数据,以及最后如何删除不想要的数据。这包括基本但最重要的SQL命令,如:创建表”、“插入”、“选择”、“更新”、“删除”和“下降”。

这些基本的SQL命令允许进行大量的数据操作,但重要的是要知道,每个所介绍的命令都有更多的选项和本文没有介绍的附加功能。总之,在开始使用数据库和新语言SQL时,这些基础知识应该能让SQL开发新手有一个良好的开端。

MySQL顶级课程

终极MySQL训练营:从SQL初学者到专家
柯尔特·斯蒂尔,伊恩·斯库诺弗
4.6 (53306)
畅销书
用于数据分析和商业智能的SQL - MySQL
365年职业生涯
4.6 (27138)
畅销书
MySQL数据库管理:初级SQL数据库设计
约翰·保罗的《Maven分析》
4.6 (950)
评价最高
Galera集群和MariaDB MySQL复制
哈迪Alnabriss
4.4 (159)
畅销书
数据分析SQL: MySQL商业智能初学者
约翰·保罗的《Maven分析》
4.7 (3661)
畅销书
创建一个Twitter社交网络克隆PHP,MySQL
Aizaz罗纳尔迪尼奥
4.4 (341)
高级SQL: MySQL数据分析和商业智能
约翰·保罗的《Maven分析》
4.7 (1779)
评价最高
使用Python使用MySQL数据库
约翰长老
4.4 (592)

更MySQL的课程

MySQL学生还学习

让你的团队。领导行业。

通过Udemy for Business订阅您组织的在线课程和数字学习工具图书馆。

请求一个演示