1. 程式人生 > 其它 >MYSQL SELECT語句詳解

MYSQL SELECT語句詳解

以下內容均為藍橋雲課筆記記錄 https://www.lanqiao.cn/course- s/
刪除資料庫:

drop database 資料庫名

從檔案中載入資料:

source /home/shiyanlou/Desktop/檔名.sql

SELECT 語句的基本格式為:

SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;

例如:

SELECT name,age FROM employee;

SELECT 語句常常會有 WHERE 限制條件,用於達到更加精確的查詢。WHERE 限制條件可以有數學符號 (=,<,>,>=,<=) ,剛才我們查詢了 name 和 age,現在稍作修改:

SELECT name,age FROM employee WHERE age>25;


SELECT name,age,phone FROM employee WHERE name='Mary';

AND與OR
從這兩個單詞就能夠理解它們的作用。WHERE 後面可以有不止一條限制,而根據條件之間的邏輯關係,可以用 [條件一 OR 條件二] 和 [條件一 AND 條件二] 連線:
例如,篩選出 age 小於 25,或 age 大於 30

SELECT name,age FROM employee WHERE age<25 OR age>30;

如果需要包含 25 和 30 這兩個數字的話,可以替換為 age BETWEEN 25 AND 30 :

SELECT name,age FROM employee WHERE age BETWEEN 25 AND 30;

IN和NOT IN
關鍵詞 IN 和 NOT IN 的作用和它們的名字一樣明顯,用於篩選“在”或“不在”某個範圍內的結果,比如說我們要查詢在 dpt3 或 dpt4 的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');

而 NOT IN 的效果則是,如下面這條命令,查詢出了不在 dpt1 也不在 dpt3 的人:

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');

LINK
關鍵字 LIKE 可用於實現模糊查詢,常見於搜尋功能中。

和 LIKE 聯用的通常還有萬用字元,代表未知字元。SQL 中的萬用字元是 _ 和 % 。其中 _ 代表一個未指定字元,% 代表不定個未指定字元

比如,要只記得電話號碼前四位數為 1101,而後兩位忘記了,則可以用兩個 _ 萬用字元代替:

SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';

這樣就查找出了 1101 開頭的 6 位數電話號碼:

另一種情況,比如只記名字的首字母,又不知道名字長度,則用 % 萬用字元代替不定個字元:

SELECT name,age,phone FROM employee WHERE name LIKE 'J%';

ORDER BY
為了使查詢結果看起來更順眼,我們可能需要對結果按某一列來排序,這就要用到 ORDER BY 排序關鍵詞。預設情況下,ORDER BY 的結果是升序排列,而使用關鍵詞 ASC 和 DESC 可指定升序或降序排序。 比如,我們按 salary 降序排列,SQL 語句為:

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;

SQL 內建函式和計算
SQL 允許對錶中的資料進行計算。對此,SQL 有 5 個內建函式,這些函式都對 SELECT 的結果做操作:

函式名 COUNT SUM AVG MAX MIN
作用: 計數 求和 求平均值 最大值 最小值
其中 COUNT 函式可用於任何資料型別(因為它只是計數),
而 SUM 、AVG 函式都只能對數字類資料型別做計算,
MAX 和 MIN 可用於數值、字串或是日期時間資料型別。

具體舉例,比如計算出 salary 的最大、最小值,用這樣的一條語句:

SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;

使用 AS 關鍵詞可以給值重新命名,比如最大值被命名為了 max_salary:

子查詢

上面討論的 SELECT 語句都僅涉及一個表中的資料,然而有時必須處理多個表才能獲得所需的資訊。例如:想要知道名為 "Tom" 的員工所在部門做了幾個工程。員工資訊儲存在 employee 表中,但工程資訊儲存在 project 表中。

對於這樣的情況,我們可以用子查詢:

SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt
HAVING of_dpt IN
(SELECT in_dpt FROM employee WHERE name='Tom');

上面程式碼包含兩個 SELECT 語句,第二個 SELECT 語句將返回一個集合的資料形式,然後被第一個 SELECT 語句用 in 進行判斷。

HAVING 關鍵字可以的作用和 WHERE 是一樣的,都是說明接下來要進行條件篩選操作。

區別在於 HAVING 用於對分組後的資料進行篩選

連結查詢
在處理多個表時,子查詢只有在結果來自一個表時才有用。但如果需要顯示兩個表或多個表中的資料,這時就必須使用連線 (join) 操作。 連線的基本思想是把兩個或多個表當作一個新的表來操作,如下:

SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;

這條語句查詢出的是,各員工所在部門的人數,其中員工的 id 和 name 來自 employee 表,people_num 來自 department 表:

另一個連線語句格式是使用 JOIN ON 語法,剛才的語句等同於:

SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id;

結果也與剛才的語句相同。