MySQL 語句執(zhí)行順序舉例解析
1、SQL數(shù)據(jù)舉例
舉例:有10個(gè)用戶,輸出在訂單表中下單數(shù)最多的5個(gè)人的名字。
my_user 表數(shù)據(jù)

my_order數(shù)據(jù)
my_order,uid對(duì)應(yīng)my_user表的id:

測(cè)試數(shù)據(jù)生成
寫一個(gè)存儲(chǔ)過程,隨機(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: 對(duì)FROM左邊的表和右邊的表計(jì)算笛卡爾積,產(chǎn)生虛表VT1。
- ON: 對(duì)虛表VT1進(jìn)行ON過濾,只有那些符合的行才會(huì)被記錄在虛表VT2中。
- JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就會(huì)作為外部行添加到虛擬表VT2中,產(chǎn)生虛擬表VT3。
- WHERE: 對(duì)虛擬表VT3進(jìn)行WHERE條件過濾。只有符合的記錄才會(huì)被插入到虛擬表VT4中。
- GROUP BY: 根據(jù)group by子句中的列,對(duì)VT4中的記錄進(jìn)行分組操作,產(chǎn)生VT5。
- HAVING: 對(duì)虛擬表VT5應(yīng)用having過濾,只有符合的記錄才會(huì)被 插入到虛擬表VT6中。
- SELECT: 執(zhí)行select操作,選擇指定的列,插入到虛擬表VT7中。
- DISTINCT: 對(duì)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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL如何自動(dòng)為查詢數(shù)據(jù)的結(jié)果編上序號(hào)詳解
這篇文章主要給大家介紹了關(guān)于MYSQL如何自動(dòng)為查詢數(shù)據(jù)的結(jié)果編上序號(hào)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧。2017-11-11
MySQL timestamp與時(shí)區(qū)問題的解決
本文主要介紹了MySQL timestamp與時(shí)區(qū)問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
mysql處理海量數(shù)據(jù)時(shí)的一些優(yōu)化查詢速度方法
最近一段時(shí)間由于工作需要,開始關(guān)注針對(duì)Mysql數(shù)據(jù)庫的select查詢語句的相關(guān)優(yōu)化方法,需要的朋友可以參考下2017-04-04
Windows下簡(jiǎn)單的Mysql備份BAT腳本分享
朋友說在windows下面用bat命令備份失敗,他一時(shí)找不到問題所在,于是找我?guī)兔Σ榭聪?。查找后解決了該問題,想著總結(jié)下來,所以這篇文章主要跟大家分享了一個(gè)在Windows下簡(jiǎn)單的Mysql備份BAT腳本,需要的朋友可以參考下。2017-03-03
MySQL中利用索引對(duì)數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程
這篇文章主要介紹了MySQL中利用索引對(duì)數(shù)據(jù)進(jìn)行排序的基礎(chǔ)教程,需要的朋友可以參考下2015-11-11
使用limit,offset分頁場(chǎng)景時(shí)為什么會(huì)慢
這篇文章主要介紹了使用limit,offset分頁場(chǎng)景時(shí)為什么會(huì)慢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-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

