MySQL 語句執(zhí)行順序舉例解析
1、SQL數(shù)據(jù)舉例
舉例:有10個用戶,輸出在訂單表中下單數(shù)最多的5個人的名字。
my_user 表數(shù)據(jù)
my_order數(shù)據(jù)
my_order,uid對應(yīng)my_user表的id:
測試數(shù)據(jù)生成
寫一個存儲過程,隨機插入10000條數(shù)據(jù):
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_loop`( ) BEGIN DECLARE i INT DEFAULT 1; WHILE i < 10000 DO INSERT INTO my_order ( oid, uid ) VALUES ( CONCAT( 'o_', DATE_FORMAT( now( ), '%Y%m%d%h%i%s' ), FLOOR(1000 + RAND( )*(9999-1000) )), FLOOR( 1 + RAND( ) * 10 ) ); SET i = i + 1; END WHILE; END
查詢語句:
SELECT u.id, u.`name`, count( o.uid ) count_num FROM my_user u JOIN my_order o ON u.id = o.uid GROUP BY o.uid HAVING COUNT( o.uid ) ORDER BY COUNT( o.uid ) DESC LIMIT 5;
查詢結(jié)果(以自己數(shù)據(jù)為準):
統(tǒng)計所有的用戶訂單數(shù):
SELECT u.id, u.`name`, count( o.uid ) count_num FROM my_user u JOIN my_order o ON u.id = o.uid GROUP BY o.uid HAVING COUNT( o.uid ) ORDER BY COUNT( o.uid ) DESC
結(jié)果如下:
該sql 主要考察 group by 和 having 的使用,然后 order by 和 desc 排序。
2、SQL的執(zhí)行順序
- FORM: 對FROM左邊的表和右邊的表計算笛卡爾積,產(chǎn)生虛表VT1。
- ON: 對虛表VT1進行ON過濾,只有那些符合的行才會被記錄在虛表VT2中。
- JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就會作為外部行添加到虛擬表VT2中,產(chǎn)生虛擬表VT3。
- WHERE: 對虛擬表VT3進行WHERE條件過濾。只有符合的記錄才會被插入到虛擬表VT4中。
- GROUP BY: 根據(jù)group by子句中的列,對VT4中的記錄進行分組操作,產(chǎn)生VT5。
- HAVING: 對虛擬表VT5應(yīng)用having過濾,只有符合的記錄才會被 插入到虛擬表VT6中。
- SELECT: 執(zhí)行select操作,選擇指定的列,插入到虛擬表VT7中。
- DISTINCT: 對VT7中的記錄進行去重。產(chǎn)生虛擬表VT8.
- ORDER BY: 將虛擬表VT8中的記錄按照進行排序操作,產(chǎn)生虛擬表VT9.
- LIMIT:取出指定行的記錄,產(chǎn)生虛擬表VT10, 并將結(jié)果返回。
到此這篇關(guān)于MySQL 語句執(zhí)行順序舉例解析的文章就介紹到這了,更多相關(guān)MySQL 語句執(zhí)行順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
Mysql進行數(shù)據(jù)備份,還原后進行回帖,出現(xiàn)以下錯誤代碼,其實主要是導(dǎo)入數(shù)據(jù)重復(fù)的問題,將現(xiàn)在的數(shù)據(jù)表清空,重新導(dǎo)入即可2012-07-07mysql 8.0.18 壓縮包安裝及忘記密碼重置所遇到的坑
這篇文章主要介紹了mysql 8.0.18 壓縮包安裝及忘記密碼重置所遇到的坑,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12ubuntu系統(tǒng)中安裝mysql5.6(通過二進制)
今天工作中需要對一臺ubantu的系統(tǒng)安裝mysql,因為以前一直使用的是centos,雖然它也是類unix但是和redhat或centos命令上還是有點差別。所以通過網(wǎng)上查閱資料,終于安裝成功了,現(xiàn)在將步驟分享給大家,有需要的朋友們可以參考借鑒。2016-10-10Mysql ERROR 1067: Invalid default v
這篇文章主要介紹了Mysql ERROR 1067: Invalid default value for字段問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的完整實例
這篇文章主要給大家介紹了關(guān)于mysql從一張表查詢批量數(shù)據(jù)并插入到另一表中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01詳解MySQL中concat函數(shù)的用法(連接字符串)
本篇文章主要介紹了MySQL中concat函數(shù)的用法(連接字符串),在命令行模式下進行測試。具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12