---
# System prepended metadata

title: 資料庫語法
tags: [家教]

---

[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 語句來執行此操作。
```