SQL查询:最多的前10名
数据库就像大游泳池。如果你不知道如何游泳,那么大游泳池可能是一个令人生畏的,黑暗的地方。然而,如果你知道如何游泳,同样的游泳池可能是一个令人惊叹的地方,充满阳光灿烂的日子。同样,如果您知道这10个最基本和简单的SQL查询,巨大的数据库可能很有趣。
研究证明,这10个查询仅占可以用SQL表达的整个查询集的3%。但是这3%覆盖了90%的数据库常规操作。在我们开始讨论它们之前,最好知道这10个查询适用于市场上所有类型的SQL引擎。对于SQL的介绍,可以试试这个专为SQL查询新手开设的课程。
揭秘SQL
SQL只是一个接口,它帮助您使用查询与系统的数据库进行通信。我们转动汽车的方向盘,而不去考虑轮轴上可能发生的机械反应。我们只关心转弯。类似地,当我们使用SQL时,我们只需要触发简单的查询来从数据库中检索数据,而不需要考虑内部数据库操作。
有不同类型的SQL引擎可以在线免费使用。但是,对于初学者,我推荐SQLite3在这里下载。
通过键入sqlite test.db,从命令行运行它
设置好之后,屏幕上应该会出现一个SQL提示符
创建一个表
通过触发以下查询来开始创建空表
创建表student (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
这将创建一个名为“学生”的表,其中包含0行。此表将存储学生的记录。它将有学生证,学生名称和学生年龄。它的结构将是这样的:
ID(主键) | 名称 | 年龄 |
在这里,列ID是一个主键。这意味着该列只能有唯一的值。它也不能留空。名称列可以有字符,年龄列将有年龄的数字。
试试这个课程更实用的SQL技能。
现在,我们将逐一处理这10个查询。
1。在表中插入记录
在表中插入数据非常容易。只需键入以下查询
INSERT INTO student (id, name, age) VALUES (' 1 ', ' alan ', 28);
在INSERT INTO语句中,按顺序在表名之后指定列名,然后在values关键字之后指定所需的值。
在触发这个查询之后,我们的表看起来像这样:
ID | 名称 | 年龄 |
1 |
艾伦 | 28. |
我们可以触发更多这样的查询来填充表中的记录。
Insert into student (id, name, age) values (' 2 ', 'amy', ' 26 ');Insert into student (id, name, age) values (' 3 ', 'bob', ' 27 ');Insert into student (id, name, age) values (' 4 ', 'chris', ' 28 ');Insert into student (id,name, age) values (' 5 ', 'dan', ' 26 ');
现在表格变成了。
ID | 名称 | 年龄 |
1 | 艾伦 | 28. |
2 | 艾米 | 26. |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
2.查看表中的所有记录。
这是所有查询中最简单也是最常用的查询。只要输入
SELECT * FROM student;
此查询的结果将显示表中存在的所有行。
ID | 名称 | 年龄 |
1 | 艾伦 | 28. |
2 | 艾米 | 26. |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
我们还可以在SELECT语句中使用ORDER BY子句,以以特定顺序排列显示的结果。例如,
选择*从学生订单到年龄;
会给你:
ID | 名称 | 年龄 |
2 | 艾米 | 26. |
5. | 丹 | 26. |
3. | 鲍勃 | 27. |
1 | 艾伦 | 28. |
4. | 克里斯 | 28. |
产量按年龄递增的顺序排列。如果希望按降序排列显示,可以在查询中的列名后使用DESC关键字。
3.仅从表中查看选定的记录
如果表中有大量行,我们不希望所有记录填充我们的显示屏,则SQL为我们提供了仅查看所选行的选项。
SELECT COUNT(1) FROM student; / /查询编号
这个查询的输出将是
ID | 名称 | 年龄 |
1 |
艾伦 | 28. |
如果我们火:
从学生中选择Count *;
它将返回我们表格的行数。我们还可以在我们的查询中使用Max和Min功能。例如,如果我们想检索具有最大年龄的学生的详细信息,我们可以发射:
从学生中选择ID,Name,Max(年龄);
我们会得到:
ID | 名称 | 年龄 |
1 | 艾伦 | 28. |
4. | 克里斯 | 28. |
我们还可以检查数字列的和。例如,
从学生选择总和(年龄);
输出为135。
记住,我们可以只使用数字列的MAX, MIN, SUM函数。将这些函数与文本列一起使用将抛出错误。
4。删除表中的记录
要从表中删除所选行,只需触发以下查询:
DELETE FROM student WHERE name = ' alan ';
这个查询将删除表' student '中' name '列有' alan '值的整行或多行。
在我们的情况下,此查询的结果将在下表
ID | 名称 | 年龄 |
2 | 艾米 | 26. |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
休息时间!
“一个SQL查询进入一条栏,走到两个桌子,问:”我可以加入你吗?“
我有一个很好的笑声。继续!
5。在表中更改现有记录中的数据
假设我们希望在桌上改变名为“amy”的学生的年龄。我们会发射此查询:
UPDATE student SET age = 22 WHERE name = ' amy ';您可能已经注意到,我们在“where values are characters”中指定了name。这是必须的。
现在如果我们解雇:
SELECT * FROM student;
输出如下表:
ID | 名称 | 年龄 |
2 | 艾米 | 22. |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
在使用WHERE子句触发UPDATE或DELETE查询时要小心。假设在我们的表' student '中有不止一个名为' Amy '的学生。在这种情况下,所有名字为“Amy”的学生的年龄将被更新为22岁。这就是为什么在更新或删除时总是首选在WHERE子句中使用PRIMARY KEY。
在更改列中的数据时,还需要注意列中的数据类型。数字列中只能有数字,而文本列中可以有文本。这意味着如果我们试图使用UPDATE语句将age = ' Amy '放到age列中,SQL将抛出异常。您可以了解更多有关SQL中发生的错误和异常类型的信息。关于这一点,请参阅这门课上另一个常见的例子。
6.查看表格的记录,而不知道确切的细节
在现实生活中,当我们与数据库交互时,很有可能无法准确地知道任何列值。例如,如果我是学校的一名数据操作员,我可能会知道我们学校有一个学生叫丹,因为我可能听到其他老师谈论他。现在我想看看丹的全部记录,但我不知道他的名字怎么拼。不管是' Dan '还是' Den '在这种情况下,我们可以使用SQL提供的LIKE操作符。
我们将触发以下查询。
SELECT * FROM student WHERE name LIKE ' d%n ';
此查询的输出将是
ID | 名称 | 年龄 |
5. | 丹 | 26. |
7.在where子句中使用多个条件来检索记录
要了解使用此参数的要求,请首先在我们的表中插入一行。现在你应该自己尝试,我不会告诉你语法。尝试在我们的表“学生”中添加一行,ID为6,名称为“丹”和年龄为24。
我们的表现在变成了
ID | 名称 | 年龄 |
2 | 艾米 | 22. |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
6. | 丹 | 24. |
现在,如果我们发现我们的查询
SELECT * FROM student WHERE name = ' dan ';
那么输出将是
ID | 名称 | 年龄 |
5. | 丹 | 26. |
6. | 丹 | 24. |
所以现在,我们观察到我们无法使用Where子句中的名称值来获取唯一的记录。这里出现了需要将多个条件组合在其中的WHERE子句中,这些条件可以使用诸如和或。例如,如果我们火:
SELECT * FROM student WHERE name = ' dan ' AND age = 24;
我们得到以下输出
ID | 名称 | 年龄 |
6. | 丹 | 24. |
您还可以在WHERE子句中组合和&或条件,以更进一步地改进您的搜索。例如,如果我们开火
选择*来自名称='丹'或年龄> 25的学生
输出将
ID | 名称 | 年龄 |
3. | 鲍勃 | 27. |
4. | 克里斯 | 28. |
5. | 丹 | 26. |
6. | 丹 | 24. |
您可以使用不同的条件,或者,或,<,>在组合中或单独使用,或者在where子句中获取所需的行。尝试自己这样做。
学习如何使用SQL查询和操作Oracle关系数据库中的数据的最佳实践。
8.仅从表中查看所选列
如果我们触发一个查询
SELECT name FROM student WHERE年龄为25
显示如下输出
名称 |
鲍勃 |
克里斯 |
丹 |
我们可以观察到学生的名字是印刷的。在这里,由于在Where子句中指定的条件,我们只有年龄的年龄的年龄大于25的名称。
我们还可以在SELECT语句中使用多个列名,用一个,
例如:
查询学生姓名、年龄
将此作为输出:
名称 | 年龄 |
艾米 | 22. |
鲍勃 | 27. |
克里斯 | 28. |
丹 | 26. |
丹 | 24. |
您还可以更改屏幕上显示的列序列。例如:
查询学生年龄、姓名
会给出以下输出吗
年龄 | 名称 |
22. | 艾米 |
27. | 鲍勃 |
28. | 克里斯 |
26. | 丹 |
24. | 丹 |
9.了解表格的结构
它发生在我相当多的时候,我在我的数据库中创建了一个表,我忘记了它有什么所有的列和哪列是主键。我感谢各种SQL引擎的设计者在设计SQL引擎时,将像我这样的人铭记于心。通过一个非常简单的查询,您可以了解所创建的表的结构的完整细节。
不同的SQL引擎对它有不同的命令。例如在sqlite3中,命令是
. schema的学生;
在PostgreSQL中呢\ d学生
MySQL使用下面的命令描述学生;
其中' student '是表名。
10.检查查询性能
这是一个高级查询。如果您需要弄清楚查询太慢的原因,则特别有用。触发查询
SELECT * FROM student; / /查询计划
您可以在SQL语句之前使用EXPLAIN来获得查询各个部分的计时拆分。这对于挖掘查询缓慢背后的原因很有用。
在PostgreSQL中,您可以在查询之前使用解释和解释分析。这PostgreSQL的初学者指南可以指导你完成这个过程。
在SQLite3中,可以在查询之前使用EXPLAIN QUERY PLAN。要学得更多,尝试SQL培训简介。
并且那是前10名!有关更全面的培训,请尝试以下课程: