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 BY
,ORDER 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写好了,续集看了。这就是这样一个历史悖论。
GO TO FULL VERSION