瀏覽月:

2 月 2021

重複資料 UNION

MySQL UNION 操作符用於連接兩個以上的SELECT 語句的結果組合到一個結果集合中。多個SELECT 語句會刪除重複的數據。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

參數

  • expression1, expression2, … expression_n :要檢索的列。
  • tables:要檢索的數據表。
  • WHERE conditions:可選,檢索條件。
  • DISTINCT:可選,刪除結果集中重複的數據。默認情況下UNION操作符已經刪除了重複數據,所以DISTINCT修飾符對結果沒啥影響。
  • ALL:可選,返回所有結果集,包含重複數據。

分組資料 GROUP BY

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

GROUP BY 語句根據一個或多個列對結果集進行分組。

在分組的列上我們可以使用COUNT, SUM, AVG,等函數。

排序資料 ORDER BY

SELECT field1, field2,...fieldN FROM table_name1, table_name2..., field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]][ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
  • 你可以使用任何字段來作為排序的條件,從而返回排序後的查詢結果。
  • 你可以設定多個字段來排序。
  • 你可以使用ASC 或DESC 關鍵字來設置查詢結果是按升序或降序排列。默認情況下,它是按升序排列。
  • 你可以添加WHERE…LIKE 子句來設置條件。

更新資料 UPDATE

UPDATE table_name SET field1=new-value1, field2=new-value2=new-value1, field2=new-value2
[WHERE Clause][WHERE Clause]
  • 你可以同時更新一個或多個字段。
  • 你可以在WHERE 子句中指定任何條件。
  • 你可以在一個單獨表中同時更新數據。

當你需要更新數據表中指定行的數據時WHERE 子句是非常有用的。

DELETE

DELETE FROM table_name [WHERE Clause]
  • 如果沒有指定WHERE 子句,MySQL 表中的所有記錄將被刪除。
  • 你可以在WHERE 子句中指定任何條件
  • 您可以在單個表中一次性刪除記錄。

當你想刪除數據表中指定的記錄時WHERE 子句是非常有用的。

DELETE ​FROM animals WHERE id=1;

INSERT INTO

以下為MySQL資料表插入資料關鍵字INSERT INTO SQL語法


INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

一次插入多筆資料

INSERT INTO table_name  (field1, field2,...fieldN)  VALUES  (valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;

查詢資料 SELECT

資料庫真正的價值來了!在茫茫大海的有用資料中,查詢資料找出自己想要的結果。

以下就是查詢的方法主要格式,有很多可選參數。

SELECT column_name,column_name, column_name
FROM table_name
[WHERE Clause][ WHERE Clause ]
[LIMIT N][ OFFSET M][ LIMIT N ][ OFFSET M ]

最簡單的實作開始查詢所有資料,如下所示這就是從animals 資料表中拿出「所有」的資料。

SELECT * FROM animals;

「*」星號這個通配符號,可以到表所有欄位,如上簡單的範例表示將所有animals欄位撈出來,亦可指讀取某些欄位就好,假設有很多欄位中,我只需要 name 名稱、age 年齡的話,SQL語法如下

SELECT name, age FROM animals;

LIMIT 限制條件

非常重要,如果animals資料表中沒有什麼資料全部印出來沒有關係,但建議盡可能養成習慣,減少直接撈出所有。

SELECT * FROM animals LIMIT 100

如上所示加上LIMIT關鍵字,並且街上一個數字100,表示從資料表animals中撈出資料最多100筆。

OFFSET 略過

所有的資料裡面假設前幾筆資料不想要撈出來可以使用這個關鍵字,有以下兩種設定方法,都代表animals 資料表中前10筆資料略過以後最多撈出100資料。

SELECT *
FROM animals
LIMIT 10, 100

以下寫法也是相同效果。

SELECT *
FROM animals
LIMIT 100 OFFSET 10

Delete vs Truncate vs Drop

這幾個關鍵字都是只要刪除、清空的意思差別在此釐清一下。

  1. drop 資料表完成刪除,包含結構跟內容,如果你想要資料表時可以使用。
  2. truncate  保留資料表的欄位結構,但清空裡面的資料。
  3. delete 保留資料表的欄位結構,一樣可以刪除全部資料(與truncate有一些不同)或部分符合你設定條件的資料。

舉例:

刪除 animals 資料表,執行以後資料庫裡面將不再看到animals資料表

drop table animals;

delete 比較常使用在刪除部分符合條件的資料,執行後資料庫一樣會有animals 資料表,但符合where篩選條件的資料會刪除。如下所示animals 資料表 id 欄位小於等於 500刪除掉。

delete from animals where id <= 500;
DELETE 亦可用於清空資料表,但效能方面比下面要介紹的truncate差,如下所示不加入 WHERE 篩選條件即可,清空資料表資料,如好所示使用DELETE 清空 animals 資料表。
delete from animals;

truncate 清除表內資料,保留資料表的結構,如下範例一樣是清空資料表。

truncate table animals; 

詳細比較truncatedelete清空資料。

資料表內如果有自動遞增ID(插入資料時id欄位自動加1的欄位),該欄位使用truncate 清空以後再重新插入資料將重新開始id再由1開始慢慢遞增,如果使用delete 原本最後的ID是1000的話,使用delete 清空完資料以後再次插入資料,ID會由1001開始,不會重新由1開始。

可以知道的是truncate 完整釋放硬碟空間,delete 則視底層版本不同,會釋放或不會釋放硬碟空間,也就是使用Delete 如果是用在MySQL這個資料庫有可能會有兩種情況發生。

刪除資料表

使用這個SQL語法請警慎小心,刪除後資料表會整個移除,包含該資料表的資料

DROP TABLE 資料表名稱;

刪除資料庫

刪除資料庫這個SQL請小心使用,因為執行以後指定的資料庫所有資料皆會消失。

PostgreSQL 、 Mysql 皆相同

DROP DATABASE 欲刪除資料庫名稱;