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

更新於 發佈於 閱讀時間約 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 是每頁的行數


全端網頁開發專業知識分享
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
※什麼是資料 : 說明: 「資料」(information/data) 是網路應用程式的核心。 使用者分享的照片、電商販賣的產品,或是搜索引擎提供的餐廳評價都是資料。 主要特徵: 生活中任何基本的事實 (fact) 或是值 (value) 都可以被稱為資料。例如:你的名字、你的生日。 因
建立一個屬於自己喜愛球員的清單。 ※ 專案開發環境 架設 Node.js 伺服器。 用 Express.js 進行全端開發。 用 MongoDB 資料庫。 ※ 專案開發技術 使用 Express handlebars,為球員清單做出佈局和局部樣板
緣起 在電子廠做了18年,從助理技術員變成高級技術員。原本只是個操作機台的檢驗員,目前的工作是負責品質管理。18年來也曾動過轉職的念頭,參加國家考試的高考、地方特考,結果就是名落孫山。為了增加自己的專業能力,提高自己的履歷能被看見的機會,也自費去學習專案管理和ISO 9001:2015 品質管理系
隨著JavaScript課程的學習的最後階段, Twitter專案不只考驗平時課程所學的技能,也讓我們提前預習在職場上與人合作完成專案的經驗。
為何會選擇記帳程式做專案? 網路上有很多各種記帳方式,用Excel方式來記帳士很多人熟悉的作法。但既然我已經學習了JavaScript這個程式語言,就想試看看如何藉由程式語言寫出一個簡易的記帳程式。 技術選擇方面 選擇Node.js是因為他是一個可以讓JavaScript 執行環境;我可以直接在電腦
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
※什麼是資料 : 說明: 「資料」(information/data) 是網路應用程式的核心。 使用者分享的照片、電商販賣的產品,或是搜索引擎提供的餐廳評價都是資料。 主要特徵: 生活中任何基本的事實 (fact) 或是值 (value) 都可以被稱為資料。例如:你的名字、你的生日。 因
建立一個屬於自己喜愛球員的清單。 ※ 專案開發環境 架設 Node.js 伺服器。 用 Express.js 進行全端開發。 用 MongoDB 資料庫。 ※ 專案開發技術 使用 Express handlebars,為球員清單做出佈局和局部樣板
緣起 在電子廠做了18年,從助理技術員變成高級技術員。原本只是個操作機台的檢驗員,目前的工作是負責品質管理。18年來也曾動過轉職的念頭,參加國家考試的高考、地方特考,結果就是名落孫山。為了增加自己的專業能力,提高自己的履歷能被看見的機會,也自費去學習專案管理和ISO 9001:2015 品質管理系
隨著JavaScript課程的學習的最後階段, Twitter專案不只考驗平時課程所學的技能,也讓我們提前預習在職場上與人合作完成專案的經驗。
為何會選擇記帳程式做專案? 網路上有很多各種記帳方式,用Excel方式來記帳士很多人熟悉的作法。但既然我已經學習了JavaScript這個程式語言,就想試看看如何藉由程式語言寫出一個簡易的記帳程式。 技術選擇方面 選擇Node.js是因為他是一個可以讓JavaScript 執行環境;我可以直接在電腦
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Day9-11 這幾天如火如荼地學寫資料庫,從最一開始的SELECT單一欄位數值 SELECT eyes FROM body (???)
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
1性別平等教育人才庫 2性別事件專業調查人才庫 3霸凌事件專業調查人才庫
※ 簡短說明Git 和 Git Flow 是什麼?如何應用? Git 是什麼? Git是一個分散式版本控制軟體,能夠紀錄檔案的狀態變化,以及協調多個開發者之間的工作。它允許團隊成員協作編輯和管理項目的代碼庫,並且能夠追蹤文件的歷史變更、恢復到以前的版本、合併不同版本的代碼,以及解決代碼衝突等。
※ Git(四) 空的資料夾無法被加入 Git 進行版本控制,但這個資料夾如果又是很重要的資料夾,你會怎麼處理? 當空的目錄無法被加入 Git 進行版本控制時,有以下的做法可以解決: 在那個空目錄裡隨便放一個檔案就行了。 在這個資料夾中添加一個名為 .gitkeep 的空檔案,讓 Git 能
※ Git(三) 什麼是 staging area? 在 Git 中,staging area是暫存區的意思,也被稱為索引(index)。透過一個git add 指令把檔案從工作目錄移至暫存區。再透過一個git commit 指令把暫存區的內容移至儲存庫。 當多人協作時你要開發個功能,但不
※ 關於Git (二) 請寫下從 Github 上複製一個專案下來,做一次遞交,然後推上去會用到的所有 git 指令。 複製專案(Clone) markdown-here: git clone https://github.com/adam-p/markdown-here.git 如果在訊息
關於Git(一) 版本管理系統是什麼?為什麼要用? 版本管理系統(Version Control System,VCS)是一種追蹤和管理項目代碼、文件和資源變更的工具。 工作流程上可防止每個人因使用自己的開發程式搭配不同且不相容的工具所引起的混亂。版本控制會同步處理版本,並確定變更不會與其他人
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Day9-11 這幾天如火如荼地學寫資料庫,從最一開始的SELECT單一欄位數值 SELECT eyes FROM body (???)
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
1性別平等教育人才庫 2性別事件專業調查人才庫 3霸凌事件專業調查人才庫
※ 簡短說明Git 和 Git Flow 是什麼?如何應用? Git 是什麼? Git是一個分散式版本控制軟體,能夠紀錄檔案的狀態變化,以及協調多個開發者之間的工作。它允許團隊成員協作編輯和管理項目的代碼庫,並且能夠追蹤文件的歷史變更、恢復到以前的版本、合併不同版本的代碼,以及解決代碼衝突等。
※ Git(四) 空的資料夾無法被加入 Git 進行版本控制,但這個資料夾如果又是很重要的資料夾,你會怎麼處理? 當空的目錄無法被加入 Git 進行版本控制時,有以下的做法可以解決: 在那個空目錄裡隨便放一個檔案就行了。 在這個資料夾中添加一個名為 .gitkeep 的空檔案,讓 Git 能
※ Git(三) 什麼是 staging area? 在 Git 中,staging area是暫存區的意思,也被稱為索引(index)。透過一個git add 指令把檔案從工作目錄移至暫存區。再透過一個git commit 指令把暫存區的內容移至儲存庫。 當多人協作時你要開發個功能,但不
※ 關於Git (二) 請寫下從 Github 上複製一個專案下來,做一次遞交,然後推上去會用到的所有 git 指令。 複製專案(Clone) markdown-here: git clone https://github.com/adam-p/markdown-here.git 如果在訊息
關於Git(一) 版本管理系統是什麼?為什麼要用? 版本管理系統(Version Control System,VCS)是一種追蹤和管理項目代碼、文件和資源變更的工具。 工作流程上可防止每個人因使用自己的開發程式搭配不同且不相容的工具所引起的混亂。版本控制會同步處理版本,並確定變更不會與其他人