مقدمة
لغة SQL مدمجة بقوة في حياة محللي الأعمال ومتطلبات المرشحين بسبب بساطتها وراحتها وانتشارها. من تجربتي الخاصة ، يمكنني القول أنه في أغلب الأحيان يتم استخدام SQL لتشكيل التحميلات وواجهات المتاجر (مع إنشاء تقارير لاحقة بناءً على واجهات المحلات هذه) وإدارة قاعدة البيانات. ونظرًا لأن العمل اليومي للمحلل يرتبط حتماً بتحميل البيانات وواجهات المحلات ، فإن مهارة كتابة استعلامات SQL يمكن أن تصبح عاملاً بسبب المرشح الذي سيحصل على ميزة أو يتم استبعاده. الأخبار المحزنة هي أنه لا يمكن لأي شخص أن يتوقع الحصول على مقعد طالب. والخبر السار هو أن تعلم SQL ليس شيئًا معقدًا ، إنه سريع وأن بناء جملة الاستعلام بسيط ومباشر. هذا صحيح بشكل خاص بالنسبة لأولئك الذين واجهوا بالفعل لغات أكثر تعقيدًا.
لقد قسمت تدريب SQL إلى ثلاثة أجزاء. هذا الجزء مخصص لبناء الجملة الأساسي ، والذي يستخدم في 80-90 ٪ من الحالات. سيتم تخصيص الجزءين التاليين للاستعلامات الفرعية ، Join'am والمشغلين الخاصين. الغرض من الأدلة هو التدريب العملي والعملي على بناء جملة SQL لإضافته إلى ترسانة المهارات.
ممارسة
سيتم فحص مقدمة إلى بناء الجملة باستخدام قاعدة بيانات مفتوحة مصممة خصيصًا لممارسة SQL. لكي يكون التدريب الخاص بك فعالاً قدر الإمكان ، افتح الرابط أدناه في علامة تبويب جديدة وقم بتشغيل الأمثلة المذكورة أعلاه على الفور ، مما سيتيح لك دمج المواد بشكل أفضل والعمل مع بناء الجملة بنفسك.
اضغط هنابعد النقر على الرابط ، يمكنك رؤية محرر الاستعلام نفسه وإخراج البيانات في الجزء المركزي من الشاشة ، وقائمة جداول قاعدة البيانات في الجزء الأيمن.
هيكل الاستعلام مزود
الهيكل العام للطلب كما يلي:
SELECT (' * ; ') FROM ('; ') WHERE ('/, , city = 'Moscow'; ') GROUP BY (', ; ') HAVING ('/ ; ') ORDER BY (', ; ')
دعنا نحلل الهيكل. للراحة ، يتم تمييز عنصر التعلم الحالي في الطلب بواسطة CAPS.
اختر ، من
SELECT ، FROM - عناصر الاستعلام المطلوبة التي تحدد الأعمدة المحددة وترتيبها ومصدر البيانات.
حدد الكل (المشار إليه *) من جدول العملاء:
SELECT * FROM Customers
حدد الأعمدة CustomerID "معرف العميل" ، CustomerName من جدول "العملاء":
SELECT CustomerID, CustomerName FROM Customers
WHERE
أين هو عنصر استعلام اختياري يتم استخدامه عندما تحتاج إلى تصفية البيانات حسب الشرط المطلوب. في كثير من الأحيان ، داخل عنصر حيث ، يتم استخدام IN / NOT IN لتصفية عمود حسب عدة قيم ، و / أو لتصفية جدول بعدة أعمدة.
التصفية حسب شرط واحد وقيمة واحدة:
select * from Customers WHERE City = 'London'
التصفية حسب شرط واحد والعديد من القيم باستخدام IN (التضمين) أو NOT IN (استثناء):
select * from Customers where City IN ('London', 'Berlin')
select * from Customers where City NOT IN ('Madrid', 'Berlin','Bern')
التصفية حسب عدة شروط باستخدام AND (جميع الشروط مستوفاة) أو OR (شرط واحد على الأقل مستوفٍ) والعديد من القيم:
select * from Customers where Country = 'Germany' AND City not in ('Berlin', 'Aachen') AND CustomerID > 15
select * from Customers where City in ('London', 'Berlin') OR CustomerID > 4
مجموعة BY
GROUP BY هو عنصر استعلام اختياري يمكنك من خلاله تحديد التجميع حسب العمود المطلوب (على سبيل المثال ، إذا كنت بحاجة إلى معرفة عدد العملاء الذين يعيشون في كل مدينة).
عند استخدام GROUP BY ، فهو ملزم:
- كانت قائمة الأعمدة المستخدمة للقطع هي نفسها داخل SELECT وداخل GROUP BY ،
- يجب أيضًا تحديد الدوال التجميعية (SUM ، AVG ، COUNT ، MAX ، MIN) داخل SELECT مع العمود الذي يتم تطبيق هذه الوظيفة عليه.
تجميع عدد العملاء حسب المدينة:
select City, count(CustomerID) from Customers GROUP BY City
تجميع عدد العملاء حسب البلد والمدينة:
select Country, City, count(CustomerID) from Customers GROUP BY Country, City
تجميع المبيعات حسب معرف المنتج مع وظائف تجميعية مختلفة: عدد الطلبات مع هذا المنتج وعدد القطع المباعة:
select ProductID, COUNT(OrderID), SUM(Quantity) from OrderDetails GROUP BY ProductID
تجميع المبيعات مع تصفية الجدول المصدر. في هذه الحالة ، سيكون الإخراج عبارة عن جدول يحتوي على عدد العملاء في المدن الألمانية:
select City, count(CustomerID) from Customers WHERE Country = 'Germany' GROUP BY City
إعادة تسمية عمود مجمع باستخدام عامل التشغيل AS. بشكل افتراضي ، يكون اسم العمود التجميعي مساوياً للوظيفة التجميعية المطبقة ، والتي قد لا تكون مناسبة للغاية للإدراك.
select City, count(CustomerID) AS Number_of_clients from Customers group by City
بصعوبات
HAVING هو عنصر استعلام اختياري مسؤول عن التصفية على مستوى البيانات المجمعة (في الواقع ، أين ، ولكن مستوى واحد فقط أعلى).
تصفية الجدول المجمع مع عدد العملاء حسب المدينة ، في هذه الحالة ، نترك في تفريغ فقط تلك المدن التي يوجد فيها ما لا يقل عن 5 عملاء:
select City, count(CustomerID) from Customers group by City HAVING count(CustomerID) >= 5
في حالة وجود عمود أعيدت تسميته داخل HAVING ، يمكنك تحديد كلٍ من عدد بناء التجميع (CustomerID) واسم العمود الجديد number_of_clients:
select City, count(CustomerID) as number_of_clients from Customers group by City HAVING number_of_clients >= 5
استعلام مثال يحتوي على WHERE و HAVING. في هذا الاستعلام ، يتم تصفية الجدول الأولي حسب المستخدمين أولاً ، ويتم حساب عدد العملاء حسب المدينة ، وتبقى فقط تلك المدن التي يكون فيها عدد العملاء على الأقل 5:
select City, count(CustomerID) as number_of_clients from Customers WHERE CustomerName not in ('Around the Horn','Drachenblut Delikatessend') group by City HAVING number_of_clients >= 5
الترتيب حسب
ORDER BY هو عنصر استعلام اختياري مسؤول عن فرز الجدول.
مثال بسيط على الفرز حسب عمود واحد. في هذا الطلب ، يتم الفرز حسب المدينة المحددة من قبل العميل:
select * from Customers ORDER BY City
يمكنك الفرز حسب عدة أعمدة ، في هذه الحالة ، يحدث الفرز بترتيب الأعمدة المحددة:
select * from Customers ORDER BY Country, City
افتراضيًا ، يكون الفرز تصاعديًا للأرقام وترتيبًا أبجديًا لقيم النص. إذا كانت هناك حاجة إلى الفرز العكسي ، في جملة ORDER BY ، بعد اسم العمود ، أضف DESC:
select * from Customers order by CustomerID DESC
عكس الفرز حسب عمود واحد والفرز الافتراضي حسب الثاني:
select * from Customers order by Country DESC, City
التسجيل
JOIN - عنصر اختياري يُستخدم لربط الجداول بالمفتاح الموجود في كلا الجدولين. يسبق المفتاح عبارة ON.
استعلام نربط فيه بجداول "الطلب" و "العميل" حسب مفتاح "معرف العميل" ، ويضاف اسم الجدول قبل أسماء أعمدة المفتاح من خلال نقطة:
select * from Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID
غالبًا ما قد ينشأ موقف عندما تحتاج إلى تعيين جدول بقيم من آخر. اعتمادًا على المهمة ، يمكن استخدام أنواع مختلفة من الاتصالات. INNER JOIN - تقاطع ، يمين / يسار JOIN لرسم خريطة لجدول مع العلم من آخر ،
select * from Orders join Customers on Orders.CustomerID = Customers.CustomerID where Customers.CustomerID >10
داخل طلب JOIN بأكمله ، يتم تضمينه بعد العنصر من إلى العنصر حيث طلب مثال:
يمكن رؤية أنواع أخرى من JOIN في الصورة الرائعة أدناه:

في الجزء التالي ، سنتحدث أكثر عن أنواع JOIN والاستعلامات المتداخلة.
إذا كان لديك أي أسئلة / اقتراحات ، فاطلب الاتصال دائمًا!