# 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; ```