[w3school 參考連結](https://www.w3schools.com/sql/default.asp) [sqlite data type](https://www.sqlite.org/datatype3.html) ## SELECT 與 FROM `SELECT * FROM table_name;` `SELECT` 敘述用於指定要查詢的欄位,`FROM` 敘述用於指定資料表名稱。`SELECT *` 表示選擇資料表的所有欄位。 ```sql= SELECT * FROM album ``` - 篩選資料時 (select) 一定要有想要篩選的目標與要操作的表格 - 篩選語法寫完後面記得要接著一個 `;` ### 選擇單一欄位 `SELECT column_name FROM table_name;` `SELECT column_name` 表示只選擇指定的欄位。`column_name` 是要查詢的欄位名稱。 ### 選擇多個欄位 `SELECT column1, column2 FROM table_name;` - 若想指定多個欄位,可用逗號將多個欄位名稱隔開。 ## AS 別名用法 AS 關鍵字用於給表或欄位指定一個別名,這對於簡化複雜查詢的欄位名稱非常有用。 ### 欄位取別名 ```sql= SELECT first_name AS 名字, last_name AS 姓氏 FROM employees; ``` ### 表格取別名 ```sql= SELECT e.name, e.department FROM employees AS e; ``` ## Distinct 用法 ```sql= SELECT DISTINCT column_name FROM table_name; ``` 這會從 table_name 表中選擇 column_name 列的所有唯一值。 ## WHERE 子句的使用 WHERE 關鍵字用於過濾查詢結果,僅顯示符合特定條件的記錄。 ```sql= SELECT * FROM employees WHERE department = 'Sales'; ``` - 此查詢將從 employees 表中選取所有在銷售部 (Sales) 工作的員工。 ### 比較運算子 WHERE 子句中常用的比較運算符包括: - =:等於 - != 或 <>:不等於 - >:大於 - <:小於 - >=:大於等於 - <=:小於等於 ```sql= SELECT * FROM products WHERE price > 100; ``` ### 邏輯運算子 - AND:所有條件必須為真 - OR:至少一個條件為真 - NOT:否定後面的條件 ```sql= SELECT * FROM employees WHERE department = 'Sales' AND salary > 5000; ``` ### 範圍條件 - BETWEEN:在兩個值之間(包括邊界值) ```sql= SELECT * FROM products WHERE price BETWEEN 50 AND 100; ``` ### 集合條件 - IN:指定欄位的值匹配列出的任何一個值 ```sql= SELECT * FROM employees WHERE department IN ('Sales', 'HR'); ``` ### LIKE 用於字串匹配 - LIKE 關鍵字用於在 WHERE 子句中進行模式匹配。% 表示任何數量的字符,_ 表示單一字符。 ```sql= SELECT * FROM customers WHERE name LIKE 'A%'; ``` 這個查詢將從 customers 表中選取所有名字以字母 'A' 開頭的顧客。 - [練習](https://leetcode.com/problems/big-countries/description/) ## 排序(ORDER BY) ORDER BY 關鍵字用於對查詢結果進行排序。 ```sql= SELECT name, age FROM employees ORDER BY age DESC; ``` 這個查詢將返回所有員工的名字和年齡,按年齡從大到小排序。 - 如果想要由小到大那就可以使用 ORDER BY xxx ASC - [練習](https://leetcode.com/problems/article-views-i/description/) ## 限制查詢結果(LIMIT 和 TOP) LIMIT 和 TOP (這個語法不是每個資料庫語言都可以用)用於限制查詢結果的數量。 ```sql= SELECT * FROM products ORDER BY price DESC LIMIT 5; ``` 這些查詢將返回價格最高的前五個產品。 ## Join ```SQL= SELECT column1, column2, ... FROM table1 [JOIN type] JOIN table2 ON table1.column = table2.column; ``` - 類型介紹: - `INNER JOIN`: 只返回兩個表中交集的。 - `LEFT JOIN` (或 `LEFT OUTER JOIN`): 返回左表的所有 Row,如果右表中有匹配的 Row,則返回匹配的資料,否則返回 NULL。 - `RIGHT JOIN` (或 `RIGHT OUTER JOIN`): 返回右表的所有 Row,如果左表中有匹配的 Row,則返回匹配的資料,否則返回 NULL。 - `FULL JOIN` (或 `FULL OUTER JOIN`): 返回左右兩個表中的所有 Row,如果其中一邊有匹配的 Row,則返回匹配的資料,否則返回 NULL。 ```SQL= SELECT Employees.Name, Departments.DepartmentName FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID; ``` ### 表格取別名 ```SQL= SELECT emp.Name AS EmployeeName, dept.DepartmentName AS DepartmentName FROM Employees AS emp JOIN Departments AS dept ON emp.DepartmentID = dept.DepartmentID; ``` - [ ] [練習](https://leetcode.com/problems/combine-two-tables/description/) - [ ] [練習](https://leetcode.com/problems/customers-who-never-order/description/) - [ ] [練習](https://leetcode.com/problems/product-sales-analysis-i/description/) - [ ] [練習](https://leetcode.com/problems/employee-bonus/description/) ### Self Join 與同個表格做 Join ```SQL= SELECT e1.Name AS EmployeeName, e2.Name AS ManagerName FROM Employees e1 LEFT JOIN Employees e2 ON e1.ManagerID = e2.EmployeeID; ``` - [ ] [練習](https://leetcode.com/problems/employees-earning-more-than-their-managers/description/) ## 運算 ### 數學運算 - 加法:計算兩個欄位的和。 - 範例:`SELECT quantity1 as qty1, quantity2 as qty2, (quantity1 + quantity2) AS total_quantity FROM orders;` - 減法:計算兩個欄位的差。 - 範例:`SELECT sale_price, cost_price, (sale_price - cost_price) AS profit FROM products;` - 乘法:計算兩個欄位的乘積。 - 範例:`SELECT length, width, (length * width) AS area FROM rectangles;` - 除法:計算兩個欄位的商。 - 範例:`SELECT total_distance, total_time, (total_distance / total_time) AS speed FROM trips;` ### 字符串運算 - 字符串連接:將兩個字符串欄位連接起來。 - 範例:`SELECT first_name, last_name, (first_name || ' ' || last_name) AS full_name FROM employees;` - 字符串操作:使用函數進行字符串操作。 - 範例:`SELECT name, UPPER(name) AS upper_name, LOWER(name) AS lower_name FROM customers;` ### 日期運算 - 日期相減:計算兩個日期之間的天數差。 - 範例:`SELECT start_date, end_date, (end_date - start_date) AS duration FROM projects;` - 日期加減:增加或減去特定天數。 - 範例:`SELECT order_date, (order_date + INTERVAL '7 days') AS delivery_date FROM orders;` ### 邏輯運算 - 邏輯運算:使用邏輯運算符來計算布爾值。 - 範例:`SELECT id, age, (age > 18 AND age < 65) AS is_working_age FROM persons;` ## Group by ### COUNT 函數 - **說明**:計算表中 row 數。 - **應用**:計算所有學生的數量。 - **範例**:`SELECT COUNT(*) AS total_students FROM students;` ### SUM 函數 - **說明**:計算列中所有值的總和。 - **應用**:計算所有學生年齡的總和。 - **範例**:`SELECT SUM(age) AS total_age FROM students;` ### AVG 函數 - **說明**:計算列中所有值的平均值。 - **應用**:計算所有學生年齡的平均值。 - **範例**:`SELECT AVG(age) AS average_age FROM students;` ### MAX 函數 - **說明**:找出列中的最大值。 - **應用**:找出最高年齡。 - **範例**:`SELECT MAX(age) AS max_age FROM students;` ### MIN 函數 - **說明**:找出列中的最小值。 - **應用**:找出最低年齡。 - **範例**:`SELECT MIN(age) AS min_age FROM students;` ### GROUP BY 子句與聚合函數 - **說明**:將結果集按照一個或多個列進行分組,通常與聚合函數一起使用。 - **應用**: - 按照年級分組,計算每個年級的學生數量。 - 按照年級分組,計算每個年級的平均年齡。 - **範例**: - `SELECT grade, COUNT(*) AS total_students FROM students GROUP BY grade;` - `SELECT grade, AVG(age) AS average_age FROM students GROUP BY grade;` ### Group 練習 - [練習](https://leetcode.com/problems/classes-more-than-5-students/description/) - [練習](https://leetcode.com/problems/invalid-tweets/description/) 結合 Distinct - [練習](https://leetcode.com/problems/find-total-time-spent-by-each-employee/description/) ### HAVING 子句與聚合函數 - **說明**:過濾分組後的結果集,通常與聚合函數一起使用。 - **應用**: - 按照年級分組,顯示學生數量大於等於 2 的年級。 - 按照年級分組,顯示平均年齡大於 14 的年級。 - **範例**: - `SELECT grade, COUNT(*) AS total_students FROM students GROUP BY grade HAVING COUNT(*) >= 2;` - `SELECT grade, AVG(age) AS average_age FROM students GROUP BY grade HAVING AVG(age) > 14;` ### 複習語法順序 1. **FROM**:指定資料來源表或視圖。 2. **WHERE**:用來篩選資料。 3. **GROUP BY**:將資料進行分組。 4. **HAVING**:篩選分組後的資料(通常與聚合函數一起使用)。 5. **SELECT**:選擇要顯示的資料列。 6. **ORDER BY**:指定結果集的排序順序。 ```sql= SELECT column1, column2, aggregate_function(column3) FROM table_name WHERE condition GROUP BY column1, column2 HAVING condition ORDER BY column1, column2; ``` ### Group + Having 練習 - [練習](https://leetcode.com/problems/bank-account-summary-ii/description/) ### 作業 - [回家作業](https://leetcode.com/problems/average-selling-price/description/) ### 複習 - [group having](https://leetcode.com/problems/actors-and-directors-who-cooperated-at-least-three-times/description/) ## Date 資料 1. DATE 資料類型 定義:DATE 資料類型用來存儲年、月和日。它的格式通常為 'YYYY-MM-DD'。 範圍:DATE 類型的範圍從 '1000-01-01' 到 '9999-12-31'。 2. DATE 資料的常用操作 2.1. 日期格式化和顯示 `SELECT CURRENT_DATE;` -- 獲取當前日期 ### 練習 1. 根據出生日期計算出他的年紀 2. 過濾出年紀介於 15~20 之間的資料 - [ ] [時間過濾](https://leetcode.com/problems/the-latest-login-in-2020/description/) ## Casting 目標:將數據從一種數據類型轉換為另一種數據類型 ```sql= -- 範例 1: 將整數轉換為字符型 SELECT CAST(123 AS CHAR); -- 範例 2: 將字符型轉換為日期型 SELECT CAST('2024-06-17' AS DATE); -- 範例 3: 將字符型轉換為浮點型 SELECT CAST('123.45' AS REAL); ``` ## CASE 語法 目標:根據條件返回不同的結果 ```sql= -- 範例 1: 使用 CASE 語法進行簡單條件檢查 SELECT employee_id, first_name, last_name, CASE WHEN salary > 5000 THEN 'High Salary' WHEN salary BETWEEN 3000 AND 5000 THEN 'Medium Salary' ELSE 'Low Salary' END AS salary_category FROM employees; -- 範例 2: 使用 CASE 語法進行複雜條件檢查 SELECT order_id, order_date, customer_id, CASE WHEN order_status = 'Completed' THEN 'Order Completed' WHEN order_status = 'Pending' THEN 'Order Pending' WHEN order_status = 'Cancelled' THEN 'Order Cancelled' ELSE 'Unknown Status' END AS order_status_description FROM orders; ``` ### 練習 - 根據他的年紀做區分,分成 child(0~17), adult(19~64), elder(65以上) - [ ] [case](https://leetcode.com/problems/calculate-special-bonus/) - [ ] [triangle](https://leetcode.com/problems/triangle-judgement/description/) --- ## 補充 這些語法差異主要是由於不同的資料庫管理系統(DBMS)之間的特性和實現方式不同。每個 DBMS 都有自己的一套 SQL 方言,這意味著某些 SQL 語法在一個系統上有效,但在另一個系統上可能無效。以下是一些原因解釋為什麼會出現這些差異: ### 1. 資料庫管理系統的特性和功能差異 **SQL Workbench** 通常用於連接和操作多種資料庫管理系統,如 MySQL、PostgreSQL、Oracle、SQL Server 等。這些資料庫系統有許多高級功能和擴展,支援複雜的 SQL 語法和功能,如存儲過程、觸發器、視圖、高級索引和全文檢索等。 **SQLite** 是一個輕量級的嵌入式資料庫,設計目的是簡單、高效、適合用於桌面應用和移動應用中。它缺少一些大型資料庫系統中的高級功能,因此不支援某些複雜的 SQL 語法和功能。 ### 2. SQL 標準的實現差異 雖然所有資料庫系統都基於 SQL 標準,但每個系統對標準的實現方式有所不同,有些系統會擴展標準以提供額外的功能。例如: - **MySQL** 和 **PostgreSQL** 支援窗口函數(window functions)、公共表表達式(CTE)和自定義函數。 - **Oracle** 支援層次查詢(hierarchical queries)、快照視圖(materialized views)等。 - **SQLite** 相對簡單,支援的 SQL 語法較少,不支援存儲過程、觸發器等高級功能。 ### 3. 特定資料庫的優化和擴展 不同的資料庫系統會針對特定的應用場景進行優化和擴展,例如: - **MySQL** 有自己的特定語法來處理自增列、全文檢索和分區。 - **PostgreSQL** 支援 JSON 數據類型和操作,提供豐富的擴展功能。 - **SQLite** 強調輕量級和嵌入式,不支援一些需要大量資源的高級功能。 ### 例子 1. **CTE(Common Table Expressions)**: - **MySQL / PostgreSQL** 支援: ```sql WITH RECURSIVE cte AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM cte WHERE n < 10 ) SELECT * FROM cte; ``` - **SQLite** 版本較早時不支援,3.8.3 以後版本開始支援 CTE。 2. **窗口函數**: - **PostgreSQL** 支援: ```sql SELECT department, employee, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank FROM employees; ``` - **SQLite** 在 3.25.0 版本以後開始支援窗口函數。 3. **存儲過程**: - **MySQL** 支援: ```sql DELIMITER // CREATE PROCEDURE SimpleProc (OUT param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM employees; END // DELIMITER ; ``` - **SQLite** 不支援存儲過程。 ### 總結 不同的資料庫管理系統有不同的設計目標和實現方式,因此支援的 SQL 語法和功能也有所不同。在使用特定資料庫系統時,需要了解該系統支援的 SQL 語法和功能,並根據其特性進行開發。如果您需要跨多個資料庫系統進行開發,建議使用兼容性較好的標準 SQL 語法,並注意各系統之間的差異。 ## SQL 中的子查詢 子查詢(Subquery) 是一個內部查詢,它嵌套在另一個查詢內部,可以返回單個值、單列或多列結果。子查詢通常用於篩選數據、計算聚合值、或與外部查詢結果進行比較。 ```sql= SELECT column_name FROM table_name WHERE column_name = (SELECT column_name FROM another_table WHERE condition); ``` ### Where subquery ```sql= -- 獲取最高薪水 SELECT MAX(salary) FROM employees; -- 找到最高薪水的員工 SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary = (SELECT MAX(salary) FROM employees); ``` ```sql= SELECT height, weight FROM Students WHERE height > (SELECT AVG(height) FROM Students); ``` ### From subquery 如何找到在比整體平均身高還高的學生中,BMI > 23 的學生? ```sql= SELECT height, weight, BMI FROM (SELECT height, wieght, (weight / SQUARE(height)) AS BMI FROM Students WHERE BMI > 23) WHERE height > (SELECT AVG(height) FROM Students); ``` ### Join subquery ```sql= SELECT id, BMI FROM Students AS s INNER JOIN (SELECT id, (weight / SQUARE(height)) AS BMI FROM Students WHERE BMI > 23) AS Sub ON s.id = Sub.id WHERE height > (SELECT AVG(height) FROM Students); ``` ## CTE 公共表表達式(Common Table Expressions,CTE) 是一種在 SQL 查詢中定義臨時結果集的方式,這些結果集可以在後續的語句中引用。CTE 提供了一種更清晰和更可讀的方式來編寫復雜的 SQL 查詢,特別是在需要重複使用中間結果或需要進行遞歸查詢的情況下。 ### CTE 基本用法 ```sql= WITH cte_name (column1, column2, ...) AS ( -- 定義 CTE 的查詢 SELECT ... ) -- 使用 CTE 的查詢 SELECT column1, column2, ... FROM cte_name WHERE ...; ``` ### 範例 ```sql= -- 定義 CTE 的 名稱 和 欄位 WITH DeptAvgSalaries AS ( SELECT DEPTNO, AVG(SAL) AS AvgSal FROM employees GROUP BY DEPTNO ) SELECT DEPTNO, AvgSal FROM DeptAvgSalaries WHERE AvgSal > 2000; ``` ### CTE 優點 1. 增強可讀性:CTE 使複雜的查詢更易於閱讀和維護,因為它們將查詢分解為更小、更易理解的部分。 2. 重用結果集:CTE 允許在單個查詢中多次引用相同的結果集,而不需要重複編寫相同的子查詢。 3. 支持遞歸查詢:CTE 支持遞歸查詢,這對於處理層次結構數據(例如組織結構或目錄結構)非常有用。 - [很好的 CTE 練習題目](https://learnsql.com/blog/practical-sql-cte-examples/) ## 創建資料庫 ```sql= CREATE DATABASE SchoolDB; ``` ## 選擇和使用資料庫 ```sql= USE SchoolDB; ``` ## 檢查資料庫 你可以檢查資料庫是否創建成功,並列出伺服器上的所有資料庫。 ```sql= SHOW DATABASES; ``` ## 創建一個學生資料表 ```sql= -- 創建一個學生資料表 CREATE TABLE Students ( ID INT PRIMARY KEY, Name VARCHAR(50), Age INT, Major VARCHAR(50) ); ``` ### 語法結構 - CREATE TABLE Students: 這一行定義了資料表的名稱為 Students。 - (): 圓括號內定義了資料表的欄位。 ### 欄位定義 `ID INT PRIMARY KEY` - ID: 欄位名稱。 - INT: 資料類型,表示整數。 - PRIMARY KEY: 這是一個約束,表示該欄位是主鍵,主鍵要求此欄位的值唯一且不為空。 `Name VARCHAR(50)` - Name: 欄位名稱。 - VARCHAR(50): 資料類型,表示可變長度的字元串,最多50個字元。 ## MYSQL 資料型態 - [相關連結](https://www.itread01.com/study/mysql-data-types.html) ### 數值型資料類型 - **INT**: 整數型資料類型。用於儲存整數。變種包括 TINYINT, SMALLINT, MEDIUMINT, BIGINT。 - 範例: `INT`, `SMALLINT` - **FLOAT**: 浮點數型資料類型。用於儲存小數。 - 範例: `FLOAT(7, 4)`(表示總共有7位數,其中4位小數) - **DOUBLE**: 雙精度浮點數型資料類型。用於儲存高精度的小數。 - 範例: `DOUBLE(15, 8)`(表示總共有15位數,其中8位小數) - **DECIMAL**: 精確數字型資料類型。用於儲存精確小數,常用於財務數據。 - 範例: `DECIMAL(10, 2)`(表示總共有10位數,其中2位小數) ### 字元型資料類型 - **CHAR**: 固定長度字元串。用於儲存固定長度的字元串。 - 範例: `CHAR(10)`(固定長度為10的字元串) - **VARCHAR**: 可變長度字元串。用於儲存可變長度的字元串。 - 範例: `VARCHAR(255)`(最多255個字元) - **TEXT**: 大量字元資料。用於儲存大段文字資料。 - 變種包括 `TINYTEXT`, `TEXT`, `MEDIUMTEXT`, `LONGTEXT` ### 日期型資料類型 - **DATE**: 日期型資料類型。用於儲存日期,格式為 `YYYY-MM-DD`。 - 範例: `DATE` - **TIME**: 時間型資料類型。用於儲存時間,格式為 `HH:MI:SS`。 - 範例: `TIME` - **DATETIME**: 日期和時間型資料類型。用於儲存日期和時間,格式為 `YYYY-MM-DD HH:MI:SS`。 - 範例: `DATETIME` - **TIMESTAMP**: 自動更新的日期和時間型資料類型。用於儲存自動更新的日期和時間。 - 範例: `TIMESTAMP` - **YEAR**: 年型資料類型。用於儲存年份。 - 範例: `YEAR` #### 題目:創建員工資料表 ``` 請根據以下描述創建一個名為 Employees 的資料表。該資料表應包含以下欄位: EmployeeID: 整數型欄位,作為主鍵(PRIMARY KEY)。 FirstName: 可變長度字元串(VARCHAR),最多50個字元。 LastName: 可變長度字元串(VARCHAR),最多50個字元。 BirthDate: 日期型欄位(DATE),用於儲存出生日期。 Salary: 精確數字型欄位(DECIMAL),總共有10位數,其中2位小數。 IsActive: 布林型欄位(BOOLEAN),用於表示員工是否在職。 ``` ### 插入數據 ```sql= INSERT INTO Students (ID, Name, Age) VALUES (1, 'Alice', 20), (2, 'Bob', 22); ``` #### 題目:插入資訊 ``` 請使用 INSERT INTO 語法,將上述三條記錄插入到 Employees 資料表中。確保每條記錄的數據完整且符合欄位定義 第一條記錄: EmployeeID: 1 FirstName: Alice LastName: Smith BirthDate: 1990-05-12(1990年5月12日) Salary: 78000.00(薪水75000.00) IsActive: TRUE(在職) 第二條記錄: EmployeeID: 2 FirstName: Bob LastName: Johnson BirthDate: 1985-08-23(1985年8月23日) Salary: 80000.00(薪水80000.00) IsActive: TRUE(在職) 第三條記錄: EmployeeID: 3 FirstName: Carol LastName: Williams BirthDate: 1992-12-05(1992年12月5日) Salary: 60000.00(薪水65000.00) IsActive: FALSE(不在職) ``` ## 更新 UPDATE 語法 UPDATE 語法用於修改資料表中現有記錄的數據。可以指定一個或多個欄位的值,以及一個條件來限制修改的範圍。 ```sql= UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` - 舉例來說如果要更新員工的薪水 ```sql= UPDATE Employees SET Salary = 78000.00 WHERE EmployeeID = 1; ``` ``` 練習 將高於平均值薪水的員工降低 5000 元的薪水 hint: 可以嘗試看看子查詢的方法來做看看 ``` ## 刪除 ### 1. 基本刪除操作 刪除表中的所有記錄。這將會移除表內的所有資料,但不會刪除表本身。 ```sql= DELETE FROM employees; ``` ### 2. 條件刪除 刪除符合特定條件的記錄。例如,刪除員工表中所有薪水低於30000的記錄。 ```sql= DELETE FROM employees WHERE salary < 30000; ``` ### 3. 刪除特定資料 刪除具有特定 ID 的員工。這是更精確的刪除操作,通常用於有明確目標的情況。 ```sql= DELETE FROM employees WHERE employee_id = 10; ``` ### 4. 利用子查詢進行刪除 刪除與子查詢條件匹配的記錄。例如,刪除所有沒有當前項目的員工。 ```sql= DELETE FROM employees WHERE employee_id IN ( SELECT employee_id FROM projects WHERE end_date IS NOT NULL ); ``` ## Drop ### 刪除資料表 (Drop Table) 如果您想要完全移除一個表及其所有的數據和表結構。 ```sql= DROP TABLE table_name; ``` 這條語句會將名為 table_name 的表從資料庫中完全刪除。進行這一操作前,確保這是您想要的操作,因為一旦執行,所有存儲在該表中的數據都將永久丟失。 ### 刪除資料庫 (Drop Database) 如果您需要刪除整個資料庫,包括其中的所有表和數據。 ```sql= DROP DATABASE database_name; ``` 這條語句會完全刪除名為 database_name 的資料庫。這個操作會移除資料庫中的所有內容,包括所有表和數據,並釋放與該資料庫相關的資源。 ``` UPDATE 語句問題 問題: 假設公司決定對所有在公司工作超過5年且薪資為低的員工進行薪資調整,將他們的薪資等級提升到中等。寫出相應的 SQL UPDATE 語句。 問題: 公司希望根據員工的最後一次評估和當前的滿意度來調整工時。如果員工的滿意度小於0.3且上次評估超過0.8,減少他們的每月平均工時數20小時。寫出相應的 SQL UPDATE 語句。 ``` ``` DELETE 語句問題 問題: 公司決定裁減所有在銷售部門工作且滿意度低於0.3的員工。寫出相應的 SQL DELETE 語句。 問題: 如果員工在過去五年內沒有獲得晉升且他們的每月平均工時數超過250小時,則需要刪除這些員工的記錄。考慮到這可能會影響到公司的多個部門,寫出一個 SQL DELETE 語句來執行此操作。 ```