सी एक्सेस चुनिंदा प्रश्नों के साथ काम कर रहा है। वीबीए एक्सेस में डेटाबेस को एक क्वेरी कैसे भेजें

यह पाठ पर केंद्रित है एसक्यूएल प्रश्नडेटाबेस पर वीबीए एक्सेस... हम देखेंगे कि VBA में डेटाबेस में INSERT, UPDATE, DELETE क्वेरी कैसे बनाई जाती हैं, और यह भी सीखेंगे कि SELECT क्वेरी से एक विशिष्ट मान कैसे प्राप्त करें।

कार्यक्रम करने वाले वीबीए एक्सेसआधार के साथ काम करते समय एसक्यूएल डेटासर्वर को अक्सर डेटाबेस में SQL क्वेरी भेजने जैसे सरल और आवश्यक कार्य का सामना करना पड़ता है, चाहे वह INSERT, UPDATE या एक साधारण SQL SELECT क्वेरी हो। और चूंकि हम नौसिखिए प्रोग्रामर हैं, इसलिए हमें भी ऐसा करने में सक्षम होना चाहिए, इसलिए आज हम वही करेंगे।

हम SQL सर्वर से डेटा प्राप्त करने के विषय पर पहले ही स्पर्श कर चुके हैं, जहां हमने इस डेटा को प्राप्त करने के लिए VBA में कोड लिखा था, उदाहरण के लिए, MSSql 2008 से टेक्स्ट फ़ाइल में डेटा अनलोडिंग के बारे में लेख में या लेख में थोड़ा स्पर्श किया गया एक्सेस से वर्ड और एक्सेल टेम्प्लेट तक डेटा अनलोड करना, लेकिन एक तरह से या किसी अन्य ने इसे सतही रूप से माना, और आज मैं इसके बारे में थोड़ा और विस्तार से बात करने का प्रस्ताव करता हूं।

ध्यान दें! नीचे दिए गए सभी उदाहरणों को एक्सेस 2003 एडीपी प्रोजेक्ट और एमएसएसक्ल 2008 डेटाबेस का उपयोग करके माना जाता है। यदि आप नहीं जानते कि एडीपी प्रोजेक्ट सामान्य रूप से क्या है, तो हमने लेख में इस पर विचार किया कि एक्सेस एडीपी प्रोजेक्ट कैसे बनाएं और कॉन्फ़िगर करें

उदाहरण के लिए प्रारंभिक डेटा

मान लें कि हमारे पास एक test_table है जिसमें वर्ष में महीनों की संख्याएं और नाम होंगे (प्रश्नों का उपयोग करके किया जाता है प्रबंधन स्टूडियो)

तालिका बनाएं। (नल नहीं, (50) शून्य) चलते-फिरते

जैसा कि मैंने कहा, हम एमएस एसक्यूएल 2008 के साथ काम करने के लिए कॉन्फ़िगर किए गए एडीपी प्रोजेक्ट का उपयोग करेंगे, जिसमें मैंने एक परीक्षण फॉर्म बनाया और हस्ताक्षर के साथ एक स्टार्ट बटन जोड़ा "दौड़ना"जिसे हमें अपने कोड का परीक्षण करने की आवश्यकता है, अर्थात। हम ईवेंट हैंडलर में सभी कोड लिखेंगे " बटन दबाएं».

वीबीए सम्मिलित करें, अद्यतन करें, प्रश्न हटाएं

लंबे समय तक देरी न करने के लिए, आइए तुरंत शुरू करें, मान लें कि हमें अपनी परीक्षण तालिका में एक पंक्ति जोड़ने की आवश्यकता है ( कोड टिप्पणी की गई है)/

निजी उप start_Click () "क्वेरी स्ट्रिंग डिम sql_query को स्ट्रिंग के रूप में संग्रहीत करने के लिए एक चर घोषित करें" हमें जिस क्वेरी की आवश्यकता है उसे लिखें sql_query = "INSERT INTO test_table (id, name_mon) VALUES (" 6 "," जून ")" "इसे निष्पादित करें DoCmd रनएसक्यूएल sql_query एंड सब

इस मामले में, वर्तमान डेटाबेस कनेक्शन पैरामीटर का उपयोग करके क्वेरी निष्पादित की जाती है। हम जांच सकते हैं कि डेटा जोड़ा गया है या नहीं।

जैसा कि आप देख सकते हैं, डेटा डाला गया है।

एक पंक्ति को मिटाने के लिए निम्नलिखित कोड लिखें।

निजी उप start_Click () "क्वेरी स्ट्रिंग डिम sql_query को स्ट्रिंग के रूप में संग्रहीत करने के लिए एक चर घोषित करें" इसे एक डिलीट क्वेरी लिखें sql_query = "DELETE test_table WHERE id = 6" "इसे निष्पादित करें DoCmd.RunSQL sql_query एंड सब

यदि हम जाँच करते हैं, तो हम देखेंगे कि आवश्यक लाइन हटा दी गई है।

डेटा को अपडेट करने के लिए, अपडेट क्वेरी को sql_query वेरिएबल में लिखें, मुझे आशा है कि अर्थ स्पष्ट है।

वीबीए बेस के खिलाफ चयन क्वेरी

बाकी SQL निर्माणों की तुलना में यहाँ चीजें थोड़ी अधिक दिलचस्प हैं।

सबसे पहले, मान लें कि हमें तालिका से सभी डेटा प्राप्त करने की आवश्यकता है, और, उदाहरण के लिए, हम इसे संसाधित करेंगे और इसे एक संदेश में प्रदर्शित करेंगे, और आप निश्चित रूप से इसे अन्य उद्देश्यों के लिए उपयोग कर सकते हैं, इसके लिए हम निम्नलिखित लिखते हैं कोड

निजी उप start_Click () "वेरिएबल घोषित करें" डेटाबेस से रिकॉर्ड के एक सेट के लिए ADODB के रूप में Dim RS। रिकॉर्डसेट "क्वेरी स्ट्रिंग Dim sql_query As String" संदेश में सारांश डेटा प्रदर्शित करने के लिए स्ट्रिंग के रूप में Dim str "के लिए एक नई वस्तु बनाएं रिकॉर्ड सेट RS = नया ADODB .Recordset "क्वेरी स्ट्रिंग sql_query =" SELECT id, name_mon FROM test_table "" वर्तमान प्रोजेक्ट कनेक्शन सेटिंग्स का उपयोग करके क्वेरी निष्पादित करें RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "रिकॉर्ड के माध्यम से लूप जबकि नहीं (RS.EOF)" संदेश प्रदर्शित करने के लिए चर भरें str = str & RS.Fields ("id") और "-" और RS.Fields ("name_mon") और vbnewline "अगले रिकॉर्ड पर जाएं RS.MoveNext Wend" संदेश प्रदर्शित करें msgbox str End Sub

यहां हम अपने रिकॉर्डसेट में सभी मानों पर पुनरावृति करने के लिए पहले से ही वीबीए एक्सेस लूप का उपयोग कर रहे हैं।

लेकिन, अक्सर अभिलेखों के एक सेट से सभी मान प्राप्त करना आवश्यक नहीं होता है, लेकिन केवल एक, उदाहरण के लिए, इसके कोड द्वारा महीने का नाम। और ऐसा करने के लिए, लूप का उपयोग करना किसी भी तरह महंगा है, इसलिए हम केवल एक प्रश्न लिख सकते हैं जो केवल एक मान लौटाएगा और इसका संदर्भ देगा, उदाहरण के लिए, हमें कोड 5 द्वारा महीने का नाम मिलेगा

निजी उप start_Click () "वेरिएबल घोषित करें" डेटाबेस से रिकॉर्ड्स के एक सेट के लिए ADODB के रूप में Dim RS। रिकॉर्डसेट "क्वेरी स्ट्रिंग Dim sql_query As String" स्ट्रिंग के रूप में कुल मान Dim str प्रदर्शित करने के लिए स्ट्रिंग "रिकॉर्ड सेट RS के लिए एक नया ऑब्जेक्ट बनाएं" = नया ADODB.Recordset "क्वेरी स्ट्रिंग sql_query =" test_table से name_mon चुनें जहां आईडी = 5 "" वर्तमान प्रोजेक्ट कनेक्शन सेटिंग्स RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic का उपयोग करके क्वेरी निष्पादित करें "हमारा मान प्राप्त करें str = RS. फ़ील्ड्स (0) msgbox str एंड सब

सार्वभौमिकता के लिए, यहां हम पहले से ही सेल के नाम से नहीं, बल्कि इसके इंडेक्स से संबोधित कर चुके हैं, यानी। 0, और यह सबसे पहला मान है अभिलेख सेट, अंत में हमें मूल्य मिला "मई".

जैसा कि आप देख सकते हैं, सब कुछ काफी सरल है। यदि आपको अक्सर आधार से एक विशिष्ट मूल्य प्राप्त करने की आवश्यकता होती है ( पिछले उदाहरण के रूप में), तो मैं अनुशंसा करता हूं कि आप एक इनपुट पैरामीटर के साथ सभी कोड को एक अलग फ़ंक्शन (वीबीए एक्सेस 2003 में फ़ंक्शन कैसे लिखें) में आउटपुट करें, उदाहरण के लिए, माह कोड ( अगर हम अपने उदाहरण पर विचार करें) और बस, जहां इस मान को आउटपुट करना आवश्यक है, हमें आवश्यक पैरामीटर के साथ फ़ंक्शन को कॉल करें और यही वह है, यह वीबीए कोड को काफी कम करेगा और हमारे कार्यक्रम की धारणा में सुधार करेगा।

आज के लिए इतना ही। आपको कामयाबी मिले!

SQL क्वेरी के उदाहरणों का उपयोग MS Access में SQL क्वेरी लिखना सीखने और अभ्यास करने के लिए किया जा सकता है।

एक SQL क्वेरी को दूसरे में नेस्ट किया जा सकता है। एक सबक्वेरी एक क्वेरी के भीतर एक क्वेरी से ज्यादा कुछ नहीं है। आमतौर पर, WHERE क्लॉज में एक सबक्वेरी का उपयोग किया जाता है। लेकिन उपश्रेणियों का उपयोग करने के अन्य तरीके भी हैं।

Q011 का अनुरोध करें। m_product तालिका से उत्पादों के बारे में जानकारी प्रदर्शित होती है, जिसके कोड भी m_income तालिका में होते हैं:

चुनते हैं *
एम_उत्पाद से
जहां आईडी IN (m_income से product_id चुनें);

Q012 का अनुरोध करें। m_product तालिका से उत्पादों की सूची प्रदर्शित होती है, जिसके कोड m_outcome तालिका में नहीं होते हैं:

चुनते हैं *
एम_उत्पाद से
जहां आईडी नहीं है (m_outcome से product_id चुनें);

Q013 का अनुरोध करें।यह SQL क्वेरी उत्पाद कोड और नामों की एक अनूठी सूची प्रदर्शित करती है जिसमें कोड m_income तालिका में होते हैं लेकिन m_outcome तालिका में नहीं होते हैं:

DISTINCT product_id चुनें, शीर्षक
एम_इनकम से इनर जॉइन करें एम_प्रोडक्ट
m_income.product_id = m_product.id . पर
जहां product_id नहीं है (m_outcome से product_id चुनें);

Q014 का अनुरोध करें।श्रेणियों की एक अनूठी सूची m_category तालिका से प्रदर्शित होती है, जिनके नाम M अक्षर से शुरू होते हैं:

अलग शीर्षक चुनें
एम_उत्पाद से
जहां शीर्षक "М *" पसंद है;

Q015 का अनुरोध करें।अनुरोध में फ़ील्ड पर अंकगणितीय संचालन करने और अनुरोध (उपनाम) में फ़ील्ड का नाम बदलने का एक उदाहरण। यह उदाहरण प्रत्येक आइटम व्यय रिकॉर्ड के लिए व्यय राशि = मात्रा * मूल्य और लाभ मार्जिन की गणना करता है, यह मानते हुए कि लाभ बिक्री राशि का 7 प्रतिशत है:


राशि * मूल्य / 100 * 7 लाभ के रूप में
एम_आउटकम से;

Q016 का अनुरोध करें।अंकगणितीय परिचालनों का विश्लेषण और सरलीकरण करके, आप क्वेरी निष्पादन की गति बढ़ा सकते हैं:

dt, product_id, राशि, मूल्य, राशि * मूल्य के रूप में परिणाम_योग चुनें,
परिणाम_योग * 0.07 लाभ के रूप में
एम_आउटकम से;

Q017 का अनुरोध करें। INNER JOIN स्टेटमेंट का उपयोग करके, आप कई टेबल से डेटा को जॉइन कर सकते हैं। निम्नलिखित उदाहरण में, ctgry_id के मान के आधार पर, m_income तालिका के प्रत्येक रिकॉर्ड का मिलान m_category तालिका से उस श्रेणी के नाम से किया जाता है जिससे उत्पाद संबंधित है:

चुनें सी.शीर्षक, बी.शीर्षक, डीटी, राशि, मूल्य, राशि * मूल्य के रूप में आय_योग
FROM (m_income as a INNER JOIN m_product as b ON a.product_id = b.id)
इनर जॉइन m_category as c ऑन b.ctgry_id = c.id
सी.शीर्षक द्वारा आदेश, बी.शीर्षक;

Q018 का अनुरोध करें।योग - योग, COUNT - मात्रा, औसत - अंकगणितीय माध्य, MAX - अधिकतम मान, मिन - न्यूनतम मान जैसे कार्यों को समग्र कार्य कहा जाता है। वे कई मान लेते हैं, और संसाधित होने के बाद, वे एक मान लौटाते हैं। का उपयोग करके राशि और मूल्य फ़ील्ड के उत्पाद के योग की गणना करने का एक उदाहरण कुल कार्ययोग।

प्रयोगशाला कार्य संख्या 1

एसक्यूएल: डेटा एक्सट्रैक्ट - कमांडचुनते हैं

उद्देश्य:

  • SQL कथनों से परिचित हों;
  • SELECT कमांड का उपयोग करके एक्सेस में सरलतम SQL क्वेरी बनाना सीखें;

· ऑपरेटरों का उपयोग IN, BETWEEN, LIKE, IS NULL।

व्यायाम№1. SQL मोड में STUDENTS तालिका से FIRST NAME और LAST NAME फ़ील्ड के सभी मानों का चयन करने के लिए एक क्वेरी बनाएँ।

नाम चुनें, उपनाम

छात्रों से;

व्यायाम№2 ... छात्र तालिका के सभी स्तंभों के SQL मोड में एक चयन क्वेरी बनाएँ।

चुनते हैं *

छात्रों से;


टास्क नंबर 3.एसक्यूएल मोड में उन शहरों के नाम चुनने के लिए एक क्वेरी बनाएं जहां छात्र रहते हैं, जिसके बारे में जानकारी व्यक्तिगत डेटा तालिका में है।

अलग शहर चुनें

[व्यक्तिगत डेटा] से;

टास्क नंबर 4.एक SQL मोड चयन क्वेरी बनाएं जो छात्र तालिका में सूचीबद्ध अंतिम नाम इवानोव के साथ सभी छात्रों के नामों का चयन करे।

उपनाम चुनें, नाम

छात्रों से

जहां अंतिम नाम = "इवानोव";

टास्क नंबर 5... शिक्षा के बजटीय रूप पर UIT-22 समूह में नामांकित छात्रों के नाम और उपनाम प्राप्त करने के लिए SQL मोड में चयन के लिए एक क्वेरी बनाएँ।

उपनाम चुनें, नाम

छात्रों से

WHERE GROUP = "WIT-22" और BUDGET = true;

टास्क नंबर 6... SQL मोड में एक क्वेरी बनाएँ। तालिका से एक नमूने पर परीक्षा परीक्षा केवल ग्रेड 4 और 5 वाले छात्रों के बारे में जानकारी।

चुनते हैं *

से [परिवर्तनपरीक्षा]

कहाँ पेग्रेडआईएन (4.5);

टास्क नंबर 7.उन छात्रों के बारे में जानकारी के चयन के लिए एक ज़ैनपोक और एसक्यूएल मोड बनाएं, जिनके पास आईओएसयू विषय में परीक्षा ग्रेड 3 है।

चुनते हैं *

से [परिवर्तनपरीक्षा]

कहाँ पेचीज़=" आईओएसयू"औरग्रेडमें नहीं (4.5);

टास्क नंबर 8.जिन विषयों के घंटे 100 और 130 के बीच हैं, उनके रिकॉर्ड का चयन करने के लिए SQL मोड में एक क्वेरी बनाएँ।

चुनते हैं *

सेवस्तुओं

कहाँ पेघड़ी100 और 130 के बीच;


टास्क नंबर 9.जिन छात्रों के उपनाम शुरू होते हैं, उदाहरण के लिए, "C" अक्षर से छात्रों के बारे में जानकारी तालिका से चुनने के लिए SQL मोड में एक क्वेरी बनाएँ।

चुनते हैं *

सेछात्रों

कहाँ पेउपनामपसंद "साथ*";

निष्कर्ष:प्रयोगशाला के काम के दौरान, हम SQL स्टेटमेंट से परिचित हुए, IN, BETWEEN, LIKE स्टेटमेंट्स का उपयोग करके SELECT कमांड का उपयोग करके एक्सेस में सबसे सरल SQL क्वेरी बनाना सीखा।

SQL - पाठ 4. डेटा प्राप्त करना - चयन कथन

तो हमारे फोरम डेटाबेस में तीन टेबल हैं: उपयोगकर्ता, विषय और पोस्ट। और हम देखना चाहते हैं कि उनमें किस तरह का डेटा है। इसके लिए SQL के पास ऑपरेटर है चुनते हैं... इसका उपयोग करने के लिए वाक्य रचना इस प्रकार है:

चुनें क्या_ कहां से चुनना है;


"What_choose" के बजाय हमें या तो उस कॉलम का नाम निर्दिष्ट करना होगा जिसका मान हम देखना चाहते हैं, या कॉमा द्वारा अलग किए गए कई कॉलम के नाम, या तारांकन (*), जिसका अर्थ है कि तालिका में सभी कॉलम चुने गए हैं . "कहां_फ्रॉम" के बजाय तालिका का नाम होना चाहिए।

आइए पहले उपयोगकर्ता तालिका के सभी स्तंभों पर एक नज़र डालें:

चुनें * उपयोगकर्ताओं से;

यह हमारा सारा डेटा है जिसे हमने इस तालिका में दर्ज किया है। लेकिन मान लीजिए कि हम केवल id_user कॉलम देखना चाहते हैं (उदाहरण के लिए, पिछले पाठ में, हमें यह जानना होगा कि विषय तालिका को पॉप्युलेट करने के लिए उपयोगकर्ता तालिका में id_user क्या है)। ऐसा करने के लिए, हम अनुरोध में इस कॉलम का नाम निर्दिष्ट करेंगे:

उपयोगकर्ताओं से id_user चुनें;

ठीक है, अगर हम देखना चाहते हैं, उदाहरण के लिए, हमारे उपयोगकर्ताओं के नाम और ई-मेल, तो हम कॉमा द्वारा अलग किए गए रुचि के कॉलम सूचीबद्ध करेंगे:

नाम चुनें, उपयोगकर्ताओं से ईमेल करें;

इसी तरह, आप देख सकते हैं कि हमारी अन्य तालिकाओं में कौन सा डेटा है। आइए देखें कि हमारे पास कौन से विषय हैं:

चुनें * विषयों से;

अब हमारे पास केवल 4 विषय हैं, लेकिन यदि 100 हों तो क्या होगा? मैं चाहूंगा कि उन्हें प्रदर्शित किया जाए, उदाहरण के लिए, वर्णानुक्रम में। SQL में इसके लिए एक कीवर्ड है द्वारा आदेशजिसके बाद उस कॉलम का नाम जिसके द्वारा छँटाई होगी। वाक्य रचना इस प्रकार है:

तालिका_नाम से कॉलम_नाम चुनें सॉर्ट_कॉलम_नाम द्वारा ऑर्डर करें;



डिफ़ॉल्ट रूप से, सॉर्टिंग आरोही क्रम में होती है, लेकिन इसे कीवर्ड जोड़कर बदला जा सकता है वर्णन

अब हमारा डेटा अवरोही क्रम में क्रमबद्ध है।

छँटाई एक साथ कई स्तंभों द्वारा की जा सकती है। उदाहरण के लिए, निम्न क्वेरी विषय_नाम कॉलम द्वारा डेटा को सॉर्ट करेगी, और यदि इस कॉलम में कई समान पंक्तियां हैं, तो id_author कॉलम अवरोही क्रम में सॉर्ट किया जाएगा:

पिछली क्वेरी के परिणाम के साथ परिणाम की तुलना करें।

बहुत बार हमें तालिका से सभी सूचनाओं की आवश्यकता नहीं होती है। उदाहरण के लिए, हम जानना चाहते हैं कि उपयोगकर्ता स्वेता (आईडी = 4) द्वारा कौन सी थीम बनाई गई थी। SQL में इसके लिए एक कीवर्ड है कहाँ पे, इस तरह के अनुरोध के लिए वाक्य रचना इस प्रकार है:

हमारे उदाहरण के लिए, शर्त यूजर आईडी है, यानी। हमें id_author कॉलम में केवल 4 पंक्तियों की आवश्यकता है (उपयोगकर्ता आईडी स्वेता):

या हम जानना चाहते हैं कि साइकिल थीम किसने बनाई:

बेशक, लेखक की आईडी के बजाय लेखक का नाम प्रदर्शित करना अधिक सुविधाजनक होगा, लेकिन नाम किसी अन्य तालिका में संग्रहीत हैं। बाद के पाठों में, हम सीखेंगे कि एकाधिक तालिकाओं से डेटा का चयन कैसे किया जाता है। अभी के लिए, आइए जानें कि WHERE कीवर्ड का उपयोग करके किन शर्तों को सेट किया जा सकता है।

ऑपरेटर विवरण
= (बराबर) निर्दिष्ट के बराबर मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author = 4;

परिणाम:

> (अधिक) निर्दिष्ट से अधिक मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author> 2;

परिणाम:

< (меньше) निर्दिष्ट से कम मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author
परिणाम:

> = (अधिक या बराबर) निर्दिष्ट से अधिक और उसके बराबर मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author> = 2;

परिणाम:

<= (меньше или равно) निर्दिष्ट मान से कम और उसके बराबर मान चुने गए हैं।

उदाहरण:

चुनें * उन विषयों से जहां id_author
परिणाम:

! = (बराबर नहीं) मान निर्दिष्ट के बराबर नहीं चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author! = 1;

परिणाम:

निरर्थक नहीं है उन पंक्तियों का चयन करता है जिनमें निर्दिष्ट फ़ील्ड में मान होते हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author खाली नहीं है;

परिणाम:

शून्य है उन पंक्तियों का चयन करता है जिनका निर्दिष्ट क्षेत्र में कोई मूल्य नहीं है

उदाहरण:

चुनें * उन विषयों से जहां id_author खाली है;

परिणाम:

खाली सेट - ऐसी कोई रेखा नहीं है।

के बीच (बीच में) वे मान चुने गए हैं जो निर्दिष्ट . के बीच हैं

उदाहरण:

चुनें * उन विषयों से जहां 1 और 3 के बीच id_author;

परिणाम:

IN (मान निहित) मान चुने गए हैं जो निर्दिष्ट से मेल खाते हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author IN (1, 4);

परिणाम:

नहीं में (मान शामिल नहीं है) निर्दिष्ट के अलावा अन्य मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां id_author नहीं है (1, 4);

परिणाम:

लाइक (मैच) पैटर्न से मेल खाने वाले मानों का चयन करता है

उदाहरण:

चुनें * उन विषयों से जहां विषय_नाम "एलईडी%" पसंद है;

परिणाम:

LIKE ऑपरेटर के संभावित रूपक के बारे में नीचे चर्चा की जाएगी।

उसके जैसा नहीं नमूने से मेल नहीं खाने वाले मान चुने गए हैं

उदाहरण:

चुनें * उन विषयों से जहां विषय_नाम "एलईडी%" पसंद नहीं है;

परिणाम:

LIKE ऑपरेटर मेटाकैरेक्टर

मेटाकैरेक्टर केवल टेक्स्ट फ़ील्ड में ही खोजे जा सकते हैं।

सबसे आम मेटाकैरेक्टर है % ... इसका मतलब कोई भी प्रतीक है। उदाहरण के लिए, यदि हमें "led" अक्षर से शुरू होने वाले शब्दों को खोजने की आवश्यकता है, तो हम LIKE "led%" लिखते हैं, और यदि हम ऐसे शब्द ढूंढना चाहते हैं जिनमें "क्लब" अक्षर हों, तो हम LIKE "% Club%" लिखते हैं। . उदाहरण के लिए:

आमतौर पर इस्तेमाल किया जाने वाला एक अन्य मेटाकैरेक्टर है _ ... % के विपरीत, जो कई या कोई वर्ण नहीं दर्शाता है, अंडरस्कोर बिल्कुल एक वर्ण को दर्शाता है। उदाहरण के लिए:

मेटाकैरेक्टर और "मछली" के बीच की जगह पर ध्यान दें, यदि आप इसे छोड़ देते हैं, तो अनुरोध काम नहीं करेगा, क्योंकि रूपक _ बिल्कुल एक वर्ण के लिए खड़ा है, और एक स्थान भी एक चरित्र है।

आज के लिए इतना ही काफी है। अगले पाठ में, हम सीखेंगे कि दो या दो से अधिक तालिकाओं को कैसे क्वेरी करें। तब तक, पोस्ट टेबल को स्वयं क्वेरी करने का प्रयास करें।

एक SQL क्वेरी को दूसरे में नेस्ट किया जा सकता है। एक सबक्वेरी एक क्वेरी के भीतर एक क्वेरी से ज्यादा कुछ नहीं है। आमतौर पर, WHERE क्लॉज में एक सबक्वेरी का उपयोग किया जाता है। लेकिन उपश्रेणियों का उपयोग करने के अन्य तरीके भी हैं।

Q011 का अनुरोध करें। m_product तालिका से उत्पादों के बारे में जानकारी प्रदर्शित होती है, जिसके कोड भी m_income तालिका में होते हैं:

चुनते हैं *
एम_उत्पाद से
जहां आईडी IN (m_income से product_id चुनें);

Q012 का अनुरोध करें। m_product तालिका से उत्पादों की सूची प्रदर्शित होती है, जिसके कोड m_outcome तालिका में नहीं होते हैं:

चुनते हैं *
एम_उत्पाद से
जहां आईडी नहीं है (m_outcome से product_id चुनें);

Q013 का अनुरोध करें।यह SQL क्वेरी उत्पाद कोड और नामों की एक अनूठी सूची प्रदर्शित करती है जिसमें कोड m_income तालिका में होते हैं लेकिन m_outcome तालिका में नहीं होते हैं:

DISTINCT product_id चुनें, शीर्षक
एम_इनकम से इनर जॉइन करें एम_प्रोडक्ट
m_income.product_id = m_product.id . पर
जहां product_id नहीं है (m_outcome से product_id चुनें);

Q014 का अनुरोध करें।श्रेणियों की एक अनूठी सूची m_category तालिका से प्रदर्शित होती है, जिनके नाम M अक्षर से शुरू होते हैं:

अलग शीर्षक चुनें
एम_उत्पाद से
जहां शीर्षक "М *" पसंद है;

Q015 का अनुरोध करें।अनुरोध में फ़ील्ड पर अंकगणितीय संचालन करने और अनुरोध (उपनाम) में फ़ील्ड का नाम बदलने का एक उदाहरण। यह उदाहरण प्रत्येक आइटम व्यय रिकॉर्ड के लिए व्यय राशि = मात्रा * मूल्य और लाभ मार्जिन की गणना करता है, यह मानते हुए कि लाभ बिक्री राशि का 7 प्रतिशत है:

मूल्य, राशि * मूल्य के रूप में परिणाम_योग,
राशि * मूल्य / 100 * 7 लाभ के रूप में
एम_आउटकम से;

Q016 का अनुरोध करें।अंकगणितीय परिचालनों का विश्लेषण और सरलीकरण करके, आप क्वेरी निष्पादन की गति बढ़ा सकते हैं:


परिणाम_योग * 0.07 लाभ के रूप में
एम_आउटकम से;

Q017 का अनुरोध करें। INNER JOIN स्टेटमेंट का उपयोग करके, आप कई टेबल से डेटा को जॉइन कर सकते हैं। निम्नलिखित उदाहरण में, ctgry_id के मान के आधार पर, m_income तालिका के प्रत्येक रिकॉर्ड का मिलान m_category तालिका से उस श्रेणी के नाम से किया जाता है जिससे उत्पाद संबंधित है:

चुनें सी.शीर्षक, बी.शीर्षक, डीटी, राशि, मूल्य, राशि * मूल्य के रूप में आय_योग
FROM (m_income as a INNER JOIN m_product as b ON a.product_id = b.id)
इनर जॉइन m_category as c ऑन b.ctgry_id = c.id
सी.शीर्षक द्वारा आदेश, बी.शीर्षक;

Q018 का अनुरोध करें।योग - योग, COUNT - मात्रा, औसत - अंकगणितीय माध्य, MAX - अधिकतम मान, मिन - न्यूनतम मान जैसे कार्यों को समग्र कार्य कहा जाता है। वे कई मान लेते हैं, और संसाधित होने के बाद, वे एक मान लौटाते हैं। SUM एग्रीगेट फ़ंक्शन का उपयोग करके राशि और मूल्य फ़ील्ड के उत्पाद के योग की गणना करने का एक उदाहरण:

SUM (राशि * मूल्य) को Total_Sum के रूप में चुनें
एम_आय से;

Q019 का अनुरोध करें।एकाधिक समग्र कार्यों का उपयोग करने का एक उदाहरण:


राशि का चयन करें (राशि) Amount_Sum के रूप में, AVG (राशि) Amount_AVG के रूप में,
अधिकतम (राशि) के रूप में राशि_अधिकतम, न्यूनतम (राशि) के रूप में राशि_मिनट,
गणना (*) के रूप में Total_Number
एम_आय से;

Q020 का अनुरोध करें।यह उदाहरण जून 2011 में बड़े अक्षरों में कोड 1 वाले सभी आइटमों के योग की गणना करता है:

चुनते हैं
एम_आय से
जहां product_id = 1 और दिनांक # 6/1/2011 # और # 6/30/2011 # के बीच है।

Q021 का अनुरोध करें।निम्न SQL क्वेरी कोड 4 या 6 के साथ बेचे गए उत्पादों की मात्रा की गणना करती है:

चुनते हैं
एम_आउटकम से
जहां product_id = 4 या product_id = 6;

Q022 का अनुरोध करें।इसकी गणना इस बात से की जाती है कि 12 जून, 2011 को कोड 4 या 6 वाले माल की कितनी राशि बेची गई थी:

परिणाम का चयन करें (राशि * मूल्य) परिणाम_योग के रूप में
एम_आउटकम से
जहां (product_id = 4 या product_id = 6) और dt = # 6/12/2011 #;

Q023 का अनुरोध करें।कार्य इस प्रकार है। "बेकरी" श्रेणी में पूंजीकृत किए गए सामानों की कुल मात्रा की गणना करें।

इस समस्या को हल करने के लिए, आपको तीन तालिकाओं के साथ काम करना होगा: m_income, m_product और m_category, क्योंकि:
- पूंजीकृत माल की मात्रा और कीमत m_income तालिका में संग्रहीत की जाती है;
- प्रत्येक उत्पाद का श्रेणी कोड m_product तालिका में संग्रहीत किया जाता है;
- श्रेणी शीर्षक का नाम m_category तालिका में संग्रहीत है।

इस समस्या को हल करने के लिए, हम निम्नलिखित एल्गोरिथम का उपयोग करेंगे:
- सबक्वेरी का उपयोग करके m_category तालिका से श्रेणी कोड "बेकरी उत्पाद" का निर्धारण;
- प्रत्येक पूंजीकृत उत्पाद की श्रेणी निर्धारित करने के लिए तालिका m_income और m_product में शामिल होना;
- माल के लिए रसीद राशि (= मात्रा * मूल्य) की गणना, जिसका श्रेणी कोड उपरोक्त उपश्रेणी द्वारा परिभाषित कोड के बराबर है।


m_product से एक आंतरिक के रूप में शामिल हों m_income as b ON a.id = b.product_id
जहां ctgry_id = (m_category से आईडी चुनें जहां शीर्षक = "(! LANG: बेकरी)"); !}

Q024 का अनुरोध करें।हम निम्नलिखित एल्गोरिथम का उपयोग करके "बेकरी उत्पाद" श्रेणी में पूंजीकृत माल की कुल मात्रा की गणना करने की समस्या का समाधान करेंगे:
- m_income तालिका के प्रत्येक रिकॉर्ड के लिए, इसके product_id के मान के आधार पर, m_category तालिका से, श्रेणी के नाम से मिलान करें;
- ऐसे रिकॉर्ड चुनें जिनके लिए श्रेणी "बेकरी उत्पाद" के बराबर है;
- रसीद की राशि = मात्रा * मूल्य की गणना करें।

आय_योग के रूप में चयन राशि (राशि * मूल्य)
FROM (m_product as a INNER JOIN m_income as b on a.id = b.product_id)
जहां सी.शीर्षक = "(! लैंग: बेकरी"; !}

Q025 का अनुरोध करें।यह उदाहरण गणना करता है कि कितनी वस्तुओं का उपभोग किया गया था:

उत्पाद_cnt . के रूप में COUNT (product_id) चुनें
FROM (m_outcome से DISTINCT product_id चुनें) AS t;

Q026 का अनुरोध करें।ग्रुप बाय क्लॉज का उपयोग रिकॉर्ड को समूहीकृत करने के लिए किया जाता है। आमतौर पर, रिकॉर्ड्स को एक या अधिक फ़ील्ड के मान के आधार पर समूहीकृत किया जाता है, और प्रत्येक समूह पर कुछ समग्र कार्रवाई लागू की जाती है। उदाहरण के लिए, निम्न क्वेरी माल की बिक्री पर एक रिपोर्ट तैयार करती है। अर्थात्, एक तालिका तैयार की जाती है जिसमें माल के नाम और वह राशि जिसके लिए उन्हें बेचा गया था:

चयन शीर्षक, योग (राशि * मूल्य) के रूप में परिणाम_योग
m_product से एक आंतरिक के रूप में शामिल हों m_outcome AS b
a.id = b.product_id . पर
शीर्षक के अनुसार समूह;

Q027 का अनुरोध करें।श्रेणी के अनुसार बिक्री रिपोर्ट। यही है, एक तालिका तैयार की जाती है जिसमें उत्पाद श्रेणियों के नाम होते हैं, कुल राशि जिसके लिए इन श्रेणियों के उत्पाद बेचे गए थे, और बिक्री की औसत राशि। ROUND फ़ंक्शन का उपयोग औसत मान को सौवें (दशमलव विभाजक के बाद दूसरा अंक) करने के लिए किया जाता है:

सी.शीर्षक चुनें, योग (राशि * मूल्य) परिणाम_योग के रूप में,
राउंड (औसत (राशि * मूल्य), 2) AS result_sum_avg
FROM (m_product as a INNER JOIN m_outcome as b ON a.id = b.product_id)
इनर जॉइन m_category as c ऑन a.ctgry_id = c.id
सी.शीर्षक द्वारा ग्रुप;

Q028 का अनुरोध करें।प्रत्येक उत्पाद के लिए, इसकी प्राप्तियों की कुल और औसत संख्या की गणना की जाती है और माल के बारे में जानकारी प्रदर्शित की जाती है, जिसकी प्राप्तियों की कुल संख्या 500 से कम नहीं होती है:

उत्पाद_आईडी चुनें, योग (राशि) राशि_योग के रूप में,
राउंड (औसत (राशि), 2) राशि_औसत के रूप में
एम_आय से
product_id . के आधार पर ग्रुप करें
होने का योग (राशि)> = 500;

Q029 का अनुरोध करें।यह क्वेरी 2011 की दूसरी तिमाही में प्रत्येक आइटम के योग और उसकी प्राप्तियों के औसत की गणना करती है। यदि प्राप्त माल की कुल मात्रा 1000 से कम नहीं है, तो इस उत्पाद के बारे में जानकारी प्रदर्शित की जाती है:

शीर्षक चुनें, योग (राशि * मूल्य) आय_योग के रूप में
m_income से एक आंतरिक शामिल हों m_product b पर a.product_id = b.id
# 4/1/2011 # और # 6/30/2011 # के बीच कहाँ
शीर्षक के अनुसार ग्रुप करें
योग (राशि * मूल्य)> = 1000;

Q030 का अनुरोध करें।कुछ मामलों में, आपको एक निश्चित तालिका के प्रत्येक रिकॉर्ड को किसी अन्य तालिका के प्रत्येक रिकॉर्ड से मैप करने की आवश्यकता होती है; कार्टेशियन उत्पाद कहलाता है। इस तरह के कनेक्शन से उत्पन्न तालिका को डेसकार्टेस तालिका कहा जाता है। उदाहरण के लिए, यदि किसी तालिका A में 100 रिकॉर्ड हैं और तालिका B में 15 रिकॉर्ड हैं, तो उनकी डेसकार्टेस तालिका में 100 * 15 = 150 रिकॉर्ड होंगे। निम्न क्वेरी m_income तालिका में प्रत्येक रिकॉर्ड को m_outcome तालिका में प्रत्येक रिकॉर्ड के साथ जोड़ती है:

चुनें * एम_इनकम से, एम_आउटकम;

Q031 का अनुरोध करें।दो क्षेत्रों द्वारा रिकॉर्ड समूहीकृत करने का एक उदाहरण। निम्न SQL क्वेरी प्रत्येक आपूर्तिकर्ता से प्रत्येक आपूर्तिकर्ता के लिए प्राप्त माल की मात्रा और मात्रा की गणना करती है:


एसयूएम (राशि * मूल्य) आय के रूप में_योग

Q032 का अनुरोध करें।दो क्षेत्रों द्वारा रिकॉर्ड समूहीकृत करने का एक उदाहरण। निम्नलिखित क्वेरी प्रत्येक आपूर्तिकर्ता के लिए, हमारे द्वारा बेचे गए उनके उत्पादों की मात्रा और मात्रा की गणना करती है:

आपूर्तिकर्ता_आईडी, उत्पाद_आईडी, एसयूएम (राशि) राशि_योग के रूप में चुनें,
SUM (राशि * मूल्य) के रूप में परिणाम_योग
GROUP BY आपूर्तिकर्ता_आईडी, उत्पाद_आईडी;

Q033 का अनुरोध करें।इस उदाहरण में, उपरोक्त दो प्रश्नों (q031 और q032) को उप प्रश्नों के रूप में उपयोग किया जाता है। LEFT JOIN पद्धति का उपयोग करके इन प्रश्नों के परिणामों को एक रिपोर्ट में संयोजित किया जाता है। प्रत्येक आपूर्तिकर्ता के लिए प्राप्त और बेचे जाने वाले उत्पादों की मात्रा और मात्रा पर निम्नलिखित क्वेरी रिपोर्ट। कृपया ध्यान दें कि यदि कोई उत्पाद पहले ही आ चुका है, लेकिन अभी तक बेचा नहीं गया है, तो इस रिकॉर्ड के लिए results_sum सेल खाली हो जाएगा। यह भी ध्यान दिया जाना चाहिए कि यह अनुरोध केवल उपयोग का एक उदाहरण है जटिल प्रश्नएक सबक्वेरी के रूप में। प्रदर्शन इस अनुरोध केबड़ी मात्रा में डेटा वाला SQL संदिग्ध है:

चुनते हैं *
से
एसयूएम (राशि * मूल्य) आय के रूप में_योग
ON a.product_id = b.id ग्रुप बाय सप्लायर_आईडी, product_id) AS a
बाँया जोड़
(सप्लायर_आईडी, product_id, SUM (राशि) का चयन करें, राशि_योग के रूप में,
SUM (राशि * मूल्य) के रूप में परिणाम_योग
m_outcome से एक आंतरिक रूप में शामिल हों m_उत्पाद के रूप में b
ON a.product_id = b.id ग्रुप बाय सप्लायर_आईडी, product_id) AS b
चालू (a.product_id = b.product_id) और (a.supplier_id = b.supplier_id);

Q034 का अनुरोध करें।इस उदाहरण में, उपरोक्त दो प्रश्नों (q031 और q032) को उप प्रश्नों के रूप में उपयोग किया जाता है। RIGTH JOIN पद्धति का उपयोग करके इन प्रश्नों के परिणामों को एक रिपोर्ट में संयोजित किया जाता है। अगली क्वेरी प्रत्येक ग्राहक द्वारा उनके द्वारा उपयोग की जाने वाली भुगतान प्रणालियों और उनके निवेश की राशि के लिए भुगतान की राशि पर एक रिपोर्ट प्रदर्शित करती है। प्रत्येक आपूर्तिकर्ता के लिए प्राप्त और बेचे जाने वाले उत्पादों की मात्रा और मात्रा पर निम्नलिखित क्वेरी रिपोर्ट। यह ध्यान दिया जाना चाहिए कि अगर कुछ उत्पाद पहले ही बेचा जा चुका है, लेकिन अभी तक नहीं आया है, तो इस रिकॉर्ड के लिए आय_सम सेल खाली हो जाएगा। ऐसी खाली कोशिकाओं की उपस्थिति बिक्री के लेखांकन में त्रुटि का एक संकेतक है, क्योंकि बिक्री से पहले, संबंधित उत्पाद के आने के लिए पहले यह आवश्यक है:

चुनते हैं *
से
(सप्लायर_आईडी, product_id, SUM (राशि) का चयन करें, राशि_योग के रूप में,
एसयूएम (राशि * मूल्य) आय के रूप में_योग
m_income से एक आंतरिक रूप में शामिल हों m_product के रूप में b पर a.product_id = b.id पर शामिल हों
GROUP BY आपूर्तिकर्ता_आईडी, product_id) एक के रूप में
राइट जॉइन
(सप्लायर_आईडी, product_id, SUM (राशि) का चयन करें, राशि_योग के रूप में,
SUM (राशि * मूल्य) के रूप में परिणाम_योग
m_outcome से एक आंतरिक रूप में शामिल हों m_product के रूप में b पर a.product_id = b.id पर शामिल हों
GROUP BY आपूर्तिकर्ता_आईडी, product_id) AS b
चालू (a.supplier_id = b.supplier_id) और (a.product_id = b.product_id);

Q035 का अनुरोध करें।उत्पाद द्वारा आय और व्यय की राशि पर एक रिपोर्ट प्रदर्शित करता है। ऐसा करने के लिए, एम_इनकम और एम_आउटकम टेबल के अनुसार उत्पादों की एक सूची बनाई जाती है, फिर इस सूची के प्रत्येक उत्पाद के लिए, एम_इनकम टेबल के अनुसार इसकी प्राप्तियों का योग और एम_आउटकम टेबल के अनुसार इसके खर्चों के योग की गणना की जाती है:

आय_राशि के रूप में product_id, SUM (in_amount) चुनें,
एसयूएम (आउट_राशि) के रूप में परिणाम_राशि
से
(उत्पाद_आईडी का चयन करें, राशि के रूप में in_amount, 0 के रूप में out_amount
एम_आय से
संघ सभी
Product_id चुनें, 0 AS in_amount, राशि AS out_amount
एम_आउटकम से) एएस टी
उत्पाद_आईडी द्वारा समूह;

Q036 का अनुरोध करें। EXISTS TRUE लौटाता है यदि सेट को पास किया गया है जिसमें तत्व शामिल हैं। EXISTS फ़ंक्शन FALSE लौटाता है यदि इसे पास किया गया सेट खाली है, अर्थात इसमें कोई तत्व नहीं है। निम्न क्वेरी उन उत्पाद कोडों को प्रदर्शित करती है जो m_income और m_outcome दोनों तालिकाओं में शामिल हैं:

DISTINCT उत्पाद_आईडी चुनें
m_income AS a . से
जहां मौजूद है (m_outcome AS b से product_id चुनें)

Q037 का अनुरोध करें।उत्पाद कोड प्रदर्शित होते हैं, जो m_income तालिका और m_outcome तालिका दोनों में निहित होते हैं:

DISTINCT उत्पाद_आईडी चुनें
m_income AS a . से
जहां product_id IN (m_outcome से product_id चुनें)

Q038 का अनुरोध करें।उत्पाद कोड प्रदर्शित होते हैं, जो m_income तालिका में निहित होते हैं, लेकिन m_outcome तालिका में शामिल नहीं होते हैं:

DISTINCT उत्पाद_आईडी चुनें
m_income AS a . से
जहां मौजूद नहीं है (m_outcome AS b . से product_id चुनें)
जहां b.product_id = a.product_id);

Q039 का अनुरोध करें।अधिकतम बिक्री वाले उत्पादों की एक सूची प्रदर्शित की जाती है। एल्गोरिथ्म इस प्रकार है। प्रत्येक उत्पाद के लिए, उसकी बिक्री की मात्रा की गणना की जाती है। फिर, इनमें से अधिकतम राशि निर्धारित की जाती है। फिर, प्रत्येक उत्पाद के लिए, इसकी कुल बिक्री की गणना फिर से की जाती है, और कोड और उत्पादों की कुल बिक्री, जिनमें से कुल अधिकतम के बराबर है, प्रदर्शित होते हैं:

उत्पाद_आईडी चुनें, योग (राशि * मूल्य) राशि_योग के रूप में
एम_आउटकम से
product_id . के आधार पर ग्रुप करें
राशि होना (राशि * मूल्य) = (अधिकतम चुनें (s_amount)
FROM (चुनें SUM (राशि * मूल्य) s_amount के रूप में m_outcome GROUP by product_id));

Q040 का अनुरोध करें।आईआईएफ आरक्षित शब्द ( सशर्त ऑपरेटर) का अनुमान लगाने के लिए प्रयोग किया जाता है बूलियन अभिव्यक्तिऔर परिणाम (TRUE या FALSE) के आधार पर एक या दूसरी क्रिया करना। निम्नलिखित उदाहरण में, किसी वस्तु की डिलीवरी को "छोटा" माना जाता है यदि मात्रा 500 से कम है। अन्यथा, प्राप्ति मात्रा 500 से अधिक या उसके बराबर है, डिलीवरी को "बड़ा" माना जाता है:

dt, product_id, राशि चुनें,
आईआईएफ (राशि<500,"малая","большая") AS mark
एम_आय से;

SQL क्वेरी Q041.मामले में जब IIF ऑपरेटर का कई बार उपयोग किया जाता है, तो इसे स्विच ऑपरेटर से बदलना अधिक सुविधाजनक होता है। स्विच ऑपरेटर (बहुविकल्पी ऑपरेटर) का उपयोग बूलियन अभिव्यक्ति का मूल्यांकन करने और परिणाम के आधार पर एक क्रिया करने के लिए किया जाता है। निम्नलिखित उदाहरण में, वितरित लॉट को "छोटा" माना जाता है यदि लॉट में माल की मात्रा 500 से कम है। अन्यथा, अर्थात, यदि माल की मात्रा 500 से अधिक या उसके बराबर है, तो लॉट को "बड़ा" माना जाता है। ":

dt, product_id, राशि चुनें,
स्विच (राशि<500,"малая",amount>= 500, "बड़ा") एएस मार्क
एम_आय से;

Q042 का अनुरोध करें। <300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

dt, product_id, राशि चुनें,
आईआईएफ (राशि<300,"малая",
आईआईएफ (राशि<1000,"средняя","большая")) AS mark
एम_आय से;

एसक्यूएल क्वेरी Q043।अगले अनुरोध में, यदि प्राप्त बैच में माल की मात्रा 300 से कम है, तो बैच को "छोटा" माना जाता है। अन्यथा, अर्थात्, यदि राशि शर्त<300 не выполняется, то проверяется является ли количество товаров в партии меньше 500. Если размер партии меньше 500, то она считается «средней». В противном случае партия считается «большой»:

dt, product_id, राशि चुनें,
स्विच (राशि<300,"малая",
रकम<1000,"средняя",
राशि> = 1000, "बड़ा") एएस मार्क
एम_आय से;

एसक्यूएल क्वेरी Q044।अगली क्वेरी में, बिक्री को तीन समूहों में बांटा गया है: छोटा (150 तक), मध्यम (150 से 300 तक), बड़ा (300 या अधिक)। अगला, प्रत्येक समूह के लिए, कुल की गणना की जाती है:

Ctgry_Total के रूप में श्रेणी, SUM (outcome_sum) चुनें
से (चयन राशि * मूल्य के रूप में परिणाम_योग,
आईआईएफ (राशि * मूल्य<150,"малая",
आईआईएफ (राशि * मूल्य<300,"средняя","большая")) AS Category
एम_आउटकम से) एएस टी
श्रेणी के अनुसार समूह;

एसक्यूएल क्वेरी Q045।डेटएड फ़ंक्शन का उपयोग किसी दी गई तिथि में दिन, महीने या वर्ष जोड़ने और एक नई तिथि प्राप्त करने के लिए किया जाता है। अगली क्वेरी:
1) dt फ़ील्ड से दिनांक में 30 दिन जोड़ता है और dt_plus_30d फ़ील्ड में नई तिथि प्रदर्शित करता है;
2) dt फ़ील्ड से दिनांक में 1 महीना जोड़ता है और dt_plus_1m फ़ील्ड में नई तिथि प्रदर्शित करता है:

dt, dateadd ("d", 30, dt) AS dt_plus_30d, dateadd ("m", 1, dt) AS dt_plus_1m चुनें
एम_आय से;

एसक्यूएल क्वेरी Q046।डेटडिफ फ़ंक्शन अलग-अलग इकाइयों (दिनों, महीनों या वर्षों) में दो तिथियों के बीच अंतर की गणना करता है। निम्न क्वेरी dt फ़ील्ड में दिनांक और दिनों, महीनों और वर्षों में वर्तमान दिनांक के बीच अंतर की गणना करती है:

सेलेक्ट डीटी, डेटडिफ ("डी", डीटी, डेट ()) एएस लास्ट_डे,
डेटडिफ ("एम", डीटी, दिनांक ()) अंतिम_माहों के रूप में,
DateDiff ("yyyy", dt, दिनांक ()) as last_years
एम_आय से;

SQL क्वेरी Q047.माल की प्राप्ति की तारीख (तालिका m_income) से वर्तमान तिथि तक दिनों की संख्या की गणना DateDiff फ़ंक्शन का उपयोग करके की जाती है और समाप्ति तिथि की तुलना की जाती है (तालिका m_product):


DateDiff ("d", dt, दिनांक ()) as last_days
m_income से एक आंतरिक रूप में शामिल हों m_उत्पाद के रूप में b
a.product_id = b.id पर;

SQL क्वेरी Q048.माल की प्राप्ति की तारीख से लेकर वर्तमान तिथि तक के दिनों की गणना की जाती है, फिर यह जांचा जाता है कि क्या यह संख्या समाप्ति तिथि से अधिक है:

a.id, product_id, dt, लाइफडेज़ चुनें,
DateDiff ("d", dt, दिनांक ()) as last_days, IIF (last_days> lifedays, "Yes", "No") AS date_expire
m_income से एक आंतरिक शामिल हों m_product b
a.product_id = b.id पर;

एसक्यूएल क्वेरी Q049।माल की प्राप्ति की तारीख से लेकर वर्तमान तिथि तक के महीनों की संख्या की गणना की जाती है। Month_last1 कॉलम महीनों की निरपेक्ष संख्या की गणना करता है, Month_last2 कॉलम पूरे महीनों की संख्या की गणना करता है:

सेलेक्ट डीटी, डेटडिफ ("एम", डीटी, डेट ()) AS Month_last1,
डेटडिफ ("एम", डीटी, दिनांक ()) - आईआईएफ (दिन (डीटी)> दिन (तारीख ()), 1,0) एएस माह_last2
एम_आय से;

एसक्यूएल क्वेरी Q050। 2011 के लिए पूंजीकृत माल की मात्रा और मात्रा पर एक त्रैमासिक रिपोर्ट प्रदर्शित की जाती है:

कुल के रूप में kvartal, SUM (outcome_sum) का चयन करें
से (चयन राशि * मूल्य के रूप में परिणाम_योग, माह (दिनांक) के रूप में मीटर,
स्विच (एम<4,1,m<7,2,m<10,3,m>= 10.4) एएस क्वार्टल
एम_इनकम से जहां वर्ष (दिनांक) = 2011) के रूप में t
क्वार्टल द्वारा ग्रुप;

Q051 का अनुरोध करें।निम्नलिखित क्वेरी यह पता लगाने में मदद करती है कि क्या उपयोगकर्ता आइटम की प्राप्ति की मात्रा से अधिक मात्रा में किसी आइटम की खपत के बारे में सिस्टम में जानकारी दर्ज करने में सक्षम थे:

product_id, SUM (in_sum) AS आय_सम, SUM (out_sum) AS परिणाम_योग चुनें
से (उत्पाद_आईडी चुनें, राशि * मूल्य in_sum के रूप में, 0 out_sum के रूप में
m_income . से
संघ सभी
product_id चुनें, 0 in_sum के रूप में, राशि * मूल्य out_sum के रूप में
m_outcome से) AS t
product_id . के आधार पर ग्रुप करें
योग हो रहा है (in_sum)

Q052 का अनुरोध करें।किसी क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या अलग-अलग तरीकों से लागू की जाती है। उदाहरण के लिए, आप MS Access में स्वयं MS Access का उपयोग करके तैयार की गई रिपोर्ट की पंक्तियों को फिर से क्रमांकित कर सकते हैं। आप VBA या PHP जैसी प्रोग्रामिंग भाषाओं का उपयोग करके भी नंबर बदल सकते हैं। हालाँकि, कभी-कभी इसे SQL क्वेरी में ही करने की आवश्यकता होती है। तो, निम्न क्वेरी आईडी फ़ील्ड मानों के आरोही क्रम के अनुसार m_income तालिका की पंक्तियों को क्रमांकित करेगी:

COUNT (*) को N, b.id, b.product_id, b.amount, b.price के रूप में चुनें
एम_इनकम से एक इनर जॉइन करें एम_इनकम बी ऑन ए.आईडी<= b.id
b.id, b.product_id, b.amount, b.price द्वारा ग्रुप;

Q053 का अनुरोध करें।उत्पादों के बीच शीर्ष पांच बिक्री की मात्रा से प्रदर्शित होते हैं। टॉप स्टेटमेंट का उपयोग करके पहले पांच रिकॉर्ड प्रदर्शित किए जाते हैं:

शीर्ष 5, उत्पाद_आईडी, योग (राशि * मूल्य) संक्षेप के रूप में चुनें
एम_आउटकम से
product_id . के आधार पर ग्रुप करें
राशि द्वारा आदेश (राशि * मूल्य) डीईएससी;

Q054 का अनुरोध करें।उत्पादों के बीच बिक्री की मात्रा के अनुसार पांच नेताओं को प्रदर्शित किया जाता है, और परिणामस्वरूप पंक्तियों को क्रमांकित किया जाता है:

COUNT (*) AS N, b.product_id, b.summa . चुनें
से

M_outcome GROUP BY product_id से) जैसा कि a
आंतरिक रूप से जुड़ा
(उत्पाद_आईडी चुनें, योग (राशि * मूल्य) संक्षेप के रूप में,
सुम्मा * 10000000 + product_id AS id
m_outcome GROUP BY product_id) AS b . से
a.id> = b.id . पर
ग्रुप बाय b.product_id, b.summa
COUNT होने (*)<=5
COUNT द्वारा आदेश (*);

Q055 का अनुरोध करें।निम्नलिखित SQL क्वेरी MS Access SQL में गणित फ़ंक्शंस COS, SIN, TAN, SQRT, ^ और ABS के उपयोग को दर्शाती है:

चयन करें (m_income से गिनती (*) चुनें) एन के रूप में, 3.1415926 पीआई, के के रूप में,
2 * pi * (k-1) / N x के रूप में, COS (x) COS_ के रूप में, SIN (x) SIN_ के रूप में, TAN (x) TAN_ के रूप में,
SQR (x) के रूप में SQRT_, x ^ 3 के रूप में "x ^ 3", ABS (x) के रूप में ABS_
से (सेलेक्ट COUNT (*) AS k
एक आंतरिक के रूप में m_income से a.id पर m_income के रूप में शामिल हों<=b.id
ग्रुप बाय बी.आईडी) टी;



संबंधित आलेख: