在數據庫操作語句中,使用最頻繁,也被認為最重要的是 SELECT 查詢語句。我們已經在不少地方用到了 SELECT * FROM table_name;
這條語句用於查看一張表中的所有內容。 而 SELECT 與各種限制條件關鍵詞搭配使用,具有各種豐富的功能。
SELECT 語句的基本格式為:
SELECT 要查詢的列名 FROM 表名字 WHERE 限制條件;
SELECT 語句常常會有 WHERE 限制條件,用於達到更加精確的查詢。WHERE限制條件可以有數學符號 (=,<,>,>=,<=
)
例如:SELECT name,age FROM employee WHERE age>25;
或者查找一個名字為 Mary 的員工的 name,age 和 phone:
SELECT name,age,phone FROM employee WHERE name='LLODY';
一、and和or
從這兩個單詞就能夠理解它們的作用。WHERE 后面可以有不止一條限制,而根據條件之間的邏輯關系,可以用 [條件一 OR 條件二]
] 和 [條件一 AND 條件二
];
例如:SELECT name,age FROM employee WHERE age<25 OR age>30;

#篩選出 age 大於 25,且 age 小於 30
SELECT name,age FROM employee WHERE age>25 AND age<30;
而剛才的限制條件 age>25 AND age<30 ,如果需要包含25和30這兩個數字的話,可以替換為 age BETWEEN 25 AND 30 :
二、in和 not in
關鍵詞 IN 和 NOT IN 的作用和它們的名字一樣明顯,用於篩選“在”或“不在”某個范圍內的結果,
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
三、like
關鍵字 LIKE 可用於實現模糊查詢,常見於搜索功能中。
和 LIKE 聯用的通常還有通配符,代表未知字符。SQL中的通配符是 _
和 %
。其中 _
代表一個未指定字符,%
代表不定個未指定字符
比如,要只記得電話號碼前四位數為1101,而后兩位忘記了,則可以用兩個 _
通配符代替.
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
為了使查詢結果看起來更順眼,我們可能需要對結果按某一列來排序,這就要用到 ORDER BY 排序關鍵詞。默認情況下,ORDER BY 的結果是升序排列,而使用關鍵詞 ASC 和 DESC 可指定升序或降序排序。 比如,我們按 salary 降序排列.
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
如果后面不加 DESC 或 ASC 將默認按照升序排列。應用場景:博客系統中按時間先后順序顯示博文。
四、SQL函數和計算
如果后面不加 DESC 或 ASC 將默認按照升序排列。應用場景:博客系統中按時間先后順序顯示博文。
函數名: | COUNT | SUM | AVG | MAX | MIN |
---|---|---|---|---|---|
作用: | 計數 | 求和 | 求平均值 | 最大值 | 最小值 |
其中 COUNT 函數可用於任何數據類型(因為它只是計數),而 SUM 、AVG 函數都只能對數字類數據類型做計算,MAX 和 MIN 可用於數值、字符串或是日期時間數據類型。
計算salary的最大最小值。
例如:SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
五、子查詢
上面討論的 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;