MySQL之復(fù)雜查詢(xún)的實(shí)現(xiàn)
1.排序
ORDER BY 子句來(lái)設(shè)定哪個(gè)字段哪種方式來(lái)進(jìn)行排序,再返回搜索結(jié)果。
desc:降序
select * from blog order by balance desc;
asc:升序,默認(rèn),可不寫(xiě)
select * from blog order by balance asc;
多字段排序
update blog set age = 25 where age < 25;
先根據(jù)年齡升序,再根據(jù)余額降序
select * from blog order by age asc, balance desc;
2.分組
GROUP BY 語(yǔ)句根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。
新建員工表
CREATE TABLE `employee` ( `id` int NOT NULL, `name` varchar(20) NOT NULL DEFAULT '', `identity` varchar(20) NOT NULL DEFAULT '', `signin` tinyint NOT NULL DEFAULT '0' COMMENT '打卡次數(shù)', `date` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
插入數(shù)據(jù)
INSERT INTO `employee` VALUES ('1', '小明', 'firemen', 3, '2022-02-21'), ('2', '小王', 'doctor', 3, '2022-02-21'), ('3', '小麗', 'police', 3, '2022-02-21'), ('4', '小王', 'doctor', 2, '2022-02-22'), ('5', '小明', 'firemen', 1, '2022-02-22'), ('6', '小麗', 'police', 3, '2022-02-22'), ('7', '小明', 'firemen', 2, '2022-02-23'), ('8', '小王', 'doctor', 2, '2022-02-23'), ('9', '小紅', 'nurse', 3, '2022-02-23');
統(tǒng)計(jì)每人打卡記錄數(shù)
SELECT name, COUNT(*) FROM employee GROUP BY name;
WITH ROLLUP 可以實(shí)現(xiàn)在分組統(tǒng)計(jì)數(shù)據(jù)基礎(chǔ)上再進(jìn)行相同的統(tǒng)計(jì)(SUM,AVG,COUNT…)
統(tǒng)計(jì)每人打卡總數(shù)
SELECT name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;
其中記錄 NULL 表示所有人的登錄次數(shù)。
使用 coalesce 來(lái)設(shè)置一個(gè)可以取代 NUll 的名稱(chēng)
coalesce 語(yǔ)法:select coalesce(a,b,c);
SELECT name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;
3.聯(lián)合查詢(xún)
UNION 操作符用于連接兩個(gè)以上的 SELECT 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。
UNION ALL:返回所有結(jié)果集,包含重復(fù)數(shù)據(jù)。
select author from blog UNION ALL select identity from employee;
報(bào)錯(cuò):Illegal mix of collations for operation ‘UNION’
原因:相同字段的編碼不一致造成的
解決:修改blog表的author字段
alter table blog modify `author` varchar(40) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
UNION DISTINCT: 刪除結(jié)果集中重復(fù)的數(shù)據(jù)。默認(rèn),可不寫(xiě)
select author from blog UNION select identity from employee;
4.多表連接
INNER JOIN(內(nèi)連接,或等值連接):獲取兩個(gè)表中字段匹配關(guān)系的記錄。 LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒(méi)有對(duì)應(yīng)匹配的記錄。 RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒(méi)有對(duì)應(yīng)匹配的記錄。
內(nèi)連接
INNER 可以省略
select b.author, b.age, b.title, e.name, e.signin from blog b INNER JOIN employee e on b.author = e.identity;
where條件實(shí)現(xiàn)內(nèi)連接效果
select b.author, b.age, b.title, e.name, e.signin from blog b,employee e where b.author = e.identity;
左連接:讀取左邊數(shù)據(jù)表的全部數(shù)據(jù),即便右邊表無(wú)對(duì)應(yīng)數(shù)據(jù)。
select b.author, b.age, b.title, e.name, e.signin from blog b LEFT JOIN employee e on b.author = e.identity;
右連接:讀取右邊數(shù)據(jù)表的全部數(shù)據(jù),即便左邊邊表無(wú)對(duì)應(yīng)數(shù)據(jù)。
select b.author, b.age, b.title, e.name, e.signin from blog b RIGHT JOIN employee e on b.author = e.identity;
到此這篇關(guān)于MySQL之復(fù)雜查詢(xún)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 復(fù)雜查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL的時(shí)間差函數(shù)(TIMESTAMPDIFF、DATEDIFF)、日期轉(zhuǎn)換計(jì)算函數(shù)(date_add、day、da
這篇文章主要介紹了MySQL的時(shí)間差函數(shù)(TIMESTAMPDIFF、DATEDIFF)、日期轉(zhuǎn)換計(jì)算函數(shù)(date_add、day、date_format、str_to_date),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12MySQL數(shù)據(jù)庫(kù)修改密碼以及設(shè)置密碼永過(guò)期問(wèn)題
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)修改密碼以及設(shè)置密碼永過(guò)期問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04MySQL之存儲(chǔ)過(guò)程按月創(chuàng)建表的方法步驟
這篇文章主要介紹了MySQL之存儲(chǔ)過(guò)程按月創(chuàng)建表的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09MySQL8 臨時(shí)關(guān)閉緩存的方法實(shí)現(xiàn)
在某些場(chǎng)景下,如基準(zhǔn)測(cè)試、數(shù)據(jù)一致性檢查或高頻數(shù)據(jù)更新,可能需要臨時(shí)關(guān)閉緩存以獲得更準(zhǔn)確的性能數(shù)據(jù)或解決性能問(wèn)題,本文就詳細(xì)的介紹一下MySQL8 臨時(shí)關(guān)閉緩存的方法實(shí)現(xiàn),感興趣的可以了解一下2024-10-10php基礎(chǔ)之連接mysql數(shù)據(jù)庫(kù)和查詢(xún)數(shù)據(jù)
這篇文章主要介紹了php連接mysql數(shù)據(jù)庫(kù)和查詢(xún)數(shù)據(jù)的方法和示例,需要的朋友可以參考下2014-08-08Mysql到Elasticsearch高效實(shí)時(shí)同步Debezium實(shí)現(xiàn)
這篇文章主要為大家介紹了Mysql到Elasticsearch高效實(shí)時(shí)同步Debezium的實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02