sql學習第一天--比較運算子、邏輯運算子(and、or、not)、多條件in、排除not in、範圍between and、空is null、模糊查詢like、排序order by、限制行數limit
1.比較運算子:比較運算子用於比較運算,判斷邏輯是否成立。
比較運算子的使用方式如下:
A operator B
其中 operator 是比較運算子,用於對 A 和 B 進行比較運算。
常用的比較運算子有 =(等於) 、!=(不等於)、 <>(不等於)、<(小於)、<=(小於等於)、>(大於)、>=(大於等於),其中 != 和 <> 在特殊情況下用法是不同的。
比較運算子常常與 WHERE 在一起使用。WHERE 用於邏輯判斷,WHERE 後面寫判斷的條件,滿足條件的語句會被篩選出來。
WHERE 比較運算子的使用方式如下:
WHERE A operator B
練習:查詢超過 20 歲的教師。select * from teachers where age > 20;
2.邏輯運算子:AND、OR、NOT
① 使用AND連線多條件:
使用 SQL 中的邏輯運算子 AND 可以將 WHERE 子句中將兩個或兩個以上的條件結合起來,其結果是滿足 AND 連線的所有條件的資料。
語法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 AND condition2;
其中:condition 為設定的條件,最後返回的結果應為滿足 condition1 和 condition2 的資料。
練習題:查詢課程表 courses 中課程建立時間 created_at 在 '2020-01-01' (包括) 到 '2020-05-01' (不包括) 之間的所有課程名稱和課程建立時間。
② 使用OR連線多條件:
使用 SQL 中的邏輯運算子 OR只要記錄滿足任意一個條件,就會被查詢出來。
語法:
SELECT `column_name`
FROM `table_name`
WHERE condition1 or condition2;
其中:condition1 和 condition2 為設定的條件,最後返回的結果應滿足 condition1 或 condition2 的資料。
練習題:從 courses 表中,選取課程名為 'Web' 或者 'Big Data' 的課程資訊。
③ 使用 NOT 過濾不滿足條件的資料
使用 SQL 中的邏輯運算子 NOT 可以過濾掉 WHERE 子句中不滿足條件的結果集。
語法:
SELECT `column_name`
FROM `table_name`
WHERE NOT `condition`;
其中:condition 為設定的條件,最後返回的結果應不滿足 condition 。
練習題:查詢課程表 courses 中,教師 id teacher_id 不為 3,且學生人數 student_count 超過 800 的所有課程。
select * from courses where not (teacher_id = 3 or student_count <= 800)
3.特殊條件
使用 IN 查詢多條件
當需要查詢單個表條件過多時,就會用多個 'OR' 連線或者巢狀,這會比較麻煩,可以用 'IN' 更方便的解決這一問題。
示例程式碼:
SELECT *
FROM `table_name`
WHERE `column_name` IN `value`;
練習題:查詢課程表 courses 中開課日期為 2021-01-01 或者 2021-01-03 的所有課程資訊。
select*fromcourseswherecreated_atin('2021-01-01','2021-01-03')
使用 NOT IN 排除:
示例程式碼:
SELECT *
FROM `table_name`
WHERE `column_name` NOT IN value;
練習題:查詢課程表courses
中所有教師 idteacher_id
不為 1 或 3 的所有課程。
selectnamefromcourseswhereteacher_idnotin(1,3)
使用 BETWEEN AND 查詢兩值間的資料範圍
BETWEEN AND 會選取介於兩個值之間的資料範圍。這些值可以是數值、文字或者日期。
注:在不同的資料庫中,BETWEEN 操作符會產生不同的結果!
在某些資料庫中,BETWEEN 選取介於兩個值之間但不包括兩個測試值的欄位。
在某些資料庫中,BETWEEN 選取介於兩個值之間且包括兩個測試值的欄位。
在某些資料庫中,BETWEEN 選取介於兩個值之間且包括第一個測試值但不包括最後一個測試值的欄位。
因此,需檢查資料庫是如何處理 BETWEEN 操作符!
示例程式碼:
SELECT *
FROM `table_name`
WHERE `column_name` BETWEEN `value` AND `value`;
練習題:查詢課程表 courses 中學生數量在 50 到 55 之間的所有課程資訊。
select*fromcourseswherestudent_countbetween'50'and'55'
使用 IS NULL 查詢空資料
NULL 值代表遺漏的未知資料。預設的,表的列可以存放 NULL 值。
如果表中的某個列是可選的,那麼可以在不向該列新增值的情況下插入新記錄或更新已有的記錄。這意味著該欄位將以 NULL 值儲存。
NULL 用作未知的或不適用的值的佔位符。
注:無法比較 NULL 和 0;它們是不等價的。
無法使用比較運算子來測試 NULL 值,比如 =、!= 或 <>。
必須使用 IS NULL 和 IS NOT NULL操作符。
示例程式碼:
SELECT *
FROM `table_name`
WHERE `column_name` IS NULL;
練習題:查詢教師表 teachers 中,國籍為 'CN' 或 'JP' 且 email 資訊不為空的所有教師資訊。
select*fromteacherswherecountryin('CN','JP')andemailisnotnull
使用 LIKE 模糊查詢
BETWEEN AND 和比較運算子時不是直接對文字的操作,使用 LIKE 更準確規範得解決文字比較問題。
LIKE 比較類似我們平時用到的模糊搜尋。
示例程式碼
SELECT *
FROM `table_name`
WHERE `column_name` LIKE `value`;
對於SQL 中的萬用字元有以下型別:
萬用字元 |
描述 |
% |
替代 0 個或多個字元 |
- |
替代一個字元 |
[charlist] |
字元列中的任何單一字元 |
[!charlist] |
不在字元列中的任何單一字元 |
練習題:查詢教師表 teachers 中,所有使用 qq 郵箱的教師名字和郵箱。
selectname,emailfromteacherswhereemaillike'%@qq.com'
4.ORDER BY 與LIMIT
使用 ORDER BY 對資料進行排序
ORDER BY 關鍵字用於對結果集按照一個列或者多個列進行排序,其具有 ASC(升序)和 DESC(降序)兩個關鍵字,且預設按照升序排列。
ASC :按升序排列,ORDER BY 預設按照升序對記錄進行排序,因此升序的關鍵字 ASC 可以省去不寫。
DESC:按降序排列,如果需要按照降序對記錄進行排序,可以使用 DESC 關鍵字。
基本語法
SELECT `column_name`, `column_name`
FROM `table_name`
ORDER BY `column_name`, `column_name` ASC|DESC;
練習題:查詢教師表 teachers 中教師年齡 age 的唯一值,並將結果進行升序排序。
selectdistinctagefromteachersorderbyage
//需要取age的不重複資料
使用 LIMIT 限制輸出行數
LIMIT 子句用於 SELECT 中,對輸出結果集的行數進行約束,LIMIT 接收2個引數 offset 和 count,兩個引數都是整型數字,但通常只用一個。
基本語法
SELECT `column_name`, `column_name`
FROM `table_name`
LIMIT `offset` , `count`;
注:offset :是返回集的初始標註,起始點是0,不是1哦
count :制定返回的數量
練習題:查詢課程表 course 中學生人數 student_count 最少的三門課程資訊。
select*fromcoursesorderbystudent_countlimit3