MySQL嵌套查詢實例詳解。本站提示廣大學習愛好者:(MySQL嵌套查詢實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL嵌套查詢實例詳解正文
本文實例剖析了MySQL嵌套查詢。分享給年夜家供年夜家參考,詳細以下:
MySQl從4.11版後曾經完整支撐嵌套查詢了,那末上面舉些簡略的嵌套查詢的例子吧(源法式來自MySQL User Manual):
1. SELECT語句的子查詢
語法: SELECT ... FROM (subquery) AS name ...
先創立一個表:
CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT); INSERT INTO t1 VALUES (1,'1',1.0); INSERT INTO t1 VALUES (2,'2',2.0);
我們便可以停止以下的嵌套查詢了:
SELECT sb1,sb2,sb3 FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb WHERE sb1 > 1;
成果是: 2, '2', 4.0.
我們曉得上面語句是不會獲得准確成果的,由於對經由Group by排序的聚集停止求均值是不克不及獲得准確謎底的:
SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1
所以我們可以經由過程上面的嵌套查詢完成異樣的後果:
SELECT AVG(sum_column1) FROM (SELECT SUM(column1) AS sum_column1 FROM t1 GROUP BY column1) AS t1;
2.行的子查詢(Row Subquery)
看上面的例子:
SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
這個查詢是前往column1等於column2的成果行。Row函數中的1和2相當於結構參數。想必Blogjava上的同志對這些應當比擬清晰,也不去具體引見了。
3.應用Exist和Not Exist參數
這裡的Exist和Not Exist用處及用法和在其他沒有甚麼年夜的差別,我就簡略舉幾個典范好了:
典范一:
SELECT DISTINCT store_type FROM Stores WHERE EXISTS (SELECT * FROM Cities_Stores WHERE Cities_Stores.store_type = Stores.store_type);
典范二:
SELECT DISTINCT store_type FROM Stores WHERE NOT EXISTS (SELECT * FROM Cities_Stores WHERE Cities_Stores.store_type = Stores.store_type);
典范三: 這個例子中嵌套應用了Not Exist語法,略微留意一下:
SELECT DISTINCT store_type FROM Stores S1 WHERE NOT EXISTS ( SELECT * FROM Cities WHERE NOT EXISTS ( SELECT * FROM Cities_Stores WHERE Cities_Stores.city = Cities.city AND Cities_Stores.store_type = Stores.store_type));
4.前提聯系關系關系查詢
SELECT column1 FROM t1 AS x WHERE x.column1 = (SELECT column1 FROM t2 AS x WHERE x.column1 = (SELECT column1 FROM t3 WHERE x.column2 = t3.column1));
跟其他數據庫做法是一樣的。
5.其他應用辦法和留意
除下面這些還有許多許多,不外就不去細講了,由於這些跟其余數據庫差不多,只是為了給年夜家一個參考,提提就夠了。
SELECT (SELECT s1 FROM t2) FROM t1; SELECT (SELECT s2 FROM t1);
支撐子查詢的語法有:SELECT,INSERT,UPDATE,DELETE,SET和DO。
子查詢可使用任何通俗查詢中應用的症結詞:如DINSTINCT,GROUP BY,LIMIT,ORDER BY,UNION,ALL,UNION ALL等。可使用<,>, <=, >=, =, <>運算符停止比擬,也能夠應用ANY ,IN和SOME停止聚集的婚配。
願望本文所述對年夜家MySQL數據庫法式設計有所贊助。