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ù)生成
寫一個存儲過程,隨機(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ù)為準(zhǔn)):

統(tǒng)計(jì)所有的用戶訂單數(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左邊的表和右邊的表計(jì)算笛卡爾積,產(chǎn)生虛表VT1。
- ON: 對虛表VT1進(jìn)行ON過濾,只有那些符合的行才會被記錄在虛表VT2中。
- JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就會作為外部行添加到虛擬表VT2中,產(chǎn)生虛擬表VT3。
- WHERE: 對虛擬表VT3進(jìn)行WHERE條件過濾。只有符合的記錄才會被插入到虛擬表VT4中。
- GROUP BY: 根據(jù)group by子句中的列,對VT4中的記錄進(jìn)行分組操作,產(chǎn)生VT5。
- HAVING: 對虛擬表VT5應(yīng)用having過濾,只有符合的記錄才會被 插入到虛擬表VT6中。
- SELECT: 執(zhí)行select操作,選擇指定的列,插入到虛擬表VT7中。
- DISTINCT: 對VT7中的記錄進(jìn)行去重。產(chǎn)生虛擬表VT8.
- ORDER BY: 將虛擬表VT8中的記錄按照進(jìn)行排序操作,產(chǎn)生虛擬表VT9.
- LIMIT:取出指定行的記錄,產(chǎn)生虛擬表VT10, 并將結(jié)果返回。
到此這篇關(guān)于MySQL 語句執(zhí)行順序舉例解析的文章就介紹到這了,更多相關(guān)MySQL 語句執(zhí)行順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL如何自動為查詢數(shù)據(jù)的結(jié)果編上序號詳解
這篇文章主要給大家介紹了關(guān)于MYSQL如何自動為查詢數(shù)據(jù)的結(jié)果編上序號的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。2017-11-11
mysql處理海量數(shù)據(jù)時的一些優(yōu)化查詢速度方法
最近一段時間由于工作需要,開始關(guān)注針對Mysql數(shù)據(jù)庫的select查詢語句的相關(guān)優(yōu)化方法,需要的朋友可以參考下2017-04-04
MySQL中利用索引對數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程
這篇文章主要介紹了MySQL中利用索引對數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程,需要的朋友可以參考下2015-11-11
虛擬機(jī)linux端mysql數(shù)據(jù)庫無法遠(yuǎn)程訪問的解決辦法
最近在項(xiàng)目搭建過程中遇到一問題,有關(guān)虛擬機(jī)linux端mysql數(shù)據(jù)庫無法遠(yuǎn)程訪問,通過查閱相關(guān)數(shù)據(jù)庫資料問題解決,下面把具體的解決辦法分享給大家,有需要的朋友可以參考下2015-08-08

