從0到1學資料庫:where條件查詢和Order By資料排序
點選上方“羅曉勝”,馬上關注,您的支援對我幫助很大
上期文章
/ 前言 /
有沒有覺得前面的查詢過於簡單,根本不滿足我們的日常需求,
其實,在查詢中我們還可以新增很多查詢條件,還可以新增運算子,加上排序,讓我們趕緊試試吧。
/ 正文 /
要點
1.where子句
2.運算子的使用
3.Order by子句
WHERE子句的使用
WHERE子句一般用來限制資料,使用WHERE子句限定返回符合條件的記錄
• WHERE子句在 FROM 子句後,一般後面還會使用各類運算子去篩選資料
• 語法:
SELECT *|{[DISTINCT] 列名|表示式 [別名][,...]}
FROM 表名
WHERE 條件;
• 查詢公司年齡大於22的員工資訊。
SELECT id, name, age
FROM student
WHERE age >= 22;
比較運算子的使用
運算子 | 含義 |
---|---|
= | 等於 |
> | 大於 |
>= | 大於等於 |
< | 小於 |
<= | 小於等於 |
<> | 不等於 |
字元型與日期型大小寫敏感的例項
• 使用比較運算子需要遵循以下原則:
– 字元及日期型別需要在兩端用單引號;
– 字元型別大小寫敏感;
– 日期型別格式敏感,預設格式'yyyy-MM-dd HH:mm:ss';
例: • 查詢建立時間大於1999年1月1日的使用者資訊。
SELECT id, name, age
FROM student
WHERE c_create_date >= '1999-01-01';
特殊比較運算子
運算子 | 含義 |
---|---|
BETWEEN...AND... | 確定範圍,在兩個值之間 (包含比較值) |
IN( 列表) | 確定集合 |
LIKE | 字串匹配查詢 |
IS NULL | 判斷空值 |
BETWEEN…AND…運算子的使用
• 查詢年齡在20到22的僱員。SELECT id, name, age FROM student WHERE age BETWEEN 20 AND 22;
IN運算子的使用
• IN運算子主要對指定的值進行比較檢視的時候使用。
• 查詢ID為1、3或5的使用者資訊。
SELECT id, name, age
FROM student
WHERE id IN (10, 90, 110);
LIKE運算子的使用
• 使用LIKE運算子完成模糊查詢功能
• 使用萬用字元來代替未知的資訊。常用萬用字元有 %和_ 。
– %可以代替任意長度字元(包括長度為0)。
– _可以代替一個字元。
例 • 查詢name首字母是張的使用者資訊。
SELECT id, name, age
FROM student
WHERE name LIKE '張%';
• %與_組合使用
例 • 查詢name第二個字元為四的使用者資訊。
SELECT id, name, age
FROM student
WHERE name LIKE '_四%';
IS NULL運算子的使用
• 查詢包含空值的記錄
• 查詢班級資訊為空的使用者資訊。
SELECT id, name, age
FROM student
WHERE c_class IS NULL;
邏輯運算子的使用
運算子 | 含義 |
---|---|
AND | 如果組合的條件都是TRUE,返回TRUE。NULL和 FALSE組合,返回FALSE。 |
OR | 如果組合的條件之一是TRUE,返回TRUE。NULL和 TRUE組合,返回TRUE。 |
NOT | 如果下面的條件是FALSE,返回TRUE。 |
例 • 查詢年齡在20到22之間的使用者資訊。
SELECT id, name, age
FROM student
WHERE age>=20 AND age<=22;
• 年齡在20到22,並且班級在1和2的使用者資訊。
SELECT id, name, age
FROM student
WHERE age>20 AND c_class in (1,2);
• 年齡在20到22,或者班級在1和2的使用者資訊。
SELECT id, name, age
FROM student
WHERE age>20 OR c_class in (1,2);
• 查詢班級不在1和2的使用者資訊。
SELECT id, name, age
FROM student
WHERE c_class not in (1,2);
NOT運算子還可以和BETWEEN…AND、LIKE、IS NULL一起使用。
– ...WHERE id NOT IN (1, 2);
– ... WHERE age NOT BETWEEN 20 AND 22;
– ... WHERE name NOT LIKE 'D%'
– ... WHERE c_class IS NOT NULL
運算子的優先順序
• 括號’()’優先於其他操作符。
優先順序 | 運算分類 | 運算子舉例 |
---|---|---|
1 | 數學運算子 *, , +, - | |
2 | 連線運算子 | |
3 | 通用比較運算子 =, <>, <, >, <=, >= | |
4 | 其他比較運算子 IS [NOT] NULL, LIKE, [NOT] BETWEEN, [NOT] IN | |
5 | 邏輯非 NOT | |
6 | 邏輯與 AND | |
7 | 邏輯或 OR |
注:1、乘除的優先順序高於加減;2、同一優先順序運算子從左向右執行;3、括號內的運算先執行。
例: 查詢班級編號為1 或 班級為2且年齡大於22的使用者資訊。(這裡or的優先順序會低於and的優先順序)
SELECT id, name, age
FROM student
WHERE c_class = 1 OR c_class = 2 AND age > 22;
查詢年齡大於22 且 班級編號為1或者2的使用者資訊。(括號內的運算先執行)
SELECT id, name, age
FROM student
WHERE (c_class = 1 OR c_class = 2) AND age > 22;
ORDER BY子句
• ORDER BY子句後的語法結構如下:
SELECT *|{[DISTINCT] 列名|表示式 [別名][,...]}
FROM 表名 [WHERE 條件]
ORDER BY {列名|表示式|別名} [ASC|DESC],…;
例:檢視使用者資訊降序排列。
SELECT id, name, age
FROM student
ORDER BY id DESC;
• 不同資料型別排序規則(以升序為例)
– 數字升序排列小值在前,大值在後。即按照數字大小順序由 小到大排列。
– 日期升序排列相對較早的日期在前,較晚的日期在後。例 如:’01-SEP-06’在’01-SEP-07’前。
– 字元升序排列按照字母由小到大的順序排列。即由A-Z排列;中文升序按照字典順序排列。
– 空值在升序排列中排在最後,在降序排列中排在最開始。
注:MySQL 預設升序特別說明:mysql在不給定order by條件的時候,得到的資料結果的順序是跟查詢列有關的。在查詢不同列的時候,可能會使用到不同的索引條件。Mysql在使用不同索引的時候,得到的資料順序是不一樣的
例•:檢視使用者資訊,結果按照班級升序排列,年齡按照降序排列。
SELECT id, name, age, c_class
FROM student
ORDER BY c_class, age desc;
• ORDER BY特殊使用 – ORDER BY子句可以出現在SELECT子句中沒有出現過的列。
– ORDER BY子句後的列名,可以用數字來代替。這個數字是 SELECT語句後列的順序號。
例:檢視使用者資訊,按照班級從低到高顯示,而具體的工資數不 顯示。
SELECT id, name, age
FROM student
ORDER BY c_class;
• 檢視使用者資訊,結果按照年齡升序排列,班級降序排列。
SELECT id, age, c_class
FROM student
ORDER BY 2, 3 desc;
/ 總結 /
本文主要講了where條件查詢和order by資料排序,作為sql查詢中重要的組成部分,你可以使用他們玩出非常多的花樣。
往期推薦:
關注我的公眾號,學習技術或投稿
長按上圖,識別圖中二維碼即可關注