MySQL的進階查詢
一、 按關鍵字排序
使用ORDERBY語句來實現排序排序可針對一個或多個字段ASC:升序,默認排序方式 【升序是從小到大】DESC:降序 【降序是從大到小】ORDER BY的語法結構ORDER BY后面跟字段名
準備一張成績表
語法結構
1.1 單字段排序
升序
降序
1.2 多字段排序
先以前面的字段(主參考字段)排序,如果相同再按后面的字段排序
二 、對結果進行分組
使用GROUP BY語句來實現分組通常結合聚合函數一起使用可以按一個或多個字段對結果進行分組GROUP BY的語法結構
2.1 group by分組
按照hobby分組(相同hobby一個組),并統計每個組的人數
2.2 group by結合order by
先按hobby分組,再按hobby序號降序排列
三、限制結果條目LIMIT
只返回SELECT查詢結果的第一行或前幾行使用LIMIT語句限制條目
LIMIT語法結構
查看前兩行
查看從第四行開始的五行內容
四、設置別名
使用AS語句設置別名,關鍵字AS可省略設置別名時,保證不能與庫中其他表或字段名稱沖突
別名的語法結構
AS的用法
對于字段設置
對于表設置,一般在多表查詢時使用
多表操作時,對表別名之后,在select字段時要用別名.字段,區分字段屬于哪個表
作為連接語句
創建一個新表,將舊表的內容導入,與舊表的區別在于表的結構
五、通配符
用于替換字符串的部分字符通常配合LIKE一起使用,并協同WHERE完成查詢常用的通配符%表示零個、一個或多個_表示單個字符
例:
查詢以姓名y開頭的記錄:
查詢姓名為y_ _y_格式的記錄,_代表單個字符,占位
六、子查詢
也稱作內查詢或者嵌套查詢先于主查詢被執行,其結果將作為外層主查詢的條目在增刪改查中都可以使用子查詢支持多層嵌套IN語句是用來判斷某個值是否在給定的結果集中
例:根據表need,篩選出與need表中內容相匹配的成績表的內容
多層嵌套,篩選出need表中id與chengji表id相同的記錄之后,在這基礎上再篩選出名字相同的記錄
等同于下面兩步的操作
七、視圖
數據庫中的虛擬表,這張虛擬表中不包含任何數據,只是做了數據映射;
創建視圖并查看:
八、NULL值
表示缺失的值與數字0或者空白(spaces)是不同的使用IS NULL或IS NOT NULL進行判斷
NULL與空值的區別:
空值長度為0,不占空間;NULL值的長度為NULL,占用空間
IS NULL無法判斷空值 空值使用“=”或者“<>”來處理
COUNT()計算時,NULL會忽略,不加入計算,空值會加入計算
九、正則表達式
根據指定的匹配模式匹配記錄中符合要求的特殊字符使用REGEXP關鍵字指定匹配模式
常用匹配模式
例:
查詢以l開頭的記錄:
查詢以o結尾的
.代表任意單個字符,占位,查詢lihao的記錄
查詢不是z開頭的
匹配w及后面一個w兩次
十、運算符
MySQL 的運算符用于對記錄中的字段值進行運算。MySQL 的運算符共有四種,分別是:算術運算符、比較運算符、邏輯運算符和位運算符。下面分別對這四種運算符進行說明。
10.1 算數運算符
MYSQL支持使用的運算符號
10.2 比較運算符
常用比較運算符
10.2.1 等于
等號(=)是用來判斷數字、字符串和表達式是否相等的,如果相等則返回 1,如果不相等則返回 0。如果比較的兩者有一個值是 NULL,則比較的結果就是 NULL。其中字符的比較是根據 ASCII 碼來判斷的,如果 ASCII 碼相等,則表示兩個字符相同;如果 ASCII 碼不相等,則表示兩個字符不相同。例如,等于運算符在數字、字符串和表達式上的使用
10.2.2 不等于
不等于號有兩種寫法,分別是<>或者!=,用于針對數字、字符串和表達式不相等的比較。如果不相等則返回 1,如果相等則返回 0,這點正好跟等于的返回值相反。需要注意的是不等于運算符不能用于判斷 NULL。
10.2.3 大于、大于等于、小于、小于等于
大于(>)運算符用來判斷左側的操作數是否大于右側的操作數,若大于返回 1,否則返回 0,同樣不能用于判斷 NULL。小于(<)運算符用來判斷左側的操作數是否小于右側的操作數,若小于返回 1,否則返回 0,同樣不能用于判斷 NULL。大于等于(>=)判斷左側的操作數是否大于等于右側的操作數,若大于等于返回 1,否則返回 0,不能用于判斷 NULL。小于等于(<=)判斷左側的操作數是否小于等于右側的操作數,若小于等于返回 1,否則返回 0,不能用于判斷 NULL。數值比較會自動轉換ASCII表的數值
幾個常用Dec(十進制):
0是48,A是65,a是97,其余的都是按順序下去的
10.2.4 IS NULL、IS NOT NULL
ISNULL 判斷一個值是否為 NULL,如果為 NULL 返回 1,否則返回 0。IS NOT NULL 判斷一個值是否不為 NULL,如果不為 NULL 返回 1,否則返回 0
10.2.5 BETWEEN AND
BETWEEN AND 比較運算通常用于判斷一個值是否落在某兩個值之間。例如,判斷某數字是否在另外兩個數字之間,也可以判斷某英文字母是否在另外兩個字母之間。between and 包含兩端
10.2.6 LEAST、GREATEST
LEAST:當有兩個或者多個參數時,返回其中的最小值。如果其中一個值為 NULL,則返回結果就為 NULL。
GREATEST:當有兩個或者多個參數時,返回其中的最大值。如果其中一個值為 NULL, 則返回結果就為 NULL。
10.2.7 IN、NOT IN
IN 判斷一個值是否在對應的列表中,如果是返回 1,否則返回 0。
NOT IN 判斷一個值是否不在對應的列表中,如果不是返回 1,否則返回 0。
10.3 邏輯運算符
邏輯運算符又被稱為布爾運算符,通常用來判斷表達式的真假,如果為真返回 1,否則返回 0,真和假也可以用 TRUE 和 FALSE 表示。
10.3.1 邏輯非
邏輯運算符中最簡單的運算符就是邏輯非,邏輯非使用 NOT 或!表示。邏輯非將跟在它后面的邏輯測試取反,把真變為假,把假變為真。如果 NOT 后面的操作數為 0 時,所得值為 1;如果操作數為非 0 時,所得值為 0;如果操作數為 NULL 時,所得值為 NULL。例如,對非 0 值和 0 值分別作邏輯非運算,具體操作如下所示。
10.3.2 邏輯與
邏輯與通常用于判斷兩個值或多個值的有效性,如果所有值都是真返回 1,否則返回 0。邏輯與使用 AND 或者&&表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯與運算,具體操作如下所示。
10.3.3 邏輯或
邏輯與通常用于判斷兩個值或多個值的有效性,如果所有值都是真返回 1,否則返回 0。邏輯與使用 AND 或者&&表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯與運算。
一旦有個非0值,出來就是非0值
10.3.4 邏輯異或
兩個非 NULL 值的操作數,如果兩者都是 0 或者都是非 0,則返回 0;如果一個為 0, 另一個為非 0,則返回結果為 1;當任意一個值為 NULL 時,返回值為 NULL。例如,對非0 值、0 值和 NULL 值分別作邏輯異或運算,具體操作如下所示。
有null結果就會為null。
10.4 位運算符
位運算符實際上是對二進制數進行計算的運算符。MySQL 內位運算會先將操作數變成二進制格式,然后進行位運算,最后在將計算結果從二進制變回到十進制格式,方便用戶查看。
10.5 運算符的優先級
以上不管哪種運算符,在使用過程中都有優先級問題。運算符的優先級決定了不同的運 算符在計算過程中的先后順序。級別高的運算符會先進行計算,如果運算符的級別相同, MySQL 會按照順序從左到右依次進行計算。如果不確定所使用的運算符的優先級,可以使用()改變優先級。