SQL جلب بيانات خالية من التكرار

مفهوم البيانات المكررة

عند تخزين البيانات في الجداول فمن الطبيعي جداً أن يتم تخزين نفس القيمة أكثر من مرة.
فعلى سبيل المثال يمكن وجود 50 شخص إسمهم محمد في الجدول الذي يحتوي على أسماء المستخدمين.

في حال أردت جلب مجموعة من البيانات المخزنة في عمود محدد و لكنك تريد أن تكون نتيجة الإستعلام تحتوي قيم مكررة يمكنك إضافة الكلمة DISTINCT بعد الكلمة SELECT.


الشكل العام لإستخدامه

SELECT DISTINCT column_name
FROM table_name;
	

  • مكان الكلمة column_name نضع إسم العمود الذي سيتم إرجاع قيم غير مكررة منه.
  • مكان الكلمة table_name نضع إسم الجدول الذي سنجلب البيانات منه.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه users يحتوي على بيانات 10 مستخدمين.

الإستعلام

-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;

-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;

-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;

-- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE users (
    id         INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name  VARCHAR(50),
    country    VARCHAR(50)
);

-- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 مستخدمين
-- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
-- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
-- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
INSERT INTO users VALUES (null, "Rami", "Masri", "Lebanon");
INSERT INTO users VALUES (null, "Ahmad", "Naji", "Syria");
INSERT INTO users VALUES (null, "Hanan", "Mostafa", "KSA");
INSERT INTO users VALUES (null, "Saly", "Harmush", "Lebanon");
INSERT INTO users VALUES (null, "Samir", "Saleh", "Lebanon");
INSERT INTO users VALUES (null, "Hamad", "Akel", "Syria");
INSERT INTO users VALUES (null, "Abdullah", "Helmi", "Egypt");
INSERT INTO users VALUES (null, "Rashed", "Masri", "Oman");
INSERT INTO users VALUES (null, "Majed", "Alali", "Yaman");
INSERT INTO users VALUES (null, "Rayan", "Kasabi", "KSA");
		

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول users بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.


البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users.

id first_name last_name country
1 Rami Masri Lebanon
2 Ahmad Naji Syria
3 Hanan Mostafa KSA
4 Saly Harmush Lebanon
5 Samir Saleh Lebanon
6 Hamad Akel Syria
7 Abdullah Helmi Egypt
8 Rashed Masri Oman
9 Majed Alali Yaman
10 Rayan Kasabi KSA

أمثلة حول إرجاع قيم غير مكررة


المثال الأول

الإستعلام التالي يجلب كل أسماء البلدان الموضوعة في جدول المستخدمين مع الإشارة إلى أنه لا يكرر إسم أي بلد في حال كان مذكور أكثر من مرة.

الإستعلام

SELECT DISTINCT country     -- أحضر أسماء البلدان مع عدم تكرارها أكثر من مرة
FROM users;                 -- users أحضرها من الجدول
		

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

country
Lebanon
Syria
KSA
Egypt
Oman
Yaman


المثال الثاني

الإستعلام التالي يجلب كل أسماء البلدان الموضوعة في جدول المستخدمين مع الإشارة إلى أنه لا يكرر إسم أي بلد في حال كان مذكور أكثر من مرة.
إضافة إلى ذلك سيتم عرض أسماء البلدان بالترتيب الأبجدي.

الإستعلام

SELECT DISTINCT country     -- أحضر أسماء البلدان مع عدم تكرارها أكثر من مرة
FROM users                  -- users أحضرها من الجدول
ORDER BY country;           -- و قم بترتيبها بناءاً على إسم البلدان بشكل تصاعدي
		

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أننا حصلنا على نفس النتيجة السابقة و لكن أسماء البلدان تم وضعها بالترتيب الأبجدي.

country
Egypt
KSA
Lebanon
Oman
Syria
Yaman

الدورات

أدوات مساعدة

الأقسام

دورات
مقالات أسئلة مشاريع كتب