# SQL基礎語法
## CREATE TABLE
CREATE TABLE 是我們在資料庫中用來建立一個新資料表的語法。
#### 語法
```sql
CREATE TABLE table_name (
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
···
column_nameN data_type,
);
```
data_type 用來指定該欄位資料儲存的「資料型別」,不同廠牌的資料,資料型別會有差異。
> 參考:
> PostgreSQL資料型別:https://docs.postgresql.tw/the-sql-language/data-types
> MySQL資料型別:https://www.mysqltutorial.org/mysql-data-types.aspx/
#### 範例
建立一個叫「google_trend」的Table,裡面有`id`、`title`、`formattedTraffic`、`relatedQueries`、`image`、`articles`、`shareUrl`和`date`欄位
```sql
CREATE TABLE google_trend (
id serial PRIMARY KEY,
title varchar(32),
formattedTraffic varchar(32),
relatedQueries text,
imageUrl varchar(1024),
articles text,
shareUrl varchar(1024),
fetch_date int
);
```
## INSERT INTO
新增資料到資料表 (table)。
#### 語法
```sql
INSERT INTO table_name (column1, column2, column3...)
VALUES (value1, value2, value3...);
```
也可以用精簡寫法:
```sql
INSERT INTO table_name
VALUES (value1, value2, value3...);
```
> 注意:
>
> 使用簡寫的方式每個欄位的值都必需要依照順序輸入。
#### 範例
```sql
INSERT INTO google_trend (title, formattedTraffic, relatedQueries, imageUrl, articles, shareUrl, fetch_date)
VALUES (侯昌明', '5000+', '[]', 'http://....', '[]', 'https://', 20210110);
```
## SELECT
最常用到的 SQL 語句,用來從資料庫取得資料,這個動作通常稱為查詢(query),資料庫依 SELECT 查詢的要求會返回一個結果資料表(result table),通常稱之為資料集(result-set)。
#### 語法
SELECT 敘述句主要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為 "從哪拿"。
```sql
SELECT table_column1, table_column2, table_column3...
FROM table_name;
```
#### 範例
從google_trend資料表從查詢所有欄位資料。
```sql
SELECT * FROM google_trend;
```
從google_trend資料表從查詢title欄位資料。
```sql
SELECT title FROM google_trend;
```
## WHERE
在 SELECT 查詢語句使用 WHERE 關鍵字搭配運算子來取出「符合條件」的資料。
#### 語法
```sql
SELECT table_column1, table_column2...
FROM table_name
WHERE column_name operator value;
```
#### 範例
從google_trend資料表中查詢date為20210110的資料。
```sql
SELECT * FROM google_trend WHERE fetch_date=20210110;
```
從google_trend資料表中查詢title為侯昌明的資料。
```sql
SELECT * FROM google_trend WHERE title='侯昌明';
```
## ORDER BY
將 SELECT取得的資料集依照某欄位值得大小來作排序,方式為由小至大(預設ascending),或由大至小(descending)。
#### 語法
```sql
SELECT table_column1, table_column2...
FROM table_name
ORDER BY column_name1 ASC|DESC, column_name2 ASC|DESC...
```
> 如果想要由小到大排序,可以不用寫ASC,因為是預設值。
#### 範例
依照日期欄位(fetch_date)來排序google_trend資料表,由新到舊。
```sql
SELECT * FROM google_trend ORDER BY fetch_date DESC;
```
## LIMIT/TOP
限制資料庫回傳的資料數量,LIMIT和TOP攻用一樣。
> LIMIT:MySQL、PostgreSQL
>
> TOP:MS-SQL Server
#### LIMIT 語法
```sql
SELECT table_column1, table_column2...
FROM table_name LIMIT number;
```
#### LIMIT範例
只選取兩筆資料。
```sql
SELECT * FROM customers LIMIT 2;
```
#### TOP 語法
```sql
SELECT TOP number|percent table_column1, table_column2...
FROM table_name;
```
#### TOP範例
選取第一筆資料。
```sql
SELECT TOP 1 * FROM google_trend;
```
選取前百分之十的資料。
```sql
SELECT TOP 10 PERCENT * FROM customers;
```
## DELETE FROM
#### 語法
```sql
DELETE FROM table_name
WHERE column_name operator value;
```
> 注意:
> 如果下WHERE 條件式,會刪除全部資料。
#### 範例
從google_trend資料表中刪除2021年1月1日的全部資料。
```sql
DELETE FROM google_trend WHERE fetch_date=20210101;
```
## DROP TABLE
完整刪除資料表(Table)。
#### 語法
```sql
DROP TABLE table_name;
```
#### 範例
刪除整個google_trend資料表。
```sql
DROP TABLE google_trend;
```