基礎(chǔ)查詢(單表)
創(chuàng)建表、單行插入、多行插入就不重復(fù)介紹了。
替換
當(dāng)我們的程序每天都會(huì)產(chǎn)生大量的數(shù)據(jù),而這些數(shù)據(jù)都是前一天或者再之前的數(shù)據(jù)更新產(chǎn)生,我們也只需要保存其中一條,此時(shí)就考慮用新的數(shù)據(jù)替換老的數(shù)據(jù)。
語法:
replace into tablename values();
如果主鍵或者唯一鍵不沖突,則直接插入數(shù)據(jù)
如果主鍵或唯一鍵沖入,則刪除主鍵或唯一鍵重復(fù)的行再插入
查詢
- 全表全列查詢:select * from [表名]
- 全表指定列查詢:select [列名] [列名] … from [表名]
- 查詢字段為表達(dá)式,此時(shí)要注意區(qū)分表達(dá)式的內(nèi)容是否包含字段
- 為查詢結(jié)果指定別名
SELECT column [AS] alias_name […] FROM table_name;
- 結(jié)果去重
SELECT DISTINCT [列名] FROM table_name;
- WHERE,條件查詢,指定查詢行的內(nèi)容。在where后加上條件
比較運(yùn)算符:
運(yùn)算符 | 說明 |
---|---|
= | 等于,NULL 不安全,例如 NULL = NULL 的結(jié)果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的結(jié)果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范圍匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, …) | 如果是 option 中的任意一個(gè),返回 TRUE(1) |
LIKE | 模糊匹配。% 表示任意多個(gè)(包括 0 個(gè))任意字符;_ 表示任意一個(gè)字符 |
邏輯運(yùn)算符:
運(yùn)算符 | 說明 |
---|---|
AND | 多個(gè)條件必須都為 TRUE(1),結(jié)果才是 TRUE(1) |
OR | 任意一個(gè)條件為 TRUE(1), 結(jié)果為 TRUE(1) |
NOT | 條件為 TRUE(1),結(jié)果為 FALSE(0) |
結(jié)果排序
order by [字段名] :將查詢結(jié)果按照order by后的字段進(jìn)行排序
語法:
SELECT … FROM table_name [WHERE …] ORDER BY column [ASC|DESC], […];
ASC 為升序(默認(rèn)是升序)
DESC為降序
在使用 ORDER BY 進(jìn)行排序時(shí),不能依賴排序結(jié)果的具體順序,尤其是當(dāng)排序字段中存在相同的值時(shí)。
不同的數(shù)據(jù)庫管理系統(tǒng)可能采用不同的算法和策略來處理排序,因此排序結(jié)果可能會(huì)有所不同。如果需要確保特定的排序結(jié)果,可以通過在 ORDER BY 子句中指定多個(gè)排序條件,以便在有相同值的情況下進(jìn)行更精確的排序。例如,可以使用其他字段作為次要排序條件來進(jìn)一步確定排序順序。也就是按照多列進(jìn)行排序。order by 字段1,字段2
,先按照字段1進(jìn)行排序,再將字段1的結(jié)果中相同字段值的部分,按照字段2進(jìn)行排序
order by中可以使用別名,與where不同,where中不允許使用別名
篩選分頁結(jié)果
篩選分頁結(jié)果是一種數(shù)據(jù)查詢和展示技術(shù),用于在大數(shù)據(jù)集中按需獲取特定頁的數(shù)據(jù)。通常情況下,數(shù)據(jù)庫中的數(shù)據(jù)量可能非常龐大,而且一次性檢索和顯示所有數(shù)據(jù)可能會(huì)導(dǎo)致性能問題和用戶體驗(yàn)下降。通過篩選分頁結(jié)果,可以按照用戶的需求和界面的設(shè)計(jì),以分頁的方式逐步加載和展示數(shù)據(jù),提供更好的用戶體驗(yàn)并減少數(shù)據(jù)庫和網(wǎng)絡(luò)資源的負(fù)載。
需要注意:篩選分頁結(jié)果的起始下標(biāo)是從0開始的。
- 從 0 開始,篩選 n 條結(jié)果
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n;
- 從 s 開始,篩選 n 條結(jié)果
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n;
- 從 s 開始,篩選 n 條結(jié)果,比第二種用法更明確,建議使用
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n OFFSET s;
更新表
語法:
UPDATE table_name SET column1 = value1, column2 = value2, … WHERE condition;
注意:如果沒有condition,則會(huì)將所有的行對(duì)應(yīng)的列進(jìn)行更新
在執(zhí)行UPDATE語句時(shí),請務(wù)必謹(jǐn)慎,確保更新的條件和值符合預(yù)期,以免誤操作導(dǎo)致數(shù)據(jù)不正確或不可恢復(fù)的問題。在更新表之前,最好先進(jìn)行備份或測試,以確保安全性和正確性。
刪除數(shù)據(jù)
語法:
DELETE FROM table_name WHERE condition;
如果沒有condition,那么刪除的是整張表。
如果把整張表的數(shù)據(jù)都刪除了,但是表依舊在,原先的表結(jié)構(gòu)不會(huì)改變。 AUTO_INCREMENT會(huì)在之前的基礎(chǔ)上增加。
需要注意的是,執(zhí)行DELETE語句會(huì)永久刪除數(shù)據(jù),因此在刪除數(shù)據(jù)之前,請確保確認(rèn)操作并做好備份。
截?cái)?清空)表
語法:
TRUNCATE [TABLE] table_name
截?cái)啾韺h除表中的所有行,但保留表的定義、索引、約束等信息
這個(gè)操作只能對(duì)整張表進(jìn)行操作,不能像 DELETE 一樣針對(duì)部分?jǐn)?shù)據(jù)操作; 會(huì)重置 AUTO_INCREMENT 項(xiàng)
聚合函數(shù)
函數(shù) | 說明 |
---|---|
COUNT([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的 數(shù)量 |
SUM([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的 總和,不是數(shù)字沒有意義 |
AVG([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的 平均值,不是數(shù)字沒有意義 |
MAX([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的 最大值,不是數(shù)字沒有意義 |
MIN([DISTINCT] expr) | 返回查詢到的數(shù)據(jù)的 最小值,不是數(shù)字沒有意義 |
分組查詢
分組查詢是一種在數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)分組和聚合的操作。它允許我們按照指定的列或表達(dá)式對(duì)數(shù)據(jù)進(jìn)行分組,并在每個(gè)組上執(zhí)行聚合函數(shù)來計(jì)算匯總值。
在select中使用group by 子句對(duì)指定列進(jìn)行分組查詢:
select column1, column2, … from table group by column;
我們以雇員信息表為例(來自oracle 9i的經(jīng)典測試表)
- 如何顯示每個(gè)部門的平均工資和最高工資
select deptno,avg(sal),max(sal) from emp group by deptno;
執(zhí)行結(jié)果:
- 顯示每個(gè)部門的每種崗位的平均工資和最低工資
select avg(sal),min(sal),job,deptno from emp group by deptno,job;
執(zhí)行結(jié)果:
- 顯示平均工資低于2000的部門和它的平均工資,首先統(tǒng)計(jì)各個(gè)部門的平均工資,再配合having進(jìn)行過濾
統(tǒng)計(jì)各個(gè)部門的平均工資
select deptno,avg(sal) from emp group by deptno;
執(zhí)行結(jié)果:
對(duì)結(jié)果進(jìn)行過濾,得到平均工資低于2000的部門
select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;
執(zhí)行結(jié)果:
分組查詢可以幫助我們對(duì)數(shù)據(jù)進(jìn)行更細(xì)粒度的統(tǒng)計(jì)和分析。我們可以根據(jù)需要對(duì)多個(gè)列進(jìn)行分組,并在每個(gè)組上執(zhí)行多個(gè)聚合函數(shù)。此外,還可以通過使用HAVING子句對(duì)分組結(jié)果進(jìn)行過濾。文章來源:http://www.zghlxwxcb.cn/news/detail-451693.html
分組查詢是 SQL 中常用的功能之一,可以用于處理統(tǒng)計(jì)報(bào)表、數(shù)據(jù)分析和生成匯總結(jié)果等場景。文章來源地址http://www.zghlxwxcb.cn/news/detail-451693.html
到了這里,關(guān)于MySQL數(shù)據(jù)庫基礎(chǔ)3-基礎(chǔ)查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!