JavaRush /Java Blog /Random-TW /我們分析資料庫和 SQL 語言。(第 4 部分 - 檢查作業) - “Java 專案從 A 到 Z”
Roman Beekeeper
等級 35

我們分析資料庫和 SQL 語言。(第 4 部分 - 檢查作業) - “Java 專案從 A 到 Z”

在 Random-TW 群組發布
有關建立 Java 專案的系列文章中的一篇文章(其他資料的連結位於最後)。其目標是分析關鍵技術,結果是編寫一個電報機器人。之前關於 資料庫的文章和作業分析1、2、3。對於所有有耐心和忍耐力的人,對於所有和我一起閱讀第四篇文章的人 - 幹得好。正如人們所說,走的人才能掌握路。本週將發布有關資料庫的最後一篇文章,其中我們將討論關係和連接的類型。但在我們處理新資訊之前,讓我們先檢查一下我們的作業……我真的感覺自己像個老師。別生我的氣:我沒有受過教育,這是肯定的。由於上週對遙控器的詳細檢查佔據了大部分材料,所以我決定將作業分析和新材料複習分成兩部分。「Java 專案從頭到尾」:我們分析資料庫和 SQL 語言。 第 4 部分 - 檢查作業 - 1

其實,作業分析

我非常高興有人從事 PD 並談論它。這很酷!我盡可能確信,光是閱讀而不鞏固知識是一條沒有出路的路。因此,每個做過或試圖做的人——尊重。讓我提醒您任務的條件:
  1. 了解HAVING運算子並為範例中的表格編寫範例查詢。如果您需要添加一些欄位或更多值以使其更清晰,請新增它們。如果有人願意,請在評論中寫下您的示例解決方案 - 這樣我也可以在有時間時檢查它。
  2. 安裝 MySQL Workbench 以透過 UI 操作資料庫。我認為我們已經在控制台上進行了足夠的練習。連接到資料庫。如果您使用其他東西來處理資料庫,請隨意跳過此任務。在這裡以及以後我將僅使用 MySQL Workbench。
  3. 使用我們的資料編寫收據請求:
    1. 最小/人口最多的國家;
    2. 該國的平均居民人數;
    3. 名稱以「a」結尾的國家的平均居民人數;
    4. 人口超過四百萬的國家數量;
    5. 依居民數量遞減對國家進行排序;
    6. 依自然順序依名稱對國家/地區進行排序。

我們來談談 HAVING

了解 Have 運算子可以幫助您通過不只一次有 SQL 問題的面試。因此,了解它是極其重要的。碰巧您不能使用聚合函數的條件(SUM、MIN、MAX、AVG)。此外,HAVING 用於分組欄位。這是什麼意思?例如,如果我們想要得到城市平均居民數超過 50,000 人的國家,就不能不使用 HAVING。據我了解,這樣做是因為聚合發生在WHERE語句執行之後,不可能向其添加稍後計算的聚合值。即使到目前為止我的觀點並沒有增加太多的理解,你也可以簡單地接受這個事實並接受它。在程式設計中,經常會發生這樣的情況:如果某件事在某個時刻不清楚,很可能意味著大腦還沒有消化它。帶著這樣的想法入睡,第二天一切都會變得更加清晰。

安裝 MySQL 工作台

在這裡以及以後我將使用 Workbench 進行查詢。我將向您展示安裝和建立資料庫連線所需的內容。這是 Oracle 的產品,因此您只需訪問他們的網站並選擇您想要的版本和作業系統。為此,請點擊此連結"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 2在這裡您可以準確地選擇您需要的作業系統。點擊“下載”,但我們不會看到此窗口,而是看到此窗口:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 3不要迷路,只需查找名為“不,謝謝,只需開始我的下載”的按鈕,下載就會開始。他們為什麼要這麼做?也許,讓更多的人註冊他們,這對我們來說並不重要。下載成功後,執行安裝檔。在MacOS上,它看起來像這樣:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 4只需拖曳圖示即可,安裝完成。不像安裝 MySQL 本身那麼困難,對吧?或者我們只是習慣它並且變得更有經驗;) 這項任務的第二部分是建立與我們的資料庫的連接。為此需要什麼?點選 MySQL Connections 旁邊的加號:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 5在出現的視窗中,輸入必要的資料:
  • 連接名稱- 我們的連接的名稱。名字盡量寫清楚,以免以後辨識時出現問題。我將此連接命名為JRTB_DB
  • 主機名稱- 將已設定為本機127.0.0.1(又稱 localhost)。在我們的例子中,不需要更改任何內容,因為資料庫安裝在電腦上,但如果資料庫安裝在其他地方,則需要相應更改主機(運行資料庫的電腦的 IP);
  • 使用者名稱- 如果需要,您也可以指定您的使用者。如果您沒有在此鍵中添加任何內容,請保持不變;
  • 密碼- 點擊儲存在鑰匙圈中並準確設定您為自己設定的密碼。我讓一切變得簡單——root
要檢查連接是否有效,請點擊「測試連接」"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 6好吧,如果一切都正確完成,結果很快就會出現:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 7現在我們在資料庫中有一個已儲存的連接,我們不需要建立連接並填寫每次都在名稱和密碼中。這種幸福感將如下所示:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 8我們進入新建立的連接並看到請求視窗。為了確保一切正確,讓我們檢查資料庫列表,轉到我們的資料庫並獲取有關城市的所有數據:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 9在這裡我們可以全權委託我們需要的資料。第一部分負責我們輸入的腳本。接下來,在結果網格中,我們看到腳本中最後一個操作的結果。操作輸出顯示操作清單及其結果。一件非常有用的事情,我想告訴你:在它的幫助下你可以監控某些腳本的執行速度。為什麼它如此重要?應用程式中任務執行速度最常見的問題之一是資料庫中查詢執行的速度。在這裡您可以快速方便地手動檢查它們。

我們寫下必要的請求

我們只有 7 個請求需要完成,開始吧!

  1. 獲得人口最多的國家。在這裡你可以巧妙地走幾條路:

  • 根據國家表

然後我們只需要按人口對查詢進行排序並只獲取一筆記錄。為此,您需要在腳本末尾添加LIMIT運算符並指定所需數量: $ SELECT * FROM Country ORDER BY Population DESC LIMIT 1;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 10

  • 根據城市表

這裡一切都更有趣,因為請求會更複雜,但也更有趣。由於我們仍然不知道有關連接的信息,因此只能獲取國家/地區 ID: $ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) DESC LIMIT 1; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 11在這裡,我們做了一件很酷的事情 - 我們收集了每個國家所有已知城市的人口總和,按這個總和排序並取出第一個元素。嗯,很棒嗎?我很高興:D 在此之後,您立即感覺自己像一個查詢大師......(當然,不會太久))

  1. 獲得最小的國家。在這裡你可以狡猾地走幾條路

在這種情況下,一切都將完全相同。唯一的區別是排序會顛倒——僅此而已。因此,我簡單寫下請求:

  • 根據城市表

$ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) LIMIT 1;

  • 根據國家表

$ SELECT * FROM 國家/地區 ORDER BY 人口 LIMIT 1; 並親自看看結果!

  1. 該國平均居民人數

這裡的技術規格又不準確,就好像經理寫的一樣......為什麼我決定這個?因為不清楚在哪個表中工作。但這是正常的:根本不存在所有事情都會立即清晰易懂的任務。因此,您需要仔細閱讀任務,如果您有疑問,請立即詢問!沒錯,就是一句話。考慮到資料庫中的數據,我們將使用城市數據進行搜尋。為此,請撰寫以下查詢: $ SELECT Country_id, AVG(population) FROM city GROUP BY Country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 12這裡很簡單:我們使用 AVG 函數並按國家/地區將城市記錄分組。

  1. 名稱以“a”結尾的國家的平均居民數量

根據要求,這裡會略有變化。在進行分組之前,我們需要新增按名稱篩選。在發表這篇文章之前,我和所有學生一樣做了功課,我明白這個問題沒有連結就無法解決。為什麼?因為除了國家ID之外,我們還需要得到他的名字。如果不將兩個資料表連接到一筆記錄中,就無法完成此操作。因此,我當然會完成這個任務,但這是我的門框...))))我想在請求中使用 LIKE 來提出一個任務...) $ SELECT ci.country_id, AVG(ci.population ) FROM city ci INNER JOIN Country co ON ci.country_id = co.id WHERE co.name LIKE "%a" GROUP BY Country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 13這裡發生了什麼事?首先,我們使用外鍵 Country_id 連接城市和國家/地區表中的記錄,按國家/地區名稱進行過濾,以便它們以“a”結尾,然後才按 Country_id 進行分組。

  1. 人口超過四百萬的國家數量

這裡我們只需要使用 COUNT 函數並且加入對人口的篩選: $ SELECT COUNT(*) from country WHERE Population > 4000000; 結果我們發現這樣的國家有3個,對嗎?是的,只有摩爾多瓦沒有達到這個里程碑。

  1. 依居民數量減少對國家進行排序

為此,我們需要使用我們已經知道的 ORDER BY 運算子。但請記住,預設情況下排序是按自然順序的。對於數字,這意味著它按升序排序,對於字串,這意味著它從第一個字元開始排序。如果我們需要降序排序,則需要自然排序的逆排序: $ SELECT * FROM Country ORDER BY Population DESC;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 14

  1. 按自然順序按名稱對國家/地區進行排序

這就是自然秩序的知識將派上用場的地方。因為它是預設的,所以對我們來說小菜一碟: $ SELECT * FROM Country ORDER BY name;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 15

而不是輸出

碰巧作業解決方案的規模會很大,所以我們會破例:我將透過支票發布這篇文章,週五我將發布帶有連接和聯接的新資料。感謝大家的閱讀。直到星期五!

此系列所有資料的清單位於本文開頭。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION