mysql 举例_MySQL 语句举例(一)
舉例:有10個用戶,輸出在訂單表中下單數最多的5個人的名字。
my_user 表數據
my_order,uid對應my_user表的id
測試數據生成
寫一個存儲過程,隨機插入10000條數據:
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
count( o.uid ) count_num,
u.NAME
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;
查詢結果:
統計所有的用戶訂單數,結果如下:
SELECT
count( o.uid ) count_num,
u.NAME
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
該sql 主要考察 group by 和 having 的使用,然后 order by 和 desc 排序。
★sql 的執行順序如下:
1、FORM: 對FROM左邊的表和右邊的表計算笛卡爾積,產生虛表VT1。
2、ON: 對虛表VT1進行ON過濾,只有那些符合的行才會被記錄在虛表VT2中。
3、JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就會作為外部行添加到虛擬表VT2中,產生虛擬表VT3。
4、WHERE: 對虛擬表VT3進行WHERE條件過濾。只有符合的記錄才會被插入到虛擬表VT4中。
5、GROUP BY: 根據group by子句中的列,對VT4中的記錄進行分組操作,產生VT5。
6、HAVING: 對虛擬表VT5應用having過濾,只有符合的記錄才會被 插入到虛擬表VT6中。
7、SELECT: 執行select操作,選擇指定的列,插入到虛擬表VT7中。
8、DISTINCT: 對VT7中的記錄進行去重。產生虛擬表VT8.
9、ORDER BY: 將虛擬表VT8中的記錄按照進行排序操作,產生虛擬表VT9.
10、LIMIT:取出指定行的記錄,產生虛擬表VT10, 并將結果返回。
總結
以上是生活随笔為你收集整理的mysql 举例_MySQL 语句举例(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net.conn read 判断数据读取
- 下一篇: 图数据库_ONgDB图数据库与Spark