本篇文章給大家?guī)砹岁P于mysql的相關知識,其中主要介紹了關于單表查詢的相關內容,下面一起來看一下,希望對大家有幫助。

程序員必備接口測試調試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設計、調試、文檔、自動化測試工具
后端、前端、測試,同時在線協(xié)作,內容實時同步
推薦學習:mysql視頻教程
在我們對數(shù)據(jù)進行操作時,查詢無疑是至關重要的,查詢操作靈活多變,我們可以根據(jù)開發(fā)的需求,設計高效的查詢操作,把數(shù)據(jù)庫中存儲的數(shù)據(jù)展示給用戶。
查詢是數(shù)據(jù)操作至關重要的一部分,比如說在所有商品中查找出價格在規(guī)定范圍內的所有商品,要想把數(shù)據(jù)庫中的數(shù)據(jù)在客戶端中展示給用戶,一般都進行了查詢的操作。
在實際開發(fā)中,我們要根據(jù)不同的需求,并且考慮查詢的效率來決定怎樣進行查詢,學習查詢前,可以先看看查詢的完整語法:
SELECT 字段列表FROM 表名列表WHERE 條件列表GROUP BY 分組字段HAVING 分組后條件ORDER BY 排序字段LIMIT 分頁限定
根據(jù)查詢的完整語法中的關鍵字,我們分別來學習基礎查詢,條件查詢,排序查詢,分組查詢和分頁查詢。
我們使用以下的案例學習單表查詢:
-- 刪除stu表 drop table if exists stu; -- 創(chuàng)建stu表 CREATE TABLE stu ( id int, -- 編號 name varchar(10), -- 姓名 age int, -- 年齡 gender varchar(5), -- 性別 math double(5,2), -- 數(shù)學成績 english double(5,2) -- 英語成績 ); -- 添加數(shù)據(jù) 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執(zhí)行:

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關鍵字,可以使用通配符進行占位:
- _ : 代表單個任意字符
- % : 代表任意個數(shù)字符
查詢姓名中含有張的學生信息:
select * from stu where name like '%張%';

3. 排序查詢
3.1 排序查詢語法
select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;
注:排序方式又兩種:分別是升序ASC和降序DESC,默認情況下是升序ASC。
3.2 排序查詢練習
我們使用前言中的案例進行排序查詢練習:
4. 聚合函數(shù)
4.1 聚合函數(shù)語法
什么是聚合函數(shù)呢?在進行查詢操作時,我們往往需要對一整列進行運算,例如我們可以計算一整列成績數(shù)據(jù)的平均值,我們就要使用聚合函數(shù)。下面是常見的聚合函數(shù):
| 函數(shù)名 | 功能 |
|---|---|
| count(列名) | 統(tǒng)計數(shù)量(一般選用不為null的列) |
| max(列名) | 最大值 |
| min(列名) | 最小值 |
| sum(列名) | 求和 |
| avg(列名) | 平均值 |
一般語法:
select 聚合函數(shù) from 表名;
注:NULL值不參與聚合函數(shù)運算。
4.2 聚合函數(shù)練習
我們使用前言中的案例進行聚合函數(shù)的練習:
統(tǒng)計該表中一共有幾個學生:
select count(id) from stu;

上面我們使用某一字段進行運算,這樣做可能面臨的問題是某一個值可能是NULL,所以我們一般使用 * 進行運算,因為一行中不可能所有的字段都是NULL。
select count(*) from stu;
查詢數(shù)學成績的平均分:
select avg(math) from stu;

5. 分組查詢
5.1 分組查詢語法
select 字段列表 from 表名 [where 分組前的條件限定] group by 分組字段名 [having 分組后的條件過濾]
注:分組之后,查詢的字段為聚合函數(shù)和分組字段,查詢其他字段無任何意義。
5.2 分組查詢練習
我們使用前言中的案例進行分組查詢練習:
查詢男同學和女同學各自的數(shù)學平均分,以及各自人數(shù),要求:分數(shù)低于70分的不參與分組:
select gender, avg(math),count(*) from stu where math > 70 group by gender;

查詢男同學和女同學各自的數(shù)學平均分,以及各自人數(shù),要求:分數(shù)低于70分的不參與分組,分組之后人數(shù)大于2個的:
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;

注:where 和 having 執(zhí)行時機不一樣:where 是分組之前進行限定,不滿足where條件,則不參與分組,而having是分組之后對結果進行過濾。所以,where 不能對聚合函數(shù)進行判斷,having 可以。
6. 分頁查詢
6.1 分頁查詢語法
在大家的印象中,網(wǎng)頁在展示大量的數(shù)據(jù)時,往往不是把數(shù)據(jù)一下全部展示出來,也是用分頁展示的形式,其實就是對數(shù)據(jù)進行分頁查詢的操作,即每次只查詢一頁的數(shù)據(jù)展示到頁面上。
select 字段列表 from 表名 limit 查詢起始索引,查詢條目數(shù);
在 limit 關鍵字中,查詢起始索引這個參數(shù)是從0開始的。
5.2 分頁查詢練習
我們使用前言中的案例進行分頁查詢練習:
從0開始查詢,查詢3條數(shù)據(jù):
select * from stu limit 0,3;

起始索引 = (當前頁碼 - 1) * 每頁顯示的條數(shù)
推薦學習:mysql視頻教程
站長資訊網(wǎng)