دورة MySQL للمبتدئين

7: SELECT Statement – دورة MySQL

السلام عليكم و رحمة الله و بركاته

بعدما تعلمنا كيفية بناء قواعد البيانات و إنشاء الجداول، سنتطرق الآن إلى أمر SELECT ، و الذي يقوم بإظهار و استرجاع البيانات.

الأمر SELECT :

في SQL، هذا هو الأمر الذي يسمح لنا بإظهار البيانات الموجودة في الجداول، و كما يوفر عدة خيارات و إمكانيات فعالة جدا في إدارة قواعد البيانات.

يمكن للأمر SELECT بإظهار النصوص أو العمليات الرياضية أيضا كالتالي:

SELECT 'HELLO WORLD!';

النتيجة:

+--------------+
| HELLO WORLD! |
+--------------+
| HELLO WORLD! |
+--------------+

مثال حسابي:

SELECT 12 * 2 - 7;

النتيجة:

+------------+
| 12 * 2 - 7 |
+------------+
|         17 |
+------------+

استرجاع جميع البيانات

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

بعد ذلك، عندما نرغب باسترجاع البيانات المُدخلة مسبقا في جداول، نستعمل الأمر التالي:

SELECT * FROM Table_Name;

بحيث:

  • SELECT هو الأمر الخاص باسترجاع البيانات؛
  • النجمة * تعني كل البيانات؛
  • FROM تسمح لنا بتحديد الجدول الذي نعمل عليه و ذلك بإضافة اسم الجدول بعده.

بهذا، نقوم باسترجاع جميع بيانات الجدول.

استرجاع البيانات وفق ترتيب محدد

إذا ما رغبنا في استرجاع البيانات، و لكن بالوضع في عين الاعتبار الترتيب الخاص بعمود ما (مثلا عمود الاسم)، فذلك يتم كالتالي:

SELECT * FROM Students ORDER BY student_name;

حيث أن الكلمة المفتاحية ORDER BY هو الأمر الذي يمنحنا خيار ترتيب البيانات في الجدول وفق عمود ما. ففي هذا المثال، سيتم استرجاع البيانات و ستظهر حسب الترتيب الأبجدي لأسماء الطلبة.

استرجاع بيانات محددة

– حسب الصفوف

عند استرجاع البيانات وفق معايير محددة، كالعمر مثلا (استرجاع البيانات الخاصة بالعملاء ذوي 25 سنة)، يتم الأمر كالتالي:

SELECT * FROM Customers WHERE age = 25;

بحيث أن الكلمة المفتاحية WHERE تقوم بتحديد العمود الذي سيكون المعيار و من خلال هذا فلن تظهر إلا البيانات الخاصة بالعملاء و التي تحتوي على الرقم 25 في عمود السن (age) .

كما أنه يمكن المزج بين إظهار البيانات حسب الترتيب الأبجدي مثلا و معيار العمر كالتالي:

SELECT * FROM Customers WHERE age = 25 ORDER BY customer_name;

و لكن في هذا الحالة، لا بد من احترام ترتيب الكلمات المفتاحية:

SELECT – FROM – WHERE – ORDER BY

فقلب هذا الترتيب يؤدي إلى ظهور خطأ في السياق (Syntax Error) و بالتالي عدم اشتغال الأمر بشكل صحيح.

– حسب الأعمدة

عندما نرغب في إظهار بعض الأعمدة فقط من جدول ما و ليس كل الأعمدة. على سبيل المثال، إذا كان لدينا جدول خاص ببيانات العملاء و نريد الاطلاع فقط على الأسماء و المواقع الخاصة بهم، نقوم بالتالي:

SELECT customer_name, customer_location FROM Customers;

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

استرجاع الصفوف بأسماء مختلفة للأعمدة أو الجدول

عند إنشاء جداول و قواعد بيانات، فلا بد من احترام شروط معينة لاختيار الأسماء، و تلك الشروط قد تجعل قراءة الأسماء أبطء أو قد تبدو أقل جمالية. لذا، فهناك طريقة تسمح بتغيير اسم جدول أو عمود بشكل مؤقت فقط عند إظهار البيانات.

و ذلك باستعمال AS (تعني كَـ أو كما ) كالتالي:

SELECT firstname AS 'First Name' FROM Investors;

استرجاع عدد محدد من الصفوف

أحيانا قد نرغب في إظهار بيانات محدودة، أي بعض السطور فقط و ليست كلها. و يمكن هذا باستعمال الكلمة المفتاحية LIMIT (الحد)، و التي تسمح بتحديد عدد الصفوف التي نريد إظهارها.

من أجل نتيجة أكثر دقة، يُفضل استعمال الكلمة المفتاحية ORDER BY لإظهار البيانات وفق ترتيب معين مما يجعل الصفوف التي تظهر غير عشوائية و منظمة.

كما هو موضح في المثال التالي:

SELECT *
FROM Students
ORDER BY firstname
LIMIT 3;

و هكذا ستظهر 3 صفوف فقط.

ملاحظة: عندما يكون هناك رقمين بعد LIMIT، كمثال: LIMIT 2,4 ، فهذا يعني أنه سيتم تجاوز صفين اثنين (2) و بعدها يتم إظهار 4 صفوف متتالية.

مثلا، لنأخذ الجدول التالي:

+--------+
| letter |
+--------+
| A      |
| B      |
| C      |
| D      |
| E      |
| F      |
| G      |
+--------+

و نطبق الكود :

SELECT * FROM Example 
ORDER BY letter
LIMIT 2,4;

النتيجة:

+--------+
| letter |
+--------+
| C      |
| D      |
| E      |
| F      |
+--------+

استرجاع البيانات بدون تكرارها

قد تكون لدينا بيانات مكررة في جداول ما، و من أجل تسهيل قراءة الجدول يمكن أن نخفي النسخ المكررة.

على سبيل المثال، في الجدول التالي نلاحظ تكرار حرفي B و D:

+--------+
| letter |
+--------+
| A      |
| B      |
| C      |
| D      |
| D      |
| B      |
| B      |
+--------+

من أجل إظهار البيانات في الجدول دون تكرار، نستعمل الكلمة المفتاحية DISTINCT مباشرة خلف أمر SELECT كالتالي:

SELECT DISTINCT * FROM example;

و النتيجة:

+--------+
| letter |
+--------+
| A      |
| B      |
| C      |
| D      |
+--------+

استرجاع البيانات وفق شرط معين

يمكن أن نضع شروطا معينة يتم فلترة البيانات حسبها.

– باستعمال IF :

نستخدم الكود التالي:

IF( condition , Instructions when condition is true , Instructions when condition is false)
AS Column_name;

بعد SELECT ، نضع الأعمدة التي نريد أن تظهر، أو النجمة * لإظهار الكل و تليها الفاصلة ,

بعدها نضيف الكلمة الشرطية IF، و بين قوسين نكتب الشرط أولا، و بعده نكتب الأوامر التي يتم تنفيذها عند تحقق الشرط، و بعدها نكتب الأوامر التي تتم عند عدم تحقق الشرط و نغلف الأقواس،

ثم نضيف اسم العمود التي تظهر به النتائج باستعمال الكلمة المفتاحية AS.

على سبيل المثال، لنأخذ الجدول التالي:

CREATE TABLE Example (  ProductID 				INT PRIMARY KEY AUTO_INCREMENT, 
						Product_designation		VARCHAR(10),
					    Price 					FLOAT
					   );
					   
INSERT INTO Example (Product_designation, Price)
VALUES	('Product A', 39.00),
		('Product B', 399.99),
		('Product C', 45.80),
		('PRODUCT D', 125.99);

لنقم بإظهار كلمة Expensive (غالي) إذا تجاوز الثمن 200، و كلمة Not expensive عندما يكون الثمن أقل من 200:

SELECT * ,
IF(Price >= 200, 'Expensive', 'Not expensive') AS Remark
FROM Example ;

و النتيجة:

+-----------+---------------------+--------+---------------+
| ProductID | Product_designation | Price  | Remark        |
+-----------+---------------------+--------+---------------+
|         1 | Product A           |     39 | Not expensive |
|         2 | Product B           | 399.99 | Expensive     |
|         3 | Product C           |   45.8 | Not expensive |
|         4 | PRODUCT D           | 125.99 | Not expensive |
+-----------+---------------------+--------+---------------+

– باستعمال CASE :

يمكن استعمال طريقة أخرى بتوظيف الكلمة المفتاحية CASE، و يكون الكود مكتوبا بالشكل التالي:

SELECT * ,
CASE WHEN Price >= 200 THEN 'Expensive' ELSE 'Not expensive' END AS Remark
FROM Example ;

فالشرط كُتب بعد كلمتين CASE WHEN ، و تمت كتابة الأوامر التي تنفذ عند تحقق الشرط بعد THEN ، و كتابة الأوامر التي تنفذ عندما لا يتحقق الشرط بعد ELSE.

أما العمود الخاص بالنتائج فيتم تحديد اسمه بعد END AS

نهاية الدرس

في الدرس التالي سنتطرق إلى أمور أخرى مع SELECT بحول الله.

السابق
6: INSERT Statement – دورة MySQL
التالي
تقديم – دورة مقدمة في التسويق

شاركنا برأيك