1. 程式人生 > 其它 >從0到1學資料庫:where條件查詢和Order By資料排序

從0到1學資料庫:where條件查詢和Order By資料排序

技術標籤:0-1資料庫mysql資料庫

點選上方“羅曉勝”,馬上關注,您的支援對我幫助很大

上期文章

/ 前言 /

有沒有覺得前面的查詢過於簡單,根本不滿足我們的日常需求,

其實,在查詢中我們還可以新增很多查詢條件,還可以新增運算子,加上排序,讓我們趕緊試試吧。

/ 正文 /

要點

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查詢中重要的組成部分,你可以使用他們玩出非常多的花樣。

往期推薦:

如何入門做軟體開發

為什麼我不推薦入行程式設計師

做全棧開發很難嗎

關注我的公眾號,學習技術或投稿

圖片

長按上圖,識別圖中二維碼即可關注