首頁 > 軟體

MySQL單表查詢進階教學(最全面!)

2022-11-28 22:00:35

前言

查詢是資料操作至關重要的一部分,比如說在所有商品中查詢出價格在規定範圍內的所有商品,要想把資料庫中的資料在使用者端中展示給使用者,一般都進行了查詢的操作。

在實際開發中,我們要根據不同的需求,並且考慮查詢的效率來決定怎樣進行查詢,學習查詢前,可以先看看查詢的完整語法:

SELECT
    欄位列表
FROM
    表名列表
WHERE
    條件列表
GROUP BY
    分組欄位
HAVING
    分組後條件
ORDER BY
    排序欄位
LIMIT
    分頁限定

根據查詢的完整語法中的關鍵字,我們分別來學習基礎查詢,條件查詢,排序查詢,分組查詢和分頁查詢。

我們使用以下的案例學習單表查詢:

-- 刪除stu表
drop table if exists stu;
-- 建立stu表
CREATE TABLE stu (
id int, -- 編號
name varchar(10), -- 姓名
age int, -- 年齡
gender varchar(5), -- 性別
math double(5,2), -- 數學成績
english double(5,2) -- 英語成績

);
-- 新增資料
INSERT INTO stu(id,name,age,gender,math,english)
VALUES
(1,'小張',23,'男',66,78),
(2,'小李',20,'女',98,87),
(3,'小陳',55,'男',56,77),
(4,'小樊',20,'女',76,65),
(5,'小馬',20,'男',86,NULL),
(6,'小趙',57,'男',99,99);

在Navicat中選中SQL執行:

1. 基礎查詢

1.1 基礎查詢語法

查詢多個欄位:

select 欄位列表 from 表名;

查詢全部欄位:

select * from 表名;

去除重複記錄:

select distinct 欄位列表 from 表名;

起別名操作:

select 欄位名 別名 from 表名;

1.2 基礎查詢練習

我們使用前言中的案例進行基礎查詢練習:

查詢多個欄位的練習:

select name,math from stu;

起別名操作練習:

select name,english 英語成績 from stu;

2. 條件查詢

2.1 條件查詢語法

一般語法:

select 欄位列表 from 表名 where 條件列表;

條件查詢一般配合執行符進行,下面是常見的幾個運運算元:

運運算元功能描述
> < = !大於 小於 等於 不等於
between…and…在這個範圍之內
in(…)多選一
is null / is not null是null / 不是null
and 或 &&並且
or 或 ||或者

2.2 條件查詢練習

我們使用前言中的案例進行條件查詢練習:

查詢年齡大於20的學生資訊:

select * from stu where age>20;

查詢年齡等於18歲 或者 年齡等於20歲 或者 年齡等於21歲的學生資訊:

select * from stu where age in(18,20,21);

模糊查詢使用like關鍵字,可以使用萬用字元進行佔位:

  • _ : 代表單個任意字元
  • % : 代表任意個數位符

查詢姓名中含有張的學生資訊:

select * from stu where name like '%張%';

3. 排序查詢

3.1 排序查詢語法

select 欄位列表 from 表名 order by 排序欄位名1 [排序方式]...;

注:排序方式又兩種:分別是升序ASC和降序DESC,預設情況下是升序ASC。

3.2 排序查詢練習

我們使用前言中的案例進行排序查詢練習:

4. 聚合函數

4.1 聚合函數語法

什麼是聚合函數呢?在進行查詢操作時,我們往往需要對一整列進行運算,例如我們可以計算一整列成績資料的平均值,我們就要使用聚合函數。下面是常見的聚合函數:

函數名功能
count(列名)統計數量(一般選用不為null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值

一般語法:

select 聚合函數 from 表名;

注:NULL值不參與聚合函數運算。

4.2 聚合函數練習

我們使用前言中的案例進行聚合函數的練習:

統計該表中一共有幾個學生:

select count(id) from stu;

上面我們使用某一欄位進行運算,這樣做可能面臨的問題是某一個值可能是NULL,所以我們一般使用 * 進行運算,因為一行中不可能所有的欄位都是NULL。

select count(*) from stu;

查詢數學成績的平均分:

select avg(math) from stu;

5. 分組查詢

5.1 分組查詢語法

select 欄位列表 from 表名 [where 分組前的條件限定] group by 分組欄位名 [having 分組後的條件過濾]

注:分組之後,查詢的欄位為聚合函數和分組欄位,查詢其他欄位無任何意義。

5.2 分組查詢練習

我們使用前言中的案例進行分組查詢練習:

查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組:

select gender, avg(math),count(*) from stu where math > 70 group by gender;

查詢男同學和女同學各自的數學平均分,以及各自人數,要求:分數低於70分的不參與分組,分組之後人數大於2個的:

select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;

注:where 和 having 執行時機不一樣:where 是分組之前進行限定,不滿足where條件,則不參與分組,而having是分組之後對結果進行過濾。所以,where 不能對聚合函數進行判斷,having 可以。

6. 分頁查詢

6.1 分頁查詢語法

在大家的印象中,網頁在展示大量的資料時,往往不是把資料一下全部展示出來,也是用分頁展示的形式,其實就是對資料進行分頁查詢的操作,即每次只查詢一頁的資料展示到頁面上。

select 欄位列表 from 表名 limit 查詢起始索引,查詢條目數;

limit 關鍵字中,查詢起始索引這個引數是從0開始的。

6.2 分頁查詢練習

我們使用前言中的案例進行分頁查詢練習:

從0開始查詢,查詢3條資料:

select * from stu limit 0,3;

起始索引 = (當前頁碼 - 1) * 每頁顯示的條數

7. 總結

結合經典案例的練習,我們已經完成了單表查詢所有的基礎和練習訓練,查詢作為對資料操作最重要的一部分,一定要不斷地練習才能熟練的進行操作。

到此這篇關於MySQL單表查詢進階的文章就介紹到這了,更多相關MySQL單表查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com