2.1 SQL简介

如果您有一个数据库 (DB),并且其中有一个包含一些数据的表,那么最常见的任务就是在该表中查找某些数据。这就是 40 年前发明 SQL 的目的。

SQL 代表结构化查询语言

最简单的 SQL 查询如下所示:

SELECT column1, column2, … columnN FROM table

假设您有一个员工表,其中包含您的初创公司员工的列表:

ID 姓名 职业 薪水 年龄 加入日期
1个 伊万诺夫伊万 程序员 100,000 25 2012-06-30
2个 彼得罗夫彼得 程序员 80,000 23 2013-08-12
3个 伊万诺夫谢尔盖 测试员 40,000 三十 2014-01-01
4个 拉比诺维奇·莫伊沙 导演 200,000 35 2015-05-12
5个 基连科阿纳斯塔西娅 办公室主管 40,000 25 2015-10-10
6个 瓦斯卡 1,000 3个 2018-01-01

你想写一个查询来显示employee names它们salaries,那么你需要写一个查询:

SELECT name, salary FROM employee

你会得到查询结果:

姓名 薪水
伊万诺夫伊万 100,000
彼得罗夫彼得 80,000
伊万诺夫谢尔盖 40,000
拉比诺维奇·莫伊沙 200,000
基连科阿纳斯塔西娅 40,000
瓦斯卡 1,000

如果你想显示你的表的所有列,那么你可以简单地写一个星号而不是列出所有列的名称。例子:

SELECT * FROM employee

你会得到查询结果:

ID 姓名 职业 薪水 年龄 加入日期
1个 伊万诺夫伊万 程序员 100,000 25 2012-06-30
2个 彼得罗夫彼得 程序员 80,000 23 2013-08-12
3个 伊万诺夫谢尔盖 测试员 40,000 三十 2014-01-01
4个 拉比诺维奇·莫伊沙 导演 200,000 35 2015-05-12
5个 基连科阿纳斯塔西娅 办公室主管 40,000 25 2015-10-10
6个 瓦斯卡 1,000 3个 2018-01-01

2.2 SQL查询高级视图

SQL 语言被设计为尽可能对用户友好。

首先,请求文本的大小写无关紧要。您可以编写 SELECT、Select 或 select,一切都会起作用。其次,不以任何方式考虑换行符。DBMS 仍会将查询变成一个长字符串,因此您可以随意编写它。

正如您可能已经猜到的那样,SELECT 和 FROM 关键字不受限制。否则就不会围绕 SQL 进行如此多的讨论。SQL 查询的扩展视图如下所示:

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING columns
ORDER BY sorting

借助关键字,WHERE您可以为所选行设置条件/过滤器。

示例 1。让我们编写一个查询,选择职业为“程序员”的员工:

SELECT * FROM employee WHERE occupation = 'Programmer'

我们得到以下查询结果:

ID 姓名 职业 薪水 年龄 加入日期
1个 伊万诺夫伊万 程序员 100,000 25 2012-06-30
2个 彼得罗夫彼得 程序员 80,000 23 2013-08-12

正如您所看到的,作为查询执行的结果,只显示员工的职业称为“Programmer”的行。

关键字GROUP BYORDER BY我们HAVING将在下一讲中介绍。在本文中,我们将分析更多包含 WHERE 一词的示例。

示例 2。现在让我们编写一个查询,向我们显示所有薪水大于 100K 的员工。这是它的样子:

SELECT * FROM employee WHERE salary > 100000

我们得到如下查询结果:

ID 姓名 职业 薪水 年龄 加入日期
4个 拉比诺维奇·莫伊沙 导演 200,000 35 2015-05-12

示例 3。现在让我们尝试一些更困难的事情。如何显示2015年录用的所有员工?像这样:

SELECT * FROM employee WHERE YEAR(join_date) = 2015

我们得到如下查询结果:

ID 姓名 职业 薪水 年龄 加入日期
4个 拉比诺维奇·莫伊沙 导演 200,000 35 2015-05-12
5个 基连科阿纳斯塔西娅 办公室主管 40,000 25 2015-10-10

在此查询中,我们使用了一个特殊函数YEAR(),该函数允许我们从日期中获取年份,然后将日期的年份与数字 2015 进行比较。

2.3 SQL查询中的注释

更重要的一点是 SQL 查询中的注释。评论是一个非常有用的东西。首先,您可以在其中写下解释和/或您的想法。其次,借助注释,您可以禁用损坏的代码。或者注释掉旧版本的代码。

SQL 和 Java 一样,也有单行和多行注释。此外,多行注释看起来就像在 Java 中一样。它的外观:


/*
 	comment text
 	comment text
 	comment text
*/
        

当然也可以单行使用。例子:


/*comment text*/
        

还有一种注释是“从行首到行尾”,类似于Java的“//”。只有在 SQL 中你需要写两个减号和一个空格。对这样一条评论的普遍看法:

-- comment text

例子:


        SELECT * FROM employee -- WHERE YEAR(join_date) = 2015 
        

在上面的例子中,我们注释掉了查询条件,所以MySQL只会执行查询:

SELECT * FROM employee

2.4 SQL发音

如果你和国外客户交流或者通过美国公司的在线面试,那么你可能会被问及你对续集语言的体验。你会诚实地说你没有和他一起工作,并立即不及格面试。

问题是,SQL 语言最初称为 SEQUEL,发音像续集( ˈsēkwəl),因此在美国和其他英语语言来源中,您经常听到的不是“escuel”,而是“sequel”。SQL写好了,续集看了。这就是这样一个历史悖论。