Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

क्या MySQL SELECT और HAVING/GROUP BY क्लॉज के बीच सामान्य उप-अभिव्यक्तियों को समाप्त करता है? कैसे परीक्षण करें

परीक्षण के लिए, sleep() फ़ंक्शन का उपयोग करें।

केस 1 -

सिंटैक्स इस प्रकार है -

SELECT yourColumnName + SLEEP(yourIntegerValue) FROM yourTableName GROUP BY yourColumnName + SLEEP(yourIntegerValue);

केस 2 - आप एक और सिंटैक्स उपयोग कर सकते हैं जो इस प्रकार है -

SELECT yourColumnName + SLEEP(yourIntegerValue) AS anyAliasName FROM yourTableName GROUP BY yourAliasName;

उपरोक्त सिंटैक्स को समझने के लिए, आइए एक टेबल बनाते हैं। टेबल बनाने की क्वेरी इस प्रकार है -

mysql> create table sleepDemo 
-> ( 
-> value int 
-> ); 
Query OK, 0 rows affected (1.25 sec)

insert कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड्स डालें। क्वेरी इस प्रकार है -

mysql> insert into sleepDemo values(40); 
Query OK, 1 row affected (0.18 sec) 
mysql> insert into sleepDemo values(60); 
Query OK, 1 row affected (0.19 sec) 
mysql> insert into sleepDemo values(60); 
Query OK, 1 row affected (0.10 sec)

select स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड्स प्रदर्शित करें। क्वेरी इस प्रकार है -

mysql> select *from sleepDemo;

यहां आउटपुट है -

+-------+ 
| value | 
+-------+ 
| 40 | 
| 60 | 
| 60 | 
+-------+ 
3 rows in set (0.00 sec)

SELECT और HAVING/GROUP BY क्लॉज के बीच सामान्य उप-अभिव्यक्तियों को समाप्त करने की क्वेरी यहां है।

केस 1 - क्वेरी इस प्रकार है -

mysql> SELECT value + SLEEP(3) 
-> FROM sleepDemo 
-> GROUP BY value + SLEEP(3);

आउटपुट इस प्रकार है -

+----------------+ 
| value + SLEEP(3) | 
+----------------+ 
| 40 | 
| 60 | 
+----------------+ 
2 rows in set (9.00 sec)

उपरोक्त क्वेरी प्रत्येक मान के लिए 9 सेकंड लेती है (40 के लिए 3 सेकंड, 60 के लिए 3 सेकंड, 60 के लिए 3 सेकंड)।

केस 2 - क्वेरी इस प्रकार है -

mysql> SELECT value + SLEEP(3) AS v 
-> FROM sleepDemo 
-> GROUP BY v;

आउटपुट इस प्रकार है -

+------+ 
| v | 
+------+ 
| 40 | 
| 60 | 
+------+ 
2 rows in set (9.00 sec)
निष्कर्ष: दोनों केस 9 सेकंड लेते हैं (3 मान × 3 सेकंड), साबित करते हुए कि MySQL (कम से कम परीक्षण किए गए संस्करण में) सामान्य उप-अभिव्यक्तियों को समाप्त नहीं करता - SLEEP(3) का मूल्यांकन प्रत्येक पंक्ति के लिए दो बार किया जाता है (एक बार SELECT सूची में, एक बार GROUP BY में)। समाधान: केस 2 की तरह एलियास (AS v) का उपयोग करें और GROUP BY v लिखें। MySQL 8.0+ में ऑप्टिमाइज़र कुछ मामलों में बेहतर हो सकता है, लेकिन एलियास का उपयोग करना सुरक्षित और पोर्टेबल अभ्यास है।
  1. - MySQL में GROUP BY, HAVING और ORDER BY का उपयोग करके विशिष्ट रेंज में SUM वाले रिकॉर्ड्स कैसे प्रदर्शित करें

    GROUP BY, HAVING और ORDER BY को मिलाकर रेंज फ़िल्टरिंग आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, CustomerName VARCHAR(20), ProductPrice INT ); रिकॉर्ड्स इन्सर्ट करें: mysql> INSERT INTO DemoTable (CustomerName, ProductPr

  1. - MySQL में शर्त के साथ ORDER BY और SELECT कैसे करें?

    कंडीशनल ORDER BY: जीरो वैल्यू अंत में किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें। सिंटैक्स SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName; टेबल बनाना और डेटा इन्सर्ट करना CREATE TABL

  1. - MySQL UNION SELECT और IN क्लॉज एक ही क्वेरी में

    UNION और IN क्लॉज को संयोजित करना पहले टेबल बनाएं: create table DemoTable1 ( StudentId int, StudentName varchar(20) ); Query OK, 0 rows affected (1.24 sec) रिकॉर्ड डालें: insert into DemoTable1 values(210,Adam); Query OK, 1 row affected (0.11 sec) सभी रिकॉर्ड देखें: select * from DemoTable1; आउटप