後端技術考古題-資料庫篇(下)

更新於 發佈於 閱讀時間約 6 分鐘

※ 資料庫與 SQL

※ 題目:

  1. 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。

※ 解答:

SELECT *					
FROM people
WHERE gender = 'M' AND age > 18

※ 說明:
這個查詢使用 SELECT 來選擇所有欄位(*表示所有),FROM 用於指定表名(在這裡是 people)
,而 WHERE 子句則用於指定篩選條件,以滿足 gender 為 "M" 且 age 大於 18



  1. 什麼情況要加入 index 索引?

※ 解答:

何謂資料庫索引

「索引 (indexes)」是資料庫提供的一個屬性之一。索引( index )就像是書的目錄,可以快速地找到內容所在的位置,目的是為了提高查詢速度以資料庫來說,不使用索引的話,就必須從第一條紀錄開始比對,直到找到符合的值為止。如果表格的規模非常大,就會讓查詢速度非常慢,因此一張好的資料表要有相對應的索引來幫助搜尋。

添加索引的情況:

  1. 頻繁的查詢操作:如果某個欄位經常被用於查詢,這個欄位上建立索引可以提高查詢效能。
  2. 唯一性約束:確保某個欄位的值是唯一的時候,可以在這個欄位上建立唯一索引。
  3. 排序和分組操作:經常對某個欄位進行order by , group by這種所謂排序或分組,則在該欄位上建立索引可以加速這些操作。
  4. 外鍵關係:在外鍵欄位上建立索引有助於提高查詢的效能,尤其是涉及到 JOIN 操作的時候。
  5. 範圍查詢:執行帶有範圍條件的查詢時,例如 BETWEEN 或 IN,在相應的欄位上建立索引可以提高查詢效能。
  6. 大型資料表:執行查詢時,索引可以減少搜索所需的時間。



3. 什麼是 Transaction?什麼時候會用到?

※ 解答:

何謂Transaction:

Transaction,中文翻作交易或事務,是資料庫執行過程中的一個「邏輯單位」,一個 transaction 中包含多個對資料庫操作的行為,每個 transaction 有兩種可能的結局:全部執行成功 or 全部不執行(只要其中一個行為失敗就會發生「還原 (rollback)」,回復過程中的操作)。假如我們可以把一整組 SQL 操作包裝成一筆完整的交易,在執行 SQL 時必須要全部執行完成,否則寧願都不要執行。

raw-image

什麼時候會用到:

當需要確保一系列操作的原子性、一致性、隔離性和持久性時,就需要使用Transaction這有助於保證應用程序的正確運行,防止在不同步操作中出現故障或不一致的情況。

常見的應用場景:

1. 金融交易: 在金融應用中,如銀行轉帳、付款和提款等操作,需要確保資金的正確轉移,並防止出現不一致的狀態。

2. 訂單處理: 在電子商務系統中,當用戶下單時,需要確保相關庫存的扣減和訂單的生成是一個不可分割的操作,以保證庫存和訂單的一致性。

3. 預訂系統: 在預訂系統中,如機票預訂、酒店預訂等,需要確保座位或房間的狀態在操作中是一致的,以避免重複預訂。

4. 資料庫更新: 在對資料庫進行複雜的更新、插入或刪除操作時,為了確保這些操作的一致性,可以將它們放在一個交易中。

5. 系統管理: 在進行系統管理操作時,例如配置文件的修改,需要確保修改操作是完整的,防止出現系統配置的不一致。

  1. 多用戶並發操作: 當多個用戶同時訪問資料庫時,可能會發生並發問題,使用交易可以確保這些操作之間的隔離性,防止相互影響。



4. 如何下 SQL 做分頁?

※ 解答:

在網頁中表格資料的呈現最怕就是資料量大到幾千筆甚至到萬筆查詢Loading過久,造成Server負荷不來的情況。因此通常會做一些分頁減輕查詢耗費資源與時間成本。

在 SQL 中,你可以使用 OFFSETFETCHLIMITOFFSET 來實現分頁。以下是兩種常見的 SQL 分頁方法的示例:

  • 使用 OFFSET 和 FETCH (SQL Server, PostgreSQL, MySQL 8.0+)
SELECT column1, column2, ...
FROM your_table
ORDER BY your_order_column
OFFSET (page_number - 1) * page_size ROWS
FETCH NEXT page_size ROWS ONLY;

※ 說明:
your_table 是你的表格名稱。
your_order_column 是你想要排序的列。
page_number 是你希望獲取的頁數。
page_size 是每頁的行數
  • 使用 LIMIT 和 OFFSET (MySQL, SQLite)
SELECT column1, column2, ...
FROM your_table
ORDER BY your_order_column
LIMIT page_size OFFSET (page_number - 1) * page_size;

※ 說明:
your_table 是你的表格名稱。
your_order_column 是你想要排序的列。
page_number 是你希望獲取的頁數。
page_size 是每頁的行數


留言
avatar-img
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
19會員
142內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
日前在LINE社群,有網友提出一個問題,要把資料進行分析,用日期來計算出將對應的資料。 原始資料,密密麻麻的數據,都看不清楚了 放大一點點 要把這些資料不同『料號』的各種『狀態』依據『日期』進行分析。 有興趣可以下載試著挑戰看看:檔案下載 作法有很多種,當然也可以用函數處
Thumbnail
在這個星光閃爍的數據宇宙中,SQL是一把鑰匙,開啟了通往知識寶庫的大門。想像一下,每一條SELECT語句都像是一段魔法咒語,喚醒沉睡在數據庫深處的信息。今天,我們就要一起踏上這段探秘之旅,將揭開SQL基本查詢指令的神秘面紗,學習如何巧妙地與數據對話。
Thumbnail
在這個星光閃爍的數據宇宙中,SQL是一把鑰匙,開啟了通往知識寶庫的大門。想像一下,每一條SELECT語句都像是一段魔法咒語,喚醒沉睡在數據庫深處的信息。今天,我們就要一起踏上這段探秘之旅,將揭開SQL基本查詢指令的神秘面紗,學習如何巧妙地與數據對話。
Thumbnail
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
Thumbnail
在用 QUERY 查詢資料時,你曾遇過在 WHERE 寫很多個 OR 的狀況嗎?有個更簡單好用的寫法推薦給你,來瞧瞧!
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們回傳student_id為101的這筆資料,並且列出它的"name"和"age"欄位。 題目的原文敘述 測試範例 Example 1: Input: +------------+---------+-----+ |
Thumbnail
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
Thumbnail
題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News