# SQL Script Example
本範例預計以學生資料為例,針對資料進行CRUD的操作
## 第一部分-Create操作
### 建立一個名為Class_Student的資料表,其中有student_id、student_name、student_age三個欄位。
```sql
CREATE TABLE Class_Student(
student_id INT NOT NULL AUTO_INCREMENT,
student_name VARCHAR(100) NOT NULL,
student_age INT NOT NULL,
submission_date DATE,
PRIMARY KEY ( student_id )
);
```
#### 結果:
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| None | None | None |
### 插入三筆學生資料。
```sql
INSERT INTO Class_Student (
"student_name",
"student_age")
VALUES
("Gary", 22),
("Tina", 23),
("Allen", 21);
```
#### 結果:
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| 1 | Gary | 22 |
| 2 | Tina | 23 |
| 3 | Allen | 21 |
## 第二部分-Read操作
### 查詢Class_Student資料表中所有欄位的學生資料。
```sql
SELECT * FROM Class_Student;
```
#### 結果:
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| 1 | Gary | 22 |
| 2 | Tina | 23 |
| 3 | Allen | 21 |
### 查詢Class_Student資料表中所有學生的student_name欄位值。
```sql
SELECT student_name FROM Class_Student;
```
#### 結果:
| student_name |
| -------- |
| Gary |
| Tina |
| Allen |
### 查詢Class_Student資料表中student_name等於Gary的那位學生之student_age欄位值。
```sql
SELECT student_age FROM Class_Student WHERE student_name="Gary";
```
#### 結果:
| student_age |
| -------- |
| 22 |
### 查詢Class_Student資料表中student_age大於21的所有學生,並以student_age由大至小排列的student_id與student_name欄位值。
```sql
SELECT student_id, student_name FROM Class_Student WHERE student_age>21 ORDER BY student_age DESC;
```
#### 結果:
| student_id | student_name |
| -------- | -------- |
| 2 | Tina |
| 1 | Gary |
## 第三部分-Update操作
### 更新Class_Student資料表中student_name等於Gary的student_age為23。
```sql
UPDATE Class_Student SET student_age=23 WHERE student_name="Gary";
```
#### 結果:
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| 1 | Gary | 23 |
| 2 | Tina | 23 |
| 3 | Allen | 21 |
### 更新Class_Student資料表中的第三位學生,其student_name為Ben、student_age為20。
```sql
UPDATE Class_Student SET student_name="Ben", student_age=20 WHERE student_id=3;
```
#### 結果:
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| 1 | Gary | 23 |
| 2 | Tina | 23 |
| 3 | Ben | 20 |
## 第四部分-Delete操作
### 刪除Class_Student資料表中student_age等於23的學生資料。
```sql
DELETE FROM Class_Student WHERE student_age=23
```
#### 結果:
由於`student_name`等於Gary與Tina的`student_age`均為23,因此該兩筆資料均被刪除,僅剩下`student_name`為Ben的資料。
| student_id | student_name | student_age |
| -------- | -------- | -------- |
| 3 | Ben | 20 |
### 刪除Class_Student這個資料表。
```sql
DROP TABLE Class_Student;
```
#### 結果:
整個資料表包括內部的資料均被刪除。
## 進階教學
### 網站資源
* [1keydata](https://www.1keydata.com/tw/sql)
* [Gitbook.NET](http://tw.gitbook.net/sql/)
* [sqlzoo](https://sqlzoo.net/wiki/SQL_Tutorial) (可即時練語法)
### 重點超連結
#### JOIN
* [1keydata-表格連接](https://www.1keydata.com/tw/sql/sqljoins.html)
* [1keydata-外部連接](https://www.1keydata.com/tw/sql/sqlouterjoin.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-using-joins.html)
* [sqlzoo](https://sqlzoo.net/wiki/The_JOIN_operation) (可即時練語法)
#### UNION
* [1keydata](https://www.1keydata.com/tw/sql/sqlunion.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-unions-clause.html)
#### 子查詢(Subquery)
* [1keydata](https://www.1keydata.com/tw/sql/sql-subquery.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-sub-queries.html)
#### GROUP BY
* [1keydata](https://www.1keydata.com/tw/sql/sqlgroupby.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-group-by.html)
#### 函數
* [1keydata](https://www.1keydata.com/tw/sql/sqlfunctions.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-useful-functions.html)
#### LIKE
* [1keydata](https://www.1keydata.com/tw/sql/sqllike.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-like-clause.html)
#### HAVING
* [1keydata](https://www.1keydata.com/tw/sql/sqlhaving.html)
* [Gitbook.NET](http://tw.gitbook.net/sql/sql-having-clause.html)
#### 查詢輔助(EXISTS、IN)
* [1keydata-EXISTS](https://www.1keydata.com/tw/sql/sql-exists.html)
* [1keydata-IN](https://www.1keydata.com/tw/sql/sqlin.html)
###### tags: `筆記`