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