MySQL進階查詢普及
阿新 • • 發佈:2020-10-14
前言
在對MySQL資料庫的增、刪、改、查操作有一定了解之後,就可以學習一些 SQL 語句的高階使用方法。
SQL語句的熟練使用,在平時的運維工作中可以提供不小的幫助,尤其是在一些規模較小的公司,運維身兼數職,
可能會有不少資料庫的相關工作。這邊就普及下SQL 語句的高階運用方法。
一、常用查詢介紹
1.1按關鍵字排序
- 使用ORDER BY語句來實現排序
- 排序可針對一個或多個欄位
- ASC:升序,預設排序方式
- DESC:降序
ORDER BY的語法結構
1 SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC;
ORDER BY 後面跟多個欄位時,欄位之間使用英文逗號隔開,優先順序是按先後順序而定。下面以A和B分別表示兩個欄位:
- ORDER BY A,B desc 指A用升序,B用降序;
- ORDER BY A asc,B desc 指A用升序,B用降序;
- ORDER BY A desc,B desc 指A用降序,B用降序;
1.2對結果進行分組
- 使用 GROUP BY 語句來實現分組
- GROUP BY通常都是結合聚合函式一起使用的
- 常用的聚合函式包括:計數(COUNT)、求和(SUM)、求平均數(AVG)、最大值(MAX)、最小值(MIN)
GROUP BY的語法結構
1 SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name;
1.3 限制結果條目
-
在使用 MySQL SELECT 語句進行查詢時,結果集返回的是所有匹配的記錄。有時候僅需要返回第
一行或者前幾行,這時候就需要用到 LIMIT 子句。
1 語法 2 SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
(注意)
- LIMIT 的第一個引數是位置偏移量(可選引數),是設定 MySQL 從哪一行開始顯示。
- 如果不設定第一個引數,將會從表中的第一條記錄開始顯示。
- 第一條記錄的位置偏移量是 0,第二條是 1,以此類推。第二個引數是設定返回記錄行的最大數目。
1.4 設定別名
- 當表的名字比較長或者表內某些欄位比較長時,為了書寫方便可以給欄位列或表設定別名
- 使用的時候直接使用別名,簡潔明瞭,增強可讀性
列的別名語法結構:
1 SELECT column_name AS alias_name FROM table_name;
表的別名語法結構:
1 SELECT column_name(s) FROM table_name AS alias_name;
(注意)
- 在為表設定別名時,要保證別名不能與資料庫中的其他表的名稱衝突。
-
列的別名是在結果中有顯示的,而表的別名在結果中沒有顯示,只在執行查詢時使用。
1.5 萬用字元
- 萬用字元主要用於替換字串中的部分字元,通過部分字元的匹配將相關結果查詢出來。
-
通常萬用字元都是跟 LIKE 一起使用的,並協同 WHERE 子句共同來完成查詢任務。
- 常用的萬用字元有兩個
- %:百分號表示零個、一個或多個字元
-
_:下劃線表示單個字元
1 舉例 2 mysql> select id,name,level from player where name like 's%'; ##name 欄位以 s 開頭的記錄 3 mysql> select id,name,level from player where name like '%s'; ##name 欄位以 s 結尾的記錄 4 mysql> select id,name,level from player where name like '%es%'; ###name 欄位中間含 es 的記錄 5 mysql> select id,name,level from player where name like '_uess'; ###替換開頭的一個字元
1.6 子查詢
- 子查詢也被稱作內查詢或者巢狀查詢
- 子查詢語句是先於主查詢語句被執行的
- 子查詢結果作為外層的條件返回給主查詢進行下一步的查詢過濾
- 在巢狀的時候,子查詢內部還可以再次巢狀新的子查詢,也就是說可以多層巢狀
1 語法 2 select 欄位名列表 from 表名 where 欄位名 運算子 3 (select 欄位名 from 表名 where 條件)
注意:外層的where的條件必須和內層的select查詢的欄位名一樣,個數型別也一樣