मारियाडीबी में, RAND()
एक अंतर्निहित फ़ंक्शन है जो एक यादृच्छिक DOUBLE
देता है सटीक फ़्लोटिंग पॉइंट मान v
श्रेणी में 0 <= v < 1.0
।
सिंटैक्स
RAND()
निम्नलिखित दो तरीकों से इस्तेमाल किया जा सकता है:
RAND()
RAND(N)
जहां N
बीज मान के रूप में उपयोग किया जाने वाला एक स्थिर पूर्णांक है।
जब बीज मूल्य का उपयोग किया जाता है, RAND()
स्तंभ मानों का एक पुनरावर्तनीय अनुक्रम उत्पन्न करता है।
उदाहरण
RAND()
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है बीज मूल्य निर्दिष्ट किए बिना:
SELECT RAND();
परिणाम:
+---------------------+ | RAND() | +---------------------+ | 0.14470310708945908 | +---------------------+
उदाहरण - बीज के साथ
RAND()
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है साथ एक बीज मूल्य:
SELECT RAND(3);
परिणाम:
+--------------------+ | RAND(3) | +--------------------+ | 0.9057697559760601 | +--------------------+
उपरोक्त उदाहरण का उपयोग करते समय हम वास्तव में अंतर नहीं बता सकते। अंतर देखने के लिए, हमें एक ही बीज का उपयोग करके कई फ़ंक्शन कॉल करने की आवश्यकता है।
इस तरह:
SELECT
RAND(3),
RAND(3),
RAND(3);
परिणाम:
+--------------------+--------------------+--------------------+ | RAND(3) | RAND(3) | RAND(3) | +--------------------+--------------------+--------------------+ | 0.9057697559760601 | 0.9057697559760601 | 0.9057697559760601 | +--------------------+--------------------+--------------------+
हम देख सकते हैं कि तीनों कॉलों का परिणाम समान था।
यहां बताया गया है कि जब हम बीज मूल्य को छोड़ देते हैं तो क्या होता है:
SELECT
RAND(),
RAND(),
RAND();
परिणाम:
+--------------------+---------------------+---------------------+ | RAND() | RAND() | RAND() | +--------------------+---------------------+---------------------+ | 0.7037061310407763 | 0.08442136466914915 | 0.31098846095706195 | +--------------------+---------------------+---------------------+
प्रत्येक कॉल एक अलग मान देता है।
एक सीमा के भीतर यादृच्छिक पूर्णांक
हम RAND()
. को मिला सकते हैं FLOOR()
. के साथ , कुछ गणनाओं के साथ, एक सीमा के भीतर एक यादृच्छिक पूर्णांक लौटाने के लिए।
ऐसा करने के लिए वाक्य रचना इस प्रकार है:
FLOOR(min_value + RAND() * (max_value - min_value +1))
इसलिए, हम 1 और 10 के बीच एक यादृच्छिक पूर्णांक वापस करने के लिए निम्न कार्य कर सकते हैं:
SELECT FLOOR(1 + RAND() * (10 - 1 +1));
परिणाम:
+---------------------------------+ | FLOOR(1 + RAND() * (10 - 1 +1)) | +---------------------------------+ | 6 | +---------------------------------+
यादृच्छिक प्रभाव देखने के लिए इसे कुछ और कहते हैं:
SELECT
FLOOR(1 + RAND() * (10 - 1 +1)) AS r1,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r2,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r3,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r4,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r5,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r6,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r7,
FLOOR(1 + RAND() * (10 - 1 +1)) AS r8;
परिणाम:
+----+----+----+----+----+----+----+----+ | r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8 | +----+----+----+----+----+----+----+----+ | 3 | 6 | 10 | 4 | 6 | 10 | 1 | 6 | +----+----+----+----+----+----+----+----+
टेबल से रैंडम पंक्तियां लौटाएं
RAND()
ORDER BY
. के संयोजन में उपयोग किया जा सकता है खंड और LIMIT
डेटाबेस तालिका से यादृच्छिक पंक्तियों को वापस करने के लिए कीवर्ड:
SELECT
PetId,
PetName
FROM Pets
ORDER BY RAND()
LIMIT 5;
उदाहरण परिणाम:
+-------+---------+ | PetId | PetName | +-------+---------+ | 5 | Tweet | | 7 | Bark | | 1 | Fluffy | | 8 | Meow | | 3 | Scratch | +-------+---------+
और अगर मैं इसे फिर से चलाता हूं, तो मुझे यह मिलता है:
+-------+---------+ | PetId | PetName | +-------+---------+ | 3 | Scratch | | 8 | Meow | | 4 | Wag | | 7 | Bark | | 6 | Fluffy | +-------+---------+
और इसी तरह…
हालांकि, ध्यान रखें कि यह काफी गहन है, और इसका उपयोग बड़े टेबल पर नहीं किया जाना चाहिए। डेटा नमूनाकरण देखें:बड़ी तालिकाओं के लिए अधिक उपयुक्त तकनीकों के लिए मारियाडीबी वेबसाइट पर एक यादृच्छिक पंक्ति को कुशलतापूर्वक खोजने के लिए तकनीकें देखें।
गैर-संख्यात्मक बीज
जब हम गैर-संख्यात्मक बीज मान प्रदान करते हैं तो क्या होता है इसका एक उदाहरण यहां दिया गया है:
SELECT RAND('five');
परिणाम:
+---------------------+ | RAND('five') | +---------------------+ | 0.15522042769493574 | +---------------------+ 1 row in set, 1 warning (0.000 sec)
आइए देखें चेतावनी:
SHOW WARNINGS;
परिणाम:
+---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'five' | +---------+------+-------------------------------------------+
साथ ही, यह वही परिणाम देता है, भले ही गैर-संख्यात्मक बीज का उपयोग किया गया हो। उदाहरण के लिए, यदि मैं उस पर अलग-अलग गैर-संख्यात्मक बीज फेंकता हूं, तो मुझे वही परिणाम मिलता है:
SELECT
RAND('one'),
RAND('two'),
RAND('three');
परिणाम:
+---------------------+---------------------+---------------------+ | RAND('one') | RAND('two') | RAND('three') | +---------------------+---------------------+---------------------+ | 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 | +---------------------+---------------------+---------------------+ 1 row in set, 3 warnings (0.000 sec)
चेतावनियों की जाँच करें:
SHOW WARNINGS;
परिणाम:
+---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: 'one' | | Warning | 1292 | Truncated incorrect INTEGER value: 'two' | | Warning | 1292 | Truncated incorrect INTEGER value: 'three' | +---------+------+--------------------------------------------+
अशक्त तर्क
RAND()
जब बीज null
होता है तो वही मान लौटाता है :
SELECT
RAND(null),
RAND(null),
RAND(null);
परिणाम:
+---------------------+---------------------+---------------------+ | RAND(null) | RAND(null) | RAND(null) | +---------------------+---------------------+---------------------+ | 0.15522042769493574 | 0.15522042769493574 | 0.15522042769493574 | +---------------------+---------------------+---------------------+
हालांकि, इस मामले में कोई चेतावनी नहीं है।
बहुत अधिक तर्क
कॉलिंग RAND()
बहुत अधिक तर्कों के परिणामस्वरूप त्रुटि होती है:
SELECT RAND(1, 2);
परिणाम:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'RAND'