SQLite الاستعلام: تحديد، أين، LIMIT، OFFSET، Count، Group By
لكتابة استعلامات SQL في ملف SQLite قاعدة البيانات، عليك أن تعرف كيفية عمل عبارات SELECT، FROM، WHERE، GROUP BY، ORDER BY، وLIMIT وكيفية استخدامها.
خلال هذا البرنامج التعليمي، سوف تتعلم كيفية استخدام هذه الجمل وكيفية كتابتها SQLite شروط.
قراءة البيانات باستخدام التحديد
جملة SELECT هي العبارة الرئيسية التي تستخدمها للاستعلام عن SQLite قاعدة البيانات. في جملة SELECT، عليك تحديد ما يجب تحديده. ولكن قبل عبارة التحديد، دعونا نرى من أين يمكننا تحديد البيانات باستخدام جملة FROM.
تُستخدم عبارة FROM لتحديد المكان الذي تريد تحديد البيانات منه. في عبارة FROM، يمكنك تحديد جدول أو أكثر أو استعلام فرعي لتحديد البيانات منه، كما سنرى لاحقًا في الدروس التعليمية.
لاحظ أنه بالنسبة لجميع الأمثلة التالية، يتعين عليك تشغيل sqlite3.exe وفتح اتصال بقاعدة البيانات النموذجية كتدفق:
الخطوة 1) في هذه الخطوة،
- افتح جهاز الكمبيوتر وانتقل إلى الدليل التالي "ج:\sqlite"و"
- ثم افتح "sqlite3.exe"
الخطوة 2) افتح قاعدة البيانات "البرامج التعليميةSampleDB.db"بالأمر التالي:
أنت الآن جاهز لتشغيل أي نوع من الاستعلامات في قاعدة البيانات.
في جملة SELECT، لا يمكنك تحديد اسم العمود فحسب، بل لديك أيضًا العديد من الخيارات الأخرى لتحديد ما تريد تحديده. كما يلي:
تحديد *
سيقوم هذا الأمر بتحديد كافة الأعمدة من كافة الجداول المشار إليها (أو الاستعلامات الفرعية) في جملة FROM. على سبيل المثال:
SELECT * FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
سيؤدي هذا إلى تحديد جميع الأعمدة من جداول الطلاب وجداول الأقسام:
حدد اسم الجدول.*
سيؤدي هذا إلى تحديد كافة الأعمدة من الجدول "اسم الجدول" فقط. على سبيل المثال:
SELECT Students.* FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
سيؤدي هذا إلى تحديد كافة الأعمدة من جدول الطلاب فقط:
قيمة حرفية
القيمة الحرفية هي قيمة ثابتة يمكن تحديدها في عبارة select. يمكنك استخدام القيم الحرفية بشكل طبيعي بنفس الطريقة التي تستخدم بها أسماء الأعمدة في عبارة SELECT. سيتم عرض هذه القيم الحرفية لكل صف من الصفوف التي تم إرجاعها بواسطة استعلام SQL.
فيما يلي بعض الأمثلة على القيم الحرفية المختلفة التي يمكنك تحديدها:
- رقمي حرفي - أرقام بأي تنسيق مثل 1، 2.55، ... إلخ.
- سلسلة حرفية - أي سلسلة "USA"، "هذا نص نموذجي"، ... إلخ.
- NULL – قيمة فارغة.
- Current_TIME - سيعطيك الوقت الحالي.
- CURRENT_DATE - سيعطيك هذا التاريخ الحالي.
يمكن أن يكون هذا مفيدًا في بعض المواقف حيث يتعين عليك تحديد قيمة ثابتة لجميع الصفوف التي تم إرجاعها. على سبيل المثال، إذا كنت تريد تحديد جميع الطلاب من جدول الطلاب، باستخدام عمود جديد يسمى البلد الذي يحتوي على القيمة "الولايات المتحدة الأمريكية"، فيمكنك القيام بذلك:
SELECT *, 'USA' AS Country FROM Students;
سيعطيك هذا جميع أعمدة الطلاب، بالإضافة إلى عمود جديد "البلد" مثل هذا:
لاحظ أن هذا العمود الجديد "البلد" ليس في الواقع عمودًا جديدًا يضاف إلى الجدول. وهو عمود افتراضي، يتم إنشاؤه في الاستعلام لعرض النتائج ولن يتم إنشاؤه في الجدول.
الأسماء والأسماء المستعارة
الاسم المستعار هو اسم جديد للعمود الذي يتيح لك تحديد العمود باسم جديد. يتم تحديد الأسماء المستعارة للأعمدة باستخدام الكلمة الأساسية "AS".
على سبيل المثال، إذا كنت تريد تحديد عمود StudentName ليتم إرجاعه باستخدام "Student Name" بدلاً من "StudentName"، فيمكنك منحه اسمًا مستعارًا مثل هذا:
SELECT StudentName AS 'Student Name' FROM Students;
سيعطيك هذا أسماء الطلاب باسم "Student Name" بدلاً من "StudentName" مثل هذا:
لاحظ أن اسم العمود لا يزال "أسم الطالب"؛ لا يزال العمود StudentName كما هو، ولا يتغير حسب الاسم المستعار.
لن يغير الاسم المستعار اسم العمود؛ سيتم فقط تغيير اسم العرض في جملة SELECT.
لاحظ أيضًا أن الكلمة الأساسية "AS" اختيارية، ويمكنك وضع الاسم المستعار بدونها، مثل هذا:
SELECT StudentName 'Student Name' FROM Students;
وسوف يعطيك نفس الناتج تمامًا مثل الاستعلام السابق:
يمكنك أيضًا إعطاء أسماء مستعارة للجداول، وليس فقط الأعمدة. بنفس الكلمة الرئيسية "AS". على سبيل المثال، يمكنك القيام بذلك:
SELECT s.* FROM Students AS s;
سيعطيك هذا جميع الأعمدة الموجودة في جدول الطلاب:
قد يكون هذا مفيدًا جدًا إذا كنت تقوم بضم أكثر من جدول؛ فبدلاً من تكرار اسم الجدول بالكامل في الاستعلام، يمكنك إعطاء كل جدول اسمًا مستعارًا قصيرًا. على سبيل المثال، في الاستعلام التالي:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
سيؤدي هذا الاستعلام إلى تحديد اسم كل طالب من جدول "الطلاب" مع اسم القسم الخاص به من جدول "الأقسام":
ومع ذلك، يمكن كتابة نفس الاستعلام على النحو التالي:
SELECT s.StudentName, d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
- لقد أعطينا جدول الطلاب اسمًا مستعارًا "s" وجدول الأقسام اسمًا مستعارًا "d".
- ثم بدلاً من استخدام اسم الجدول الكامل، استخدمنا الأسماء المستعارة للإشارة إليه.
- تقوم INNER JOIN بربط جدولين أو أكثر معًا باستخدام شرط. في مثالنا، قمنا بربط جدول الطلاب بجدول الأقسام بعمود معرف القسم. يوجد أيضًا شرح متعمق لـ INNER JOIN في "SQLite ينضم "البرنامج التعليمي.
سيعطيك هذا الإخراج الدقيق كالاستعلام السابق:
WHERE
كتابة استعلامات SQL باستخدام جملة SELECT وحدها مع جملة FROM كما رأينا في القسم السابق، ستمنحك جميع الصفوف من الجداول. ومع ذلك، إذا كنت تريد تصفية البيانات التي تم إرجاعها، فيجب عليك إضافة عبارة "WHERE".
يتم استخدام جملة WHERE لتصفية مجموعة النتائج التي يتم إرجاعها بواسطة استعلام SQL. هذه هي الطريقة التي تعمل بها جملة WHERE:
- في جملة WHERE، يمكنك تحديد "تعبير".
- سيتم تقييم هذا التعبير لكل صف يتم إرجاعه من الجدول (الجداول) المحددة في عبارة FROM.
- سيتم تقييم التعبير كتعبير منطقي، وستكون النتيجة إما صحيحة أو خاطئة أو خالية.
- بعد ذلك، سيتم إرجاع الصفوف التي تم تقييم التعبير لها بقيمة صحيحة فقط، وسيتم تجاهل الصفوف ذات النتائج الخاطئة أو الفارغة ولن يتم تضمينها في مجموعة النتائج.
- لتصفية مجموعة النتائج باستخدام شرط WHERE، يجب عليك استخدام التعبيرات والعوامل.
قائمة المشغلين في SQLite وكيفية استخدامها
في القسم التالي، سنشرح كيفية التصفية باستخدام التعبيرات والعوامل.
التعبير هو قيمة أو أكثر حرفية أو أعمدة يتم دمجها مع بعضها البعض باستخدام عامل.
لاحظ أنه يمكنك استخدام التعبيرات في كل من جملة SELECT وفي جملة WHERE.
في الأمثلة التالية، سنحاول استخدام التعبيرات والعوامل في كل من جملة select وجملة WHERE، وذلك لإظهار كيفية أدائها.
هناك أنواع مختلفة من التعبيرات والعوامل التي يمكنك تحديدها على النحو التالي:
SQLite عامل التسلسل “||”
يستخدم هذا المشغل لربط قيمة أو أكثر من القيم الحرفية أو الأعمدة ببعضها البعض. وسوف ينتج سلسلة واحدة من النتائج من جميع القيم الحرفية أو الأعمدة المترابطة. على سبيل المثال:
SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName FROM Students;
سيتم تسلسل هذا في اسم مستعار جديد "StudentIdWithName"
- قيمة السلسلة الحرفية "معرف بالاسم: "
- بقيمة "هوية الطالب"العمود و
- بالقيمة من "أسم الطالب" عمودي
SQLite مشغل CAST:
يتم استخدام عامل CAST لتحويل قيمة من نوع بيانات إلى نوع آخر نوع البيانات.
على سبيل المثال، إذا كان لديك قيمة رقمية مخزنة كقيمة سلسلة مثل هذا " "12.5" "وإذا كنت تريد تحويله إلى قيمة عددية، يمكنك استخدام عامل CAST للقيام بذلك على النحو التالي"CAST ('12.5' كحقيقة)". أو إذا كان لديك قيمة عشرية مثل 12.5، وتحتاج إلى الحصول على الجزء الصحيح فقط، فيمكنك تحويلها إلى عدد صحيح مثل "CAST(12.5 AS INTEGER)".
مثال
في الأمر التالي سنحاول تحويل قيم مختلفة إلى أنواع بيانات أخرى:
SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;
هذا سوف يعطيك:
والنتيجة هي كما يلي:
- CAST('12.5' AS REAL) – القيمة '12.5' هي قيمة سلسلة، وسيتم تحويلها إلى قيمة حقيقية.
- CAST(12.5 AS INTEGER) – القيمة 12.5 هي قيمة عشرية، وسيتم تحويلها إلى قيمة عددية. سيتم اقتطاع الجزء العشري، ويصبح 12.
SQLite علم الحساب Operaتورس:
خذ قيمتين أو أكثر من القيم الرقمية الحرفية أو الأعمدة الرقمية وأرجع قيمة رقمية واحدة. العوامل الحسابية المدعومة في SQLite هي:
|
على سبيل المثال:
في المثال التالي، سنحاول استخدام خمسة عوامل حسابية بقيم رقمية حرفية في نفس
حدد جملة:
SELECT 25+6, 25-6, 25*6, 25%6, 25/6;
هذا سوف يعطيك:
لاحظ كيف استخدمنا عبارة SELECT بدون جملة FROM هنا. وهذا مسموح به SQLite طالما أننا نختار القيم الحرفية.
SQLite عوامل المقارنة
قم بمقارنة متغيرين مع بعضهما البعض وإرجاع قيمة صحيحة أو خاطئة على النحو التالي:
|
لاحظ أن، SQLite يعبر عن القيمة الحقيقية بـ 1 والقيمة الخاطئة بـ 0.
على سبيل المثال:
SELECT 10<6 AS '<', 10<=6 AS '<=', 10>6 AS '>', 10>=6 AS '>=', 10=6 AS '=', 10==6 AS '==', 10!=6 AS '!=', 10<>6 AS '<>';
هذا سيعطي شيئا مثل هذا:
SQLite مشغلات مطابقة الأنماط
"LIKE"- يستخدم لمطابقة الأنماط. استخدام "اعجاب"، يمكنك البحث عن القيم التي تطابق النمط المحدد باستخدام حرف البدل.
يمكن أن يكون المتغير الموجود على اليسار إما قيمة حرفية من سلسلة أو عمود من سلسلة. يمكن تحديد النمط على النحو التالي:
- يحتوي على نمط. على سبيل المثال، اسم الطالب مثل '%a%' - سيؤدي هذا إلى البحث عن أسماء الطلاب التي تحتوي على الحرف "a" في أي موضع في عمود اسم الطالب.
- يبدأ بالنمط. على سبيل المثال، "اسم الطالب مثل 'a%'"- البحث عن أسماء الطلاب التي تبدأ بحرف "أ".
- ينتهي بالنمط. على سبيل المثال، "اسم الطالب مثل '%a'– البحث عن أسماء الطلاب التي تنتهي بحرف “أ”.
- مطابقة أي حرف واحد في سلسلة باستخدام حرف الشرطة السفلية "_". على سبيل المثال، "اسم الطالب مثل "J___""- البحث عن أسماء الطلاب المكونة من 4 أحرف. يجب أن يبدأ بالحرف "J" ويمكن أن يحتوي على ثلاثة أحرف أخرى بعد الحرف "J".
أمثلة لمطابقة الأنماط:
- احصل على أسماء الطلاب التي تبدأ بحرف "j":
SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';
النتيجة:
- احصل على أسماء الطلاب التي تنتهي بحرف "y":
SELECT StudentName FROM Students WHERE StudentName LIKE '%y';
النتيجة:
- احصل على أسماء الطلاب التي تحتوي على حرف "n":
SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';
النتيجة:
"عالمي" – يعادل عامل LIKE، لكن GLOB حساس لحالة الأحرف، على عكس عامل LIKE. على سبيل المثال، ستعيد الأمران التاليان نتائج مختلفة:
SELECT 'Jack' GLOB 'j%'; SELECT 'Jack' LIKE 'j%';
هذا سوف يعطيك:
- تعيد العبارة الأولى القيمة 0(false) لأن عامل GLOB حساس لحالة الأحرف، وبالتالي فإن 'j' لا يساوي 'J'. ومع ذلك، ستعيد العبارة الثانية القيمة 1 (true) لأن عامل LIKE لا يتحسس حالة الأحرف، وبالتالي فإن 'j' يساوي 'J'.
المشغلين الآخرين:
SQLite لأي لبس
عامل منطقي يجمع بين تعبير واحد أو أكثر. سيرجع القيمة true فقط إذا كانت جميع التعبيرات تعطي قيمة "true". ومع ذلك، سيرجع القيمة false فقط إذا كانت جميع التعبيرات تعطي قيمة "false".
على سبيل المثال:
سيقوم الاستعلام التالي بالبحث عن الطلاب الذين لديهم StudentId > 5 و StudentName يبدأ بالحرف N، ويجب أن يستوفي الطلاب العائدون الشرطين:
SELECT * FROM Students WHERE (StudentId > 5) AND (StudentName LIKE 'N%');
كمخرج، في لقطة الشاشة أعلاه، سيعطيك هذا "نانسي" فقط. نانسي هي الطالبة الوحيدة التي تستوفي كلا الشرطين.
SQLite OR
عامل منطقي يجمع بين تعبير واحد أو أكثر، بحيث إذا أعطى أحد العوامل المجمعة القيمة true، فسوف يعود بالقيمة true. ومع ذلك، إذا أعطت كل التعبيرات القيمة false، فسوف يعود بالقيمة false.
على سبيل المثال:
سيقوم الاستعلام التالي بالبحث عن الطلاب الذين لديهم StudentId > 5 أو StudentName يبدأ بالحرف N، ويجب أن يستوفي الطلاب العائدون شرطًا واحدًا على الأقل من الشروط التالية:
SELECT * FROM Students WHERE (StudentId > 5) OR (StudentName LIKE 'N%');
هذا سوف يعطيك:
كمخرج، في لقطة الشاشة أعلاه، سيعطيك هذا اسم الطالب الذي يحتوي على الحرف "n" في اسمه بالإضافة إلى معرف الطالب الذي له قيمة> 5.
كما ترى فإن النتيجة مختلفة عن الاستعلام باستخدام عامل AND.
SQLite بين
يتم استخدام BETWEEN لتحديد تلك القيم التي تقع ضمن نطاق قيمتين. على سبيل المثال، "X بين Y وZ"سيتم إرجاع true (1) إذا كانت القيمة X بين القيمتين Y و Z. وإلا، فسيتم إرجاع false (0)."X بين Y وZ" يعادل "X >= Y وX <= Z"، يجب أن تكون X أكبر من أو تساوي Y وX أقل من أو تساوي Z.
على سبيل المثال:
في استعلام المثال التالي، سنكتب استعلامًا للحصول على الطلاب بقيمة معرف بين 5 و8:
SELECT * FROM Students WHERE StudentId BETWEEN 5 AND 8;
سيعطي هذا فقط الطلاب ذوي المعرفات 5 و 6 و 7 و 8:
SQLite IN
يأخذ وسيطًا واحدًا وقائمة من الوسيطات. سيرجع قيمة true إذا كانت قيمة الوسيط الأول مساوية لقيمة أحد الوسيطات من القائمة. يعيد عامل IN قيمة true (1) إذا كانت قائمة الوسيطات تحتوي على قيمة الوسيط الأول ضمن قيمها. وإلا، فسيرجع قيمة false (0).
مثله: "العمود IN(x, y, z)". وهذا يعادل " (col=x) أو (col=y) أو (col=z) ".
على سبيل المثال:
سيقوم الاستعلام التالي باختيار الطلاب الذين لديهم معرفات 2، 4، 6، 8 فقط:
SELECT * FROM Students WHERE StudentId IN(2, 4, 6, 8);
اذا اعجبك الموضوع لا تنسى الضغط على زر الإعجاب
سوف يعطي الاستعلام السابق النتيجة الدقيقة للاستعلام التالي لأنهما متكافئان:
SELECT * FROM Students WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);
يعطي كلا الاستعلامين الناتج الدقيق. ومع ذلك، فإن الاختلاف بين الاستعلامين هو أننا في الاستعلام الأول استخدمنا عامل "IN". وفي الاستعلام الثاني، استخدمنا عوامل "OR" متعددة.
إن عامل IN يعادل استخدام عوامل OR متعددة.أين يوجد رقم الطالب (2، 4، 6، 8)" يعادل " أين (معرف الطالب = 2) أو (معرف الطالب = 4) أو (معرف الطالب = 6) أو (معرف الطالب = 8)؛"
اذا اعجبك الموضوع لا تنسى الضغط على زر الإعجاب
SQLite ليس في
"المتغير ""NOT IN"" هو عكس المتغير IN. ولكن بنفس بناء الجملة؛ فهو يأخذ متغيرًا واحدًا وقائمة من المتغيرات. وسوف يعيد القيمة true إذا كانت قيمة المتغير الأول لا تساوي قيمة أحد المتغيرات من القائمة. أي أنه سيعيد القيمة true (0) إذا كانت قائمة المتغيرات لا تحتوي على المتغير الأول. مثل هذا: ""العمود ليس في (x، y، z)". وهذا يعادل "(العمود<>x) و (العمود<>y) و (العمود<>z)".
على سبيل المثال:
سيقوم الاستعلام التالي باختيار الطلاب الذين لديهم معرفات لا تساوي أحد هذه المعرفات 2، 4، 6، 8:
SELECT * FROM Students WHERE StudentId NOT IN(2, 4, 6, 8);
مثل
في الاستعلام السابق أعطينا النتيجة الدقيقة كالاستعلام التالي لأنهما متكافئان:
SELECT * FROM Students WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);
اذا اعجبك الموضوع لا تنسى الضغط على زر الإعجاب
في لقطة الشاشة أعلاه،
لقد استخدمنا عدة عوامل غير متساوية "<>" للحصول على قائمة بالطلاب الذين لا يساوي أيًا من المعرفات التالية 2، 4، 6، أو 8. سيعيد هذا الاستعلام جميع الطلاب الآخرين بخلاف هذه القائمة من المعرفات.
SQLite المشرقية
لا تأخذ عوامل التشغيل EXISTS أي متغيرات؛ بل تأخذ فقط شرط SELECT بعده. سيعيد عامل التشغيل EXISTS القيمة true (1) إذا كان هناك أي صفوف تم إرجاعها من شرط SELECT، وسيعيد القيمة false (0) إذا لم يتم إرجاع أي صفوف على الإطلاق من شرط SELECT.
على سبيل المثال:
في المثال التالي، سنقوم باختيار اسم القسم، إذا كان معرف القسم موجودًا في جدول الطلاب:
SELECT DepartmentName FROM Departments AS d WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
هذا سوف يعطيك:
الأقسام الثلاثة فقط "تكنولوجيا المعلومات والفيزياء والفنون" سيتم إرجاع. واسم القسم "الرياضيات"لن يتم إرجاع ""لأنه لا يوجد طالب في هذا القسم، وبالتالي فإن معرف القسم غير موجود في جدول الطلاب. لهذا السبب تجاهل عامل EXISTS ""الرياضيات" قسم.
SQLite لا
Revيُظهر نتيجة العامل السابق الذي يأتي بعده. على سبيل المثال:
- NOT BETWEEN – ستعود صحيحة إذا كانت BETWEEN تُرجع false والعكس صحيح.
- NOT LIKE – ستعود صحيحة إذا أعادت LIKE خطأ والعكس صحيح.
- NOT GLOB - سيعود صحيحًا إذا أعاد GLOB خطأ والعكس صحيح.
- NOT EXISTS - سترجع صحيحًا إذا أرجعت EXISTS خطأً، والعكس صحيح.
على سبيل المثال:
في المثال التالي، سنستخدم عامل NOT مع عامل EXISTS للحصول على أسماء الأقسام غير الموجودة في جدول Students، وهي النتيجة العكسية لعامل EXISTS. لذا، سيتم إجراء البحث من خلال DepartmentId غير الموجودة في جدول Department.
SELECT DepartmentName FROM Departments AS d WHERE NOT EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
الناتج:
القسم فقط"الرياضيات " سيتم إرجاع. بسبب ال "الرياضيات"القسم هو القسم الوحيد غير الموجود في جدول الطلاب.
الحد والطلب
SQLite الطلب
SQLite الترتيب هو فرز النتيجة حسب تعبير واحد أو أكثر. لترتيب مجموعة النتائج، عليك استخدام جملة ORDER BY كما يلي:
- أولاً، عليك تحديد جملة ORDER BY.
- يجب تحديد جملة ORDER BY في نهاية الاستعلام؛ يمكن تحديد جملة LIMIT فقط بعدها.
- حدد التعبير الذي تريد ترتيب البيانات به، ويمكن أن يكون هذا التعبير اسم عمود أو تعبيرًا.
- بعد التعبير، يمكنك تحديد اتجاه فرز اختياري. إما DESC لترتيب البيانات تنازليًا أو ASC لترتيب البيانات تصاعديًا. إذا لم تحدد أيًا منها، فسيتم فرز البيانات تصاعديًا.
- يمكنك تحديد المزيد من التعبيرات باستخدام "،" بين بعضها البعض.
مثال
في المثال التالي، سنقوم باختيار جميع الطلاب حسب أسمائهم ولكن بترتيب تنازلي، ثم حسب اسم القسم بترتيب تصاعدي:
SELECT s.StudentName, d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId ORDER BY d.DepartmentName ASC , s.StudentName DESC;
هذا سوف يعطيك:
- SQLite سيتم أولاً ترتيب جميع الطلاب حسب اسم القسم الخاص بهم بترتيب تصاعدي
- ثم بالنسبة لكل اسم قسم، سيتم عرض جميع الطلاب تحت اسم هذا القسم بترتيب تنازلي حسب أسمائهم
SQLite الحد:
يمكنك تحديد عدد الصفوف التي يتم إرجاعها بواسطة استعلام SQL الخاص بك، باستخدام جملة LIMIT. على سبيل المثال، سيمنحك LIMIT 10 10 صفوف فقط ويتجاهل كافة الصفوف الأخرى.
في جملة LIMIT، يمكنك تحديد عدد محدد من الصفوف بدءًا من موضع محدد باستخدام جملة OFFSET. على سبيل المثال، "العرض المحدد 4 4"سوف يتجاهل الصفوف الأربعة الأولى، ويعيد 4 صفوف بدءًا من الصفوف الخامسة، وبذلك تحصل على الصفوف 4،5,6,7،8، وXNUMX.
لاحظ أن جملة OFFSET اختيارية، يمكنك كتابتها مثل "ليميت شنومكس، شنومكس"وسيعطيك النتائج الدقيقة.
مثال:
في المثال التالي، سنقوم بإرجاع 3 طلاب فقط بدءًا من معرف الطالب 5 باستخدام الاستعلام:
SELECT * FROM Students LIMIT 4,3;
سيعطيك هذا ثلاثة طلاب فقط بدءًا من الصف 5. لذلك سيمنحك الصفوف التي تحتوي على معرف الطالب 5 و6 و7:
إزالة التكرارات
إذا كان استعلام SQL الخاص بك يعرض قيمًا مكررة، فيمكنك استخدام "DISTINCT"كلمة رئيسية لإزالة تلك التكرارات وإرجاع القيم المميزة. يمكنك تحديد أكثر من عمود بعد عمل المفتاح DISTINCT.
على سبيل المثال:
سيؤدي الاستعلام التالي إلى إرجاع "قيم اسم القسم" المكررة: لدينا هنا قيم مكررة بأسماء تكنولوجيا المعلومات والفيزياء والفنون.
SELECT d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
سيعطيك هذا قيمًا مكررة لاسم القسم:
لاحظ كيف توجد قيم مكررة لاسم القسم. الآن، سوف نستخدم الكلمة الأساسية DISTINCT مع نفس الاستعلام لإزالة تلك التكرارات والحصول على قيم فريدة فقط. مثله:
SELECT DISTINCT d.DepartmentName FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
سيعطيك هذا ثلاث قيم فريدة فقط لعمود اسم القسم:
مجموع
SQLite المجاميع هي وظائف مضمنة محددة في SQLite من شأنها تجميع قيم متعددة لصفوف متعددة في قيمة واحدة.
وهنا المجاميع التي يدعمها SQLite:
SQLite AVG()
تم إرجاع المتوسط لجميع قيم x.
على سبيل المثال:
في المثال التالي سنحصل على متوسط الدرجات التي سيحصل عليها الطلاب من جميع الاختبارات:
SELECT AVG(Mark) FROM Marks;
سيعطيك هذا القيمة "18.375":
تأتي هذه النتائج من جمع كل قيم العلامات مقسومًا على عددها.
COUNT() - COUNT(X) أو COUNT(*)
إرجاع العدد الإجمالي لعدد المرات التي ظهرت فيها القيمة x. وإليك بعض الخيارات التي يمكنك استخدامها مع COUNT:
- COUNT(x): حساب قيم x فقط، حيث x هو اسم العمود. سوف يتجاهل القيم الخالية.
- COUNT(*): حساب جميع الصفوف من جميع الأعمدة.
- COUNT (DISTINCT x): يمكنك تحديد كلمة أساسية DISTINCT قبل x والتي ستحصل على عدد القيم المميزة لـ x.
مثال
في المثال التالي، سنحصل على العدد الإجمالي للأقسام التي تحتوي على COUNT(DepartmentId)، وCOUNT(*)، وCOUNT(DISTINCT DepartmentId) وكيف تختلف:
SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;
هذا سوف يعطيك:
كالتالي:
- سيعطيك COUNT(DepartmentId) عدد معرفات القسم بالكامل، وسيتجاهل القيم الخالية.
- يمنحك COUNT(DISTINCT DepartmentId) قيمًا مميزة لـ DepartmentId، وهي 3 فقط. وهي القيم الثلاث المختلفة لاسم القسم. لاحظ أن هناك 8 قيم لاسم القسم في اسم الطالب. ولكن فقط القيم الثلاث المختلفة هي الرياضيات وتكنولوجيا المعلومات والفيزياء.
- COUNT(*) يحسب عدد الصفوف في جدول الطلاب والتي تتكون من 10 صفوف لـ 10 طلاب.
GROUP_CONCAT() – GROUP_CONCAT(X) أو GROUP_CONCAT(X,Y)
تقوم دالة التجميع GROUP_CONCAT بدمج القيم المتعددة في قيمة واحدة باستخدام فاصلة لفصلها. وتتضمن الخيارات التالية:
- GROUP_CONCAT(X): سيؤدي هذا إلى جمع كل قيمة x في سلسلة واحدة، مع استخدام الفاصلة "،" كفاصل بين القيم. سيتم تجاهل القيم الخالية.
- GROUP_CONCAT(X, Y): سيؤدي هذا إلى تسلسل قيم x في سلسلة واحدة، مع استخدام قيمة y كفاصل بين كل قيمة بدلاً من الفاصل الافتراضي ','. سيتم أيضًا تجاهل القيم الخالية.
- GROUP_CONCAT(DISTINCT X): سيؤدي هذا إلى تسلسل جميع القيم المميزة لـ x في سلسلة واحدة، مع استخدام الفاصلة "،" كفاصل بين القيم. سيتم تجاهل القيم الخالية.
مثال GROUP_CONCAT(اسم القسم).
سيقوم الاستعلام التالي بربط جميع قيم اسم القسم من جدول الطلاب والأقسام في سلسلة واحدة مفصولة بفواصل. لذا بدلاً من إرجاع قائمة من القيم، سيتم إرجاع قيمة واحدة في كل صف. سيرجع قيمة واحدة فقط في صف واحد، مع فصل جميع القيم بفواصل:
SELECT GROUP_CONCAT(d.DepartmentName) FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
هذا سوف يعطيك:
سيعطيك هذا قائمة بقيم أسماء الأقسام الثمانية المتسلسلة في سلسلة واحدة مفصولة بفاصلة.
GROUP_CONCAT (اسم القسم المميز) مثال
سيقوم الاستعلام التالي بدمج القيم المميزة لاسم القسم من جدول الطلاب والأقسام في سلسلة واحدة مفصولة بفاصلة:
SELECT GROUP_CONCAT(DISTINCT d.DepartmentName) FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
هذا سوف يعطيك:
لاحظ كيف تختلف النتيجة عن النتيجة السابقة؛ تم إرجاع ثلاث قيم فقط وهي أسماء الأقسام المميزة، وتمت إزالة القيم المكررة.
GROUP_CONCAT(اسم القسم،'&') مثال
سيقوم الاستعلام التالي بدمج جميع قيم عمود اسم القسم من جدول الطلاب والأقسام في سلسلة واحدة، ولكن باستخدام الحرف '&' بدلاً من الفاصلة كفاصل:
SELECT GROUP_CONCAT(d.DepartmentName, '&') FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
هذا سوف يعطيك:
لاحظ كيف يتم استخدام الحرف "&" بدلاً من الحرف الافتراضي "،" للفصل بين القيم.
SQLite ماكس دقيقة()
تقوم MAX(X) بإرجاع أعلى قيمة من قيم X. ستُرجع الدالة MAX قيمة NULL إذا كانت جميع قيم x فارغة. بينما تقوم MIN(X) بإرجاع أصغر قيمة من قيم X. سيُرجع MIN قيمة NULL إذا كانت جميع قيم X فارغة.
مثال
في الاستعلام التالي، سوف نستخدم الدالتين MIN وMAX للحصول على أعلى علامة وأقل علامة من "علامات" طاولة:
SELECT MAX(Mark), MIN(Mark) FROM Marks;
هذا سوف يعطيك:
SQLite SUM(x)، الإجمالي(x)
سيعيد كلاهما مجموع كل قيم x، لكنهما يختلفان في الآتي:
- سيُرجع SUM قيمة فارغة إذا كانت كافة القيم فارغة، لكن الإجمالي سيُرجع 0.
- تقوم الدالة TOTAL دائمًا بإرجاع قيم النقطة العائمة. تقوم الدالة SUM بإرجاع قيمة عددية إذا كانت جميع قيم x عبارة عن عدد صحيح. ومع ذلك، إذا لم تكن القيم عددًا صحيحًا، فسيتم إرجاع قيمة النقطة العائمة.
مثال
في الاستعلام التالي سوف نستخدم SUM وtotal للحصول على مجموع كل العلامات في "علامات" الجداول:
SELECT SUM(Mark), TOTAL(Mark) FROM Marks;
هذا سوف يعطيك:
كما ترون، TOTAL يُرجع دائمًا نقطة عائمة. لكن SUM تُرجع قيمة عددية لأن القيم الموجودة في عمود "العلامة" قد تكون أعدادًا صحيحة.
الفرق بين مثال SUM وTOTAL:
في الاستعلام التالي سنعرض الفرق بين SUM و TOTAL عندما يحصلان على مجموع قيم NULL:
SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;
هذا سوف يعطيك:
لاحظ أنه لا توجد علامات لـ TestId = 4، لذا توجد قيم فارغة لهذا الاختبار. تقوم SUM بإرجاع قيمة فارغة كقيمة فارغة، بينما تقوم TOTAL بإرجاع 0.
مجموعة من
يتم استخدام جملة GROUP BY لتحديد عمود واحد أو أكثر سيتم استخدامه لتجميع الصفوف في مجموعات. سيتم جمع (ترتيب) الصفوف التي لها نفس القيم معًا في مجموعات.
بالنسبة لأي عمود آخر لم يتم تضمينه في المجموعة حسب الأعمدة، يمكنك استخدام دالة تجميعية له.
على سبيل المثال:
الاستعلام التالي سيعطيك العدد الإجمالي للطلاب الحاضرين في كل قسم.
SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId GROUP BY d. DepartmentName;
هذا سوف يعطيك:
ستقوم جملة GROUPBY DepartmentName بتجميع جميع الطلاب في مجموعات واحدة لكل اسم قسم. لكل مجموعة من "القسم" سيتم احتساب الطلاب عليها.
شرط وجود
إذا كنت تريد تصفية المجموعات التي يتم إرجاعها بواسطة عبارة GROUP BY، فيمكنك تحديد عبارة "HAVING" بتعبير بعد GROUP BY. سيتم استخدام التعبير لتصفية هذه المجموعات.
مثال
في الاستعلام التالي، سوف نختار تلك الأقسام التي يوجد بها طالبان فقط:
SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount FROM Students AS s INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId GROUP BY d. DepartmentName HAVING COUNT(s.StudentId) = 2;
هذا سوف يعطيك:
ستقوم الجملة HAVING COUNT(S.StudentId) = 2 بتصفية المجموعات التي تم إرجاعها وإرجاع المجموعات التي تحتوي على طالبين فقط. في حالتنا، يوجد في قسم الفنون طالبان، لذا يتم عرض ذلك في الناتج.
SQLite الاستعلام والاستعلام الفرعي
داخل أي استعلام، يمكنك استخدام استعلام آخر إما في SELECT أو INSERT أو DELETE أو UPDATE أو داخل استعلام فرعي آخر.
يُسمى هذا الاستعلام المتداخل باستعلام فرعي. سنرى الآن بعض الأمثلة على استخدام الاستعلامات الفرعية في جملة SELECT. ومع ذلك، في البرنامج التعليمي لتعديل البيانات، سنرى كيف يمكننا استخدام الاستعلامات الفرعية مع عبارات INSERT وDELETE وUPDATE.
استخدام الاستعلام الفرعي في مثال جملة FROM
في الاستعلام التالي سنقوم بتضمين استعلام فرعي داخل البند FROM:
SELECT s.StudentName, t.Mark FROM Students AS s INNER JOIN ( SELECT StudentId, Mark FROM Tests AS t INNER JOIN Marks AS m ON t.TestId = m.TestId ) ON s.StudentId = t.StudentId;
الاستعلام:
SELECT StudentId, Mark FROM Tests AS t INNER JOIN Marks AS m ON t.TestId = m.TestId
يُسمى الاستعلام أعلاه استعلامًا فرعيًا هنا لأنه متداخل داخل جملة FROM. لاحظ أننا أعطيناه اسمًا مستعارًا "t" حتى نتمكن من الإشارة إلى الأعمدة التي تم إرجاعها منه في الاستعلام.
سيعطيك هذا الاستعلام:
لذلك في حالتنا،
- يتم تحديد s.StudentName من الاستعلام الرئيسي الذي يعطي أسماء الطلاب و
- يتم تحديد t.Mark من الاستعلام الفرعي؛ الذي يعطي العلامات التي حصل عليها كل من هؤلاء الطلاب
استخدام الاستعلام الفرعي في مثال جملة WHERE
في الاستعلام التالي سنقوم بتضمين استعلام فرعي في البند WHERE:
SELECT DepartmentName FROM Departments AS d WHERE NOT EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);
الاستعلام:
SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId
يُطلق على الاستعلام أعلاه اسم استعلام فرعي هنا لأنه مضمن في شرط WHERE. سيعيد الاستعلام الفرعي قيم DepartmentId التي سيستخدمها عامل NOT EXISTS.
سيعطيك هذا الاستعلام:
في الاستعلام أعلاه، قمنا باختيار القسم الذي لا يوجد فيه أي طالب. وهو قسم "الرياضيات" هنا.
بكج Operaالاتصالات - الاتحاد، التقاطع
SQLite يدعم عمليات SET التالية:
الاتحاد والاتحاد الكل
فهو يجمع مجموعة نتائج واحدة أو أكثر (مجموعة من الصفوف) التي يتم إرجاعها من عبارات SELECT المتعددة في مجموعة نتائج واحدة.
سوف يقوم UNION بإرجاع قيم مميزة. ومع ذلك، لن يتضمن UNION ALL نسخًا مكررة وسيتضمنها.
لاحظ أن اسم العمود سيكون هو اسم العمود المحدد في عبارة SELECT الأولى.
مثال الاتحاد
في المثال التالي، سنحصل على قائمة DepartmentId من جدول Students وقائمة DepartmentId من جدول Departments في نفس العمود:
SELECT DepartmentId AS DepartmentIdUnioned FROM Students UNION SELECT DepartmentId FROM Departments;
هذا سوف يعطيك:
يقوم الاستعلام بإرجاع 5 صفوف فقط وهي قيم معرف القسم المميزة. لاحظ القيمة الأولى وهي القيمة الخالية.
SQLite الاتحاد ALL مثال
في المثال التالي، سنحصل على قائمة DepartmentId من جدول Students وقائمة DepartmentId من جدول Departments في نفس العمود:
SELECT DepartmentId AS DepartmentIdUnioned FROM Students UNION ALL SELECT DepartmentId FROM Departments;
هذا سوف يعطيك:
سيرجع الاستعلام 14 صفًا، 10 صفوف من جدول الطلاب، و4 صفوف من جدول الأقسام. لاحظ أن هناك تكرارات في القيم التي تم إرجاعها. لاحظ أيضًا أن اسم العمود هو الاسم المحدد في عبارة SELECT الأولى.
الآن، دعونا نرى كيف سيعطي UNION all نتائج مختلفة إذا استبدلنا UNION ALL بـ UNION:
SQLite تتقاطع
إرجاع القيم الموجودة في كل من مجموعة النتائج المجمعة. سيتم تجاهل القيم الموجودة في إحدى مجموعة النتائج المجمعة.
مثال
في الاستعلام التالي، سنقوم بتحديد قيم DepartmentId الموجودة في كل من الجدولين Students وDepartments في عمود DepartmentId:
SELECT DepartmentId FROM Students Intersect SELECT DepartmentId FROM Departments;
هذا سوف يعطيك:
يقوم الاستعلام بإرجاع ثلاث قيم فقط 1 و2 و3. وهي القيم الموجودة في كلا الجدولين.
ومع ذلك، لم يتم تضمين القيمتين الفارغة و4 لأن القيمة الخالية موجودة في جدول الطلاب فقط وليس في جدول الأقسام. والقيمة 4 موجودة في جدول الأقسام وليس في جدول الطلاب.
ولهذا السبب تم تجاهل القيمتين NULL و4 وعدم تضمينهما في القيم التي تم إرجاعها.
إلا
لنفترض أن لديك قائمتين من الصفوف، list1 وlist2، وتريد فقط الصفوف من list1 التي لا توجد في list2، فيمكنك استخدام شرط "EXCEPT". يقارن شرط EXCEPT بين القائمتين ويعيد الصفوف الموجودة في list1 والتي لا توجد في list2.
مثال
في الاستعلام التالي، سنقوم باختيار قيم DepartmentId الموجودة في جدول Departments والتي لا توجد في جدول Students:
SELECT DepartmentId FROM Departments EXCEPT SELECT DepartmentId FROM Students;
هذا سوف يعطيك:
يقوم الاستعلام بإرجاع القيمة 4 فقط. وهي القيمة الوحيدة الموجودة في جدول الأقسام، وغير موجودة في جدول الطلاب.
التعامل مع فارغة
في "اغية"القيمة هي قيمة خاصة في SQLite. يتم استخدامه لتمثيل قيمة غير معروفة أو قيمة مفقودة. لاحظ أن القيمة الخالية تختلف تمامًا عن "0"" أو قيمة "" فارغة. نظرًا لأن 0 والقيمة الفارغة هي قيمة معروفة، فإن القيمة الخالية غير معروفة.
تتطلب القيم الخالية معالجة خاصة في SQLiteسنرى الآن كيفية التعامل مع القيم NULL.
البحث عن القيم الخالية
لا يمكنك استخدام عامل المساواة العادي (=) للبحث عن القيم الفارغة. على سبيل المثال، يبحث الاستعلام التالي عن الطلاب الذين لديهم قيمة DepartmentId فارغة:
SELECT * FROM Students WHERE DepartmentId = NULL;
لن يعطي هذا الاستعلام أي نتيجة:
نظرًا لأن القيمة NULL لا تساوي أي قيمة أخرى تتضمن قيمة فارغة بحد ذاتها، ولهذا السبب لم تُرجع أي نتيجة.
- ومع ذلك، لكي يعمل الاستعلام، يجب عليك استخدام "باطل" عامل للبحث عن القيم الفارغة على النحو التالي:
SELECT * FROM Students WHERE DepartmentId IS NULL;
هذا سوف يعطيك:
سيقوم الاستعلام بإرجاع هؤلاء الطلاب الذين لديهم قيمة DepartmentId فارغة.
- إذا كنت ترغب في الحصول على تلك القيم التي ليست فارغة، فعليك استخدام "هو ليس لاشيء"المشغل مثل هذا:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;
هذا سوف يعطيك:
سيقوم الاستعلام بإرجاع هؤلاء الطلاب الذين ليس لديهم قيمة NULL DepartmentId.
النتائج المشروطة
إذا كان لديك قائمة بالقيم وتريد تحديد أي منها بناءً على بعض الشروط. ولهذا السبب، يجب أن يكون شرط هذه القيمة المعينة صحيحًا حتى يتم تحديدها.
سيقوم تعبير CASE بتقييم قائمة الشروط هذه لجميع القيم. إذا كان الشرط صحيحا، فإنه سيتم إرجاع تلك القيمة.
على سبيل المثال، إذا كان لديك عمود "الدرجة" وتريد تحديد قيمة نصية استنادًا إلى قيمة الدرجة على النحو التالي:
– “ممتاز” إذا كانت الدرجة أعلى من 85.
- "جيد جداً" إذا كانت الدرجة بين 70 و85.
– “جيد” إذا كانت الدرجة بين 60 و 70.
ثم يمكنك استخدام تعبير CASE للقيام بذلك.
يمكن استخدام هذا لتحديد بعض المنطق في عبارة SELECT بحيث يمكنك تحديد نتائج معينة بناءً على شروط معينة مثل عبارة if على سبيل المثال.
يمكن تعريف عامل CASE باستخدام صيغ مختلفة على النحو التالي:
- يمكنك استخدام شروط مختلفة:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN condition3 THEN result3 … ELSE resultn END
- أو يمكنك استخدام تعبير واحد فقط ووضع قيم محتملة مختلفة للاختيار من بينها:
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 WHEN value3 THEN result3 … ELSE restuln END
لاحظ أن جملة ELSE اختيارية.
مثال
في المثال التالي، سوف نستخدم هيكل الساعة: التعبير ب اغية القيمة في عمود معرف القسم في جدول الطلاب لعرض النص "لا يوجد قسم" على النحو التالي:
SELECT StudentName, CASE WHEN DepartmentId IS NULL THEN 'No Department' ELSE DepartmentId END AS DepartmentId FROM Students;
- سيقوم عامل CASE بالتحقق من قيمة DepartmentId لمعرفة ما إذا كانت فارغة أم لا.
- إذا كانت قيمة فارغة، فسيتم تحديد القيمة الحرفية "لا يوجد قسم" بدلاً من قيمة معرف القسم.
- إذا لم تكن قيمة فارغة، فسيتم تحديد قيمة عمود معرف القسم.
سيعطيك هذا الإخراج كما هو موضح أدناه:
تعبير الجدول المشترك
تعبيرات الجدول الشائعة (CTEs) هي استعلامات فرعية تم تعريفها داخل عبارة SQL باسم محدد.
له ميزة على الاستعلامات الفرعية لأنه يتم تعريفه من خلال عبارات SQL وسيسهل قراءة الاستعلامات وصيانتها وفهمها.
يمكن تعريف تعبير جدول مشترك عن طريق وضع شرط WITH أمام عبارات SELECT على النحو التالي:
WITH CTEname AS ( SELECT statement ) SELECT, UPDATE, INSERT, or update statement here FROM CTE
في "اسم CTE"أي اسم يمكنك إعطاؤه لـ CTE، يمكنك استخدامه للإشارة إليه لاحقًا. لاحظ أنه يمكنك تعريف عبارة SELECT أو UPDATE أو INSERT أو DELETE على CTEs
الآن، دعونا نرى مثالاً لكيفية استخدام CTE في جملة SELECT.
مثال
في المثال التالي، سنقوم بتعريف CTE من عبارة SELECT، ثم سنستخدمها لاحقًا في استعلام آخر:
WITH AllDepartments AS ( SELECT DepartmentId, DepartmentName FROM Departments ) SELECT s.StudentId, s.StudentName, a.DepartmentName FROM Students AS s INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;
في هذا الاستعلام، قمنا بتعريف CTE وأعطيناه الاسم "جميع الإدارات". تم تعريف CTE هذا من استعلام SELECT:
SELECT DepartmentId, DepartmentName FROM Departments
ثم بعد أن قمنا بتعريف CTE استخدمناه في استعلام SELECT الذي يأتي بعده.
لاحظ أن تعبيرات الجدول الشائعة لا تؤثر على مخرجات الاستعلام. إنها طريقة لتحديد طريقة عرض منطقية أو استعلام فرعي لإعادة استخدامها في نفس الاستعلام. تشبه تعبيرات الجدول الشائعة المتغير الذي تعلنه، ثم تعيد استخدامه كاستعلام فرعي. تؤثر عبارة SELECT فقط على إخراج الاستعلام.
سيعطيك هذا الاستعلام:
استعلامات متقدمة
الاستعلامات المتقدمة هي تلك الاستعلامات التي تحتوي على عمليات ربط معقدة واستعلامات فرعية وبعض التجميعات. في القسم التالي سنرى مثالاً على استعلام متقدم:
حيث نحصل على،
- أسماء الأقسام مع جميع الطلاب لكل قسم
- يتم فصل أسماء الطلاب بفاصلة و
- إظهار القسم الذي يضم ثلاثة طلاب على الأقل
SELECT d.DepartmentName, COUNT(s.StudentId) StudentsCount, GROUP_CONCAT(StudentName) AS Students FROM Departments AS d INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId GROUP BY d.DepartmentName HAVING COUNT(s.StudentId) >= 3;
أضفنا أ الانضمام عبارة للحصول على DepartmentName من جدول الأقسام. بعد ذلك أضفنا جملة GROUP BY مع وظيفتين مجمعتين:
- "COUNT" لحساب الطلاب لكل مجموعة قسم.
- GROUP_CONCAT لتسلسل الطلاب لكل مجموعة بفاصلة مفصولة في سلسلة واحدة.
- بعد GROUP BY، استخدمنا جملة HAVING لتصفية الأقسام واختيار الأقسام التي تضم 3 طلاب على الأقل فقط.
والنتيجة ستكون على النحو التالي:
الملخص
وكانت هذه مقدمة للكتابة SQLite الاستعلامات وأساسيات الاستعلام عن قاعدة البيانات وكيف يمكنك تصفية البيانات التي يتم إرجاعها. يمكنك الآن أن تكتب بنفسك SQLite استفسار.