線上 SQL 語法測試網站(SQL fiddle、MySQL Online)

這篇文章寫於 2021 年,文中的工具與版本可能已經更新,實作時請以官方文件為準。

本文目錄
  1. 一、SQL Fiddle 簡介
  2. 支援資料庫版本:
  3. 介面說明:
  4. 二、MySQL Online 簡介
  5. 介面說明:
  6. 三、題目:找出每個 department 中 score 最高的兩個人,並符合輸出結果的排序
  7. ⚒️ 生成題目資料表的 SQL :
  8. 目標輸出結果:
  9. 1. 用 SQL Fiddle 解題
  10. 2. 用 MySQL Online 解題

當朋友問你 SQL 語法問題時如果沒有現成的資料庫真的很難幫上忙,並且也不確定自己的回答是不是真的能解決問題;今天就來介紹兩個我常用的 SQL 語法測試網站,並透過解說朋友遇到的題目讓大家快速了解網站的使用方式。

一、SQL Fiddle 簡介
二、MySQL Online 簡介
三、題目:找出每個 department 中 score 最高的兩個人並以 score 進行排序
  1. 用 SQL Fiddle 解題
  2. 用 MySQL Online 解題

線上 SQL 語法測試網站(SQL fiddle、MySQL Online)(圖 1)

一、SQL Fiddle 簡介

網址:http://sqlfiddle.com/

支援資料庫版本:

Table sheetsu.com

介面說明:

  1. 選擇資料庫及版本
  2. DDL 區域:CREATE TABLE, INSERT 都在這個地方輸入,按下『Build Schema』即可生成 Schema;要先生成Schema才能執行SQL
  3. DML 區域:資料庫操作語言區域
  4. Result:顯示執行結果

介面說明:(圖 2)

二、MySQL Online 簡介

網址:https://paiza.io/en/projects/new?language=mysql

介面說明:

  1. 選擇測試語言:除了 MySQL 外,他還能測試 C、Java、R、php…
  2. 程式碼區域:他的DDL與DML是混合在一起的,所以要測試就全部貼上去
  3. Result:顯示執行結果

介面說明:(圖 3)

三、題目:找出每個 department 中 score 最高的兩個人,並符合輸出結果的排序

⚒️ 生成題目資料表的 SQL :

CREATE TABLE employee (
  id INT,
  name varchar(50),
  score INT,
  department_id  INT
);
CREATE TABLE department (
  id INT,
  name varchar(50)
);
INSERT INTO employee VALUES (1, 'John', 83,1);
INSERT INTO employee VALUES (2, 'Yannis', 88,2);
INSERT INTO employee VALUES (3, 'Victor', 83,1);
INSERT INTO employee VALUES (4, 'Jimmy', 83,3);
INSERT INTO employee VALUES (5, 'Richard', 88,1);
INSERT INTO employee VALUES (6, 'Hens', 82,2);
INSERT INTO employee VALUES (7, 'Peter', 89,2);
INSERT INTO employee VALUES (8, 'Brian', 77,1);
INSERT INTO employee VALUES (9, 'Kelvin', 90,3);
INSERT INTO employee VALUES (10, 'Ben', 80,3);

INSERT INTO department VALUES (1, 'Sales');
INSERT INTO department VALUES (2, 'Operator');
INSERT INTO department VALUES (3, 'Development');

原始碼:employee_score_question.sql(GitHub Gist)

目標輸出結果:

Table sheetsu.com

這個題目表面上看起來很簡單,實際做起來會遇到一些沒想到的問題,有興趣的小夥伴建議自己先玩玩不要直接看答案,文章後面也會說明這兩種編輯器的最大差異


1. 用 SQL Fiddle 解題

你的 SQL 版本會被限制在 5.6,你需要在許多好用函數都無法使用的狀態下完成這個題目

解題思路:因為 5.6 並沒有 row_number() 這個函數,所以我們要自己製作出來;另外多利用 subquery 的概念讓解答符合題目的輸出結果。

解答的原始碼在這裡喔!
解答的原始碼在這裡喔!

2. 用 MySQL Online 解題

你的 SQL 版本為 8.0,你解題的重點便在於對新的函數是否熟悉

解題思路:MySQL 8.0 是一個重大更新,ROW_NUMBER 這個函數就能讓你以輕鬆的姿態搞定這個題目,如果你不熟悉可以參考這份文檔。

解答的原始碼在這裡喔!
解答的原始碼在這裡喔!

我的解答僅供參考(尚未優化),有興趣的朋友可以在底下留言分享你的做法喔~希望這篇文章能幫助臨時需要寫 SQL 的朋友

Talk

留言討論

留言載入中…