1. 程式人生 > 實用技巧 >MySQL進階查詢普及

MySQL進階查詢普及

前言

在對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查詢的欄位名一樣,個數型別也一樣