यह MariaDB / MySQL . की अनिवार्यताओं के बारे में 2-लेख श्रृंखला का दूसरा भाग है आदेश। कृपया आगे बढ़ने से पहले इस विषय पर हमारा पिछला लेख देखें।
- शुरुआती लोगों के लिए MySQL/MariaDB मूल बातें सीखें - भाग 1
MySQL/MariaDB शुरुआती श्रृंखला के इस दूसरे भाग में, हम समझाएंगे कि SELECT द्वारा लौटाई गई पंक्तियों की संख्या को कैसे सीमित किया जाए क्वेरी, और किसी दिए गए शर्त के आधार पर परिणाम सेट को कैसे ऑर्डर करें।
इसके अतिरिक्त, हम सीखेंगे कि कैसे रिकॉर्ड्स को समूहीकृत किया जाए और संख्यात्मक क्षेत्रों पर बुनियादी गणितीय हेरफेर किया जाए। यह सब हमें एक SQL स्क्रिप्ट बनाने में मदद करेगा जिसका उपयोग हम उपयोगी रिपोर्ट तैयार करने के लिए कर सकते हैं।
आवश्यकताएं
शुरू करने के लिए, कृपया इन चरणों का पालन करें:
1. employees
डाउनलोड करें नमूना डेटाबेस, जिसमें छह टेबल शामिल हैं 4 कुल मिलाकर मिलियन रिकॉर्ड।
# wget https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2 # tar xjf employees_db-full-1.0.6.tar.bz2 # cd employees_db
2. मारियाडीबी दर्ज करें कर्मचारियों . नाम का एक डेटाबेस बनाने के लिए प्रॉम्प्ट करें और एक डेटाबेस बनाएं :
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE employees; Query OK, 1 row affected (0.00 sec)
3. इसे अपने मारियाडीबी सर्वर में इस प्रकार आयात करें:
MariaDB [(none)]> source employees.sql
नमूना डेटाबेस लोड होने तक 1-2 मिनट प्रतीक्षा करें (ध्यान रखें कि हम 4M . के बारे में बात कर रहे हैं रिकॉर्ड यहाँ!)।
4. सत्यापित करें कि डेटाबेस अपनी तालिकाओं को सूचीबद्ध करके सही ढंग से आयात किया गया था:
MariaDB [employees]> USE employees; Database changed MariaDB [employees]> SHOW TABLES; +---------------------+ | Tables_in_employees | +---------------------+ | departments | | dept_emp | | dept_manager | | employees | | salaries | | titles | +---------------------+ 6 rows in set (0.02 sec)
5. कर्मचारियों . के साथ उपयोग करने के लिए एक विशेष खाता बनाएं डेटाबेस (किसी अन्य खाते का नाम और पासवर्ड चुनने के लिए स्वतंत्र महसूस करें):
MariaDB [employees]> CREATE USER [email protected] IDENTIFIED BY 'empadminpass'; Query OK, 0 rows affected (0.03 sec) MariaDB [employees]> GRANT ALL PRIVILEGES ON employees.* to [email protected]; Query OK, 0 rows affected (0.02 sec) MariaDB [employees]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [employees]> exit Bye
अब empadmin . के रूप में लॉगिन करें उपयोगकर्ता को मारियाडब प्रॉम्प्ट में।
# mysql -u empadmin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> USE employees; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
सुनिश्चित करें कि आगे बढ़ने से पहले उपरोक्त छवि में उल्लिखित सभी चरणों को पूरा कर लिया गया है।
परिणाम सेट में पंक्तियों की संख्या को क्रमित करना और सीमित करना
वेतन तालिका में प्रत्येक कर्मचारी की आरंभ और समाप्ति तिथियों के साथ सभी आय शामिल हैं। हम emp_no=10001
. का वेतन देखना चाह सकते हैं अधिक समय तक। यह निम्नलिखित सवालों के जवाब देने में मदद करेगा:
- क्या उसे कोई वेतन वृद्धि मिली?
- यदि हां, तो कब?
पता लगाने के लिए निम्न क्वेरी निष्पादित करें:
MariaDB [employees]> SELECT * FROM salaries WHERE emp_no=10001 ORDER BY from_date; +--------+--------+------------+------------+ | emp_no | salary | from_date | to_date | +--------+--------+------------+------------+ | 10001 | 60117 | 1986-06-26 | 1987-06-26 | | 10001 | 62102 | 1987-06-26 | 1988-06-25 | | 10001 | 66074 | 1988-06-25 | 1989-06-25 | | 10001 | 66596 | 1989-06-25 | 1990-06-25 | | 10001 | 66961 | 1990-06-25 | 1991-06-25 | | 10001 | 71046 | 1991-06-25 | 1992-06-24 | | 10001 | 74333 | 1992-06-24 | 1993-06-24 | | 10001 | 75286 | 1993-06-24 | 1994-06-24 | | 10001 | 75994 | 1994-06-24 | 1995-06-24 | | 10001 | 76884 | 1995-06-24 | 1996-06-23 | | 10001 | 80013 | 1996-06-23 | 1997-06-23 | | 10001 | 81025 | 1997-06-23 | 1998-06-23 | | 10001 | 81097 | 1998-06-23 | 1999-06-23 | | 10001 | 84917 | 1999-06-23 | 2000-06-22 | | 10001 | 85112 | 2000-06-22 | 2001-06-22 | | 10001 | 85097 | 2001-06-22 | 2002-06-22 | | 10001 | 88958 | 2002-06-22 | 9999-01-01 | +--------+--------+------------+------------+ 17 rows in set (0.03 sec)
अब क्या होगा यदि हमें नवीनतम 5 वृद्धि देखने की आवश्यकता है? हम डीईएससी से दिनांक के अनुसार आदेश कर सकते हैं . डीईएससी कीवर्ड इंगित करता है कि हम परिणाम सेट को अवरोही क्रम में क्रमबद्ध करना चाहते हैं।
इसके अतिरिक्त, सीमा 5 हमें केवल शीर्ष पर लौटने की अनुमति देता है 5 परिणाम सेट में पंक्तियाँ:
MariaDB [employees]> SELECT * FROM salaries WHERE emp_no=10001 ORDER BY from_date DESC LIMIT 5; +--------+--------+------------+------------+ | emp_no | salary | from_date | to_date | +--------+--------+------------+------------+ | 10001 | 88958 | 2002-06-22 | 9999-01-01 | | 10001 | 85097 | 2001-06-22 | 2002-06-22 | | 10001 | 85112 | 2000-06-22 | 2001-06-22 | | 10001 | 84917 | 1999-06-23 | 2000-06-22 | | 10001 | 81097 | 1998-06-23 | 1999-06-23 | +--------+--------+------------+------------+ 5 rows in set (0.00 sec)
आप इसके द्वारा ऑर्डर करें . का भी उपयोग कर सकते हैं कई क्षेत्रों के साथ। उदाहरण के लिए, निम्न क्वेरी कर्मचारी की जन्म तिथि के आधार पर आरोही रूप (डिफ़ॉल्ट) में और फिर वर्णानुक्रम में अवरोही रूप में अंतिम नामों के आधार पर परिणाम सेट का आदेश देगी:
MariaDB [employees]> SELECT CONCAT(last_name, ', ', first_name) AS Name, gender AS Gender, hire_date AS "Hire date" FROM employees ORDER BY birth_date, last_name DESC LIMIT 10; +--------------------+--------+------------+ | Name | Gender | Hire date | +--------------------+--------+------------+ | Whitcomb, Kiyokazu | M | 1988-07-26 | | Schaad, Ronghao | M | 1988-07-10 | | Remmele, Supot | M | 1989-01-27 | | Pocchiola, Jouni | M | 1985-03-10 | | Kuzuoka, Eishiro | M | 1992-02-12 | | Decaestecker, Moni | M | 1986-10-06 | | Wiegley, Mircea | M | 1985-07-18 | | Vendrig, Sachar | M | 1985-11-04 | | Tsukuda, Cedric | F | 1993-12-12 | | Tischendorf, Percy | M | 1986-11-10 | +--------------------+--------+------------+ 10 rows in set (0.31 sec)
आप LIMIT . के बारे में अधिक जानकारी देख सकते हैं यहाँ।
रिकॉर्ड्स को समूहीकृत करना / MAX, MIN, AVG, और ROUND
जैसा कि हमने पहले बताया, salaries
तालिका में समय के साथ प्रत्येक कर्मचारी की आय होती है। इसके अलावा सीमा , हम MAX . का उपयोग कर सकते हैं और मिनट कर्मचारियों की अधिकतम और न्यूनतम संख्या को निर्धारित करने के लिए कीवर्ड:
MariaDB [employees]> SELECT CONCAT(last_name, ', ', first_name) AS Name, MAX(B.salary) AS "Max. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no; +-----------------+-------------+ | Name | Max. salary | +-----------------+-------------+ | Facello, Georgi | 88958 | | Simmel, Bezalel | 72527 | | Bamford, Parto | 43699 | +-----------------+-------------+ 3 rows in set (0.02 sec) MariaDB [employees]> SELECT CONCAT(last_name, ', ', first_name) AS Name, MIN(B.salary) AS "Min. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no; +-----------------+-------------+ | Name | Min. salary | +-----------------+-------------+ | Facello, Georgi | 60117 | | Simmel, Bezalel | 65828 | | Bamford, Parto | 40006 | +-----------------+-------------+ 3 rows in set (0.00 sec)
उपरोक्त परिणाम सेट के आधार पर, क्या आप अनुमान लगा सकते हैं कि नीचे दी गई क्वेरी क्या लौटाएगी?
MariaDB [employees]> SELECT CONCAT(last_name, ', ', first_name) AS Name, ROUND(AVG(B.salary), 2) AS "Avg. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no; +-----------------+-------------+ | Name | Avg. salary | +-----------------+-------------+ | Facello, Georgi | 75388.94 | | Simmel, Bezalel | 68854.50 | | Bamford, Parto | 43030.29 | +-----------------+-------------+ 3 rows in set (0.01 sec)
यदि आप सहमत हैं कि यह औसत लौटाएगा (जैसा कि AVG . द्वारा निर्दिष्ट किया गया है) ) समय के साथ वेतन 2 दशमलव तक (जैसा कि ROUND . द्वारा दर्शाया गया है) ), आप सही कह रहे हैं।
यदि हम कर्मचारी द्वारा समूहीकृत वेतन का योग देखना चाहते हैं और शीर्ष पर वापस लौटना चाहते हैं 5 , हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं:
MariaDB [employees]> SELECT emp_no, SUM(salary) AS Salary FROM salaries GROUP BY emp_no ORDER BY Salary DESC LIMIT 5; +--------+---------+ | emp_no | Salary | +--------+---------+ | 109334 | 2553036 | | 43624 | 2492873 | | 66793 | 2383923 | | 237542 | 2381119 | | 47978 | 2374024 | +--------+---------+ 5 rows in set (2.22 sec)
उपरोक्त प्रश्न में, वेतन को कर्मचारी द्वारा समूहीकृत किया जाता है और फिर योग किया जाता है।
सब को एक साथ लाना
सौभाग्य से, हमें रिपोर्ट तैयार करने के लिए क्वेरी के बाद क्वेरी चलाने की आवश्यकता नहीं है। इसके बजाय, हम सभी आवश्यक परिणाम सेट वापस करने के लिए SQL कमांड की एक श्रृंखला के साथ एक स्क्रिप्ट बना सकते हैं।
एक बार जब हम स्क्रिप्ट निष्पादित कर लेते हैं, तो यह हमारी ओर से बिना किसी हस्तक्षेप के आवश्यक जानकारी लौटा देगी। उदाहरण के लिए, चलिए maxminavg.sql . नाम की एक फ़ाइल बनाते हैं निम्नलिखित सामग्री के साथ वर्तमान कार्यशील निर्देशिका में:
--Select database USE employees; --Calculate maximum salaries SELECT CONCAT(last_name, ', ', first_name) AS Name, MAX(B.salary) AS "Max. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no; --Calculate minimum salaries SELECT CONCAT(last_name, ', ', first_name) AS Name, MIN(B.salary) AS "Min. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no; --Calculate averages, round to 2 decimal places SELECT CONCAT(last_name, ', ', first_name) AS Name, ROUND(AVG(B.salary), 2) AS "Avg. salary" FROM employees A JOIN salaries B ON A.emp_no = B.emp_no WHERE A.emp_no IN (10001, 10002, 10003) GROUP BY A.emp_no;
दो डैश से शुरू होने वाली पंक्तियों को अनदेखा कर दिया जाता है, और अलग-अलग प्रश्नों को एक के बाद एक निष्पादित किया जाता है। हम इस स्क्रिप्ट को या तो Linux कमांड लाइन से निष्पादित कर सकते हैं:
# mysql -u empadmin -p < maxminavg.sql Enter password: Name Max. salary Facello, Georgi 88958 Simmel, Bezalel 72527 Bamford, Parto 43699 Name Min. salary Facello, Georgi 60117 Simmel, Bezalel 65828 Bamford, Parto 40006 Name Avg. salary Facello, Georgi 75388.94 Simmel, Bezalel 68854.50 Bamford, Parto 43030.29
या मारियाडीबी प्रॉम्प्ट से:
# mysql -u empadmin -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> source maxminavg.sql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
सारांश
इस लेख में हमने समझाया है कि SELECT द्वारा लौटाए गए परिणाम सेट को परिशोधित करने के लिए कई MariaDB फ़ंक्शन का उपयोग कैसे करें बयान। एक बार जब वे परिभाषित हो जाते हैं, तो इसे और अधिक आसानी से निष्पादित करने और मानवीय त्रुटि के जोखिम को कम करने के लिए एक से अधिक व्यक्तिगत प्रश्नों को एक स्क्रिप्ट में डाला जा सकता है।
क्या आपके पास इस लेख के बारे में कोई प्रश्न या सुझाव है? नीचे टिप्पणी फ़ॉर्म का उपयोग करके हमें एक नोट छोड़ने के लिए स्वतंत्र महसूस करें। हम आपसे सुनने के लिए उत्सुक हैं!