الاستعلام SELECT

من موسوعة حسوب
< SQL
مراجعة 15:39، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')

يُستخدَم استعلام SELECT للحصول على سجلات البيانات من الجداول المخزنة في قاعدة البيانات، قد تكون نتيجة الاستعلام سجلًا أو أكثر، وعمودًا أو أكثر.

البنية العامة

SELECT [DISTINCT | TOP] select_list
[FROM table_source] 
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ ASC | DESC]];

ويمكن أن تُستخدَم بعض المعاملات مثل UNION و EXCEPT و INTERSECT لدمج نتائج الاستعلامات أو مقارنتها مع بعضها، وتجب مراعاة ترتيب الكلمات المفتاحية المستخدمة في الصياغة السابقة لدى وجود العديد منها ضمن استعلامٍ واحد.

أمثلة

فيما يلي أمثلةٌ مختلفةٌ عن استخدام الاستعلام SELECT مع مختلف المعاملات، يُمكن الاطلاع على صفحات تلك المعاملات لمزيدٍ من المعلومات والأمثلة عنها.

تحديد كافة أعمدة أحد الجداول

يُستخدَم الرمز * للحصول على كافة الأعمدة من الجدول (وهو أحد رموز المحارف البديلة Wildcards):

SELECT *
FROM table_source;

إذا نُفِذ الاستعلام السابق على جدولٍ باسم riverTable (الذي يضم أسماء بعض الأنهار وأطوالها ومصبها والقارة التي يوجد فيها) فسيظهر لدينا الجدول الآتي:

Continent Outflow LengthMiles LengthKm River Serial
South America Atlantic Ocean 4345 6992 Amazon 1
Africa Mediterranean 4258 6853 Nile 2
North America Gulf of Mexico 3902 6275 Mississippi 3
Asia Bohai Sea 3395 5464 Yellow River 4
Africa Atlantic Ocean 2922 4700 Congo 5
Asia Laptev Sea 2736 4400 Lena 6
Africa Gulf of Guinea 2611 4200 Niger 7
Europe Caspian Sea 2266 3645 Volga 8
Asia Andaman Sea 1901 3060 Salween 9

تحديد ظهور بعض الأعمدة

يمكن تحديد مجموعة الأعمدة التي ستظهر في الناتج عبر فصل أسماء تلك الأعمدة بفاصلة ,، وذلك مبيّن في الاستعلام الآتي الذي يُظهِر أسماء الأنهار ومصبّاتها وطولها بالكيلومتر:

SELECT River, Outflow, LengthKm
FROM riverTable;

الاستعلام السابق سيُظِهر الناتج الآتي حيث يُلاحظ اختلاف ترتيب الأعمدة عن الترتيب في الجدول الأصلي:

LengthKm Outflow River
6992 Atlantic Ocean Amazon
6853 Mediterranean Nile
6275 Gulf of Mexico Mississippi
5464 Bohai Sea Yellow River
4700 Atlantic Ocean Congo
4400 Laptev Sea Lena
4200 Gulf of Guinea Niger
3645 Caspian Sea Volga
3060 Andaman Sea Salween

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

الاستعلام الآتي يُحدِّد الأعمدة River و LengthKm و Continent من الجدول riverTable الظاهر في القسم السابق، ويضيف اسمًا بديلًا (التسمية alias عبر المعامل AS) للعمود Continent لجعله يظهر باسم Place، ثم يرتِّب النتائج ترتيبًا هجائيًا تصاعديًا عبر التعبير ORDER BY:

SELECT River, LengthKm, Continent AS Place
FROM riverTable
ORDER BY Continent;

تظهر النتيجة المبيّنة في الجدول الآتي، ويُلاحظ كيف ظهر عمود القارة باسم Place:

Place LengthKm River
Africa 6853 Nile
Africa 4700 Congo
Africa 4200 Niger
Asia 5464 Yellow River
Asia 4400 Lena
Asia 3060 Salween
Europe 3645 Volga
North America 6275 Mississippi
South America 6992 Amazon

تحديد السجلات التي ينطبق عليها شرطٌ معيّن

سيُنفَّذ الاستعلام الآتي على الجدول riverTable وهو يُحدِّد اسم النهر River ويُظهِر طوله بالمتر (بتحديد العمود LengthKm ثم ضربه بالعدد 1000 لتحويله إلى المتر، وذلك باستخدام المعاملات الرياضية ويبيّن مكان وجوده Continent، وذلك من الجدول riverTable، على أن يكون طوله أكبر من 4000 كيلومتر (المعامل WHERE)، ثم يُرتِّب الناتج كله ترتيبًا هجائيًا تصاعديًا عبر اسم القارة:

SELECT River, LengthKm*1000 AS LengthM, Continent
FROM riverTable
WHERE LengthKm > 4000
ORDER BY Continent;

ستظهر النتيجة المبيّنة في الجدول الآتي:

Continent LengthM River
Africa 6853000 Nile
Africa 4700000 Congo
Africa 4200000 Niger
Asia 5464000 Yellow River
Asia 4400000 Lena
North America 6275000 Mississippi
South America 6992000 Amazon

تحديد السجلات التي قيمة أحد حقولها فريدة

تضاف الكلمة المفتاحية DISTINCT في استعلام SELECT للحصول على قيم مختلفة وغير مكررة (أي فريدة)، إذ إن الاستعلام الآتي الذي يُحدِّد أسماء القارات الفريدة من الجدول riverTable:

SELECT DISTINCT Continent
FROM riverTable

سيُظهِر النتيجة:

Continent
South America
Africa
North America
Asia
Europe

استخدام الدوال مع بيانات الجدول

الاستعلام الآتي سيُنفَّذ على جدول riverTable وسيؤدي إلى إظهار طول النهر الأقصر ما بين الأنهار، وطول النهر الأطول، والمتوسط الحسابي للأطوال جميعها، وذلك عبر استخدام الدوال min()‎ و max()‎ و avg()‎ في SQL:

SELECT MIN(LengthKm) AS Minimum Length, MAX(LengthKm) AS Maximum Length, AVG(LengthKm) AS Average Length
FROM riverTable;

وتظهر النتائج الآتية:

Average Length Maximum Length Minimum Length
5065.444 3060 6992

جلب البيانات من أكثر من جدول

يمكن أن تجلب البيانات من أكثر من جدول ضمن قاعدة البيانات وذلك بتحديد أسماء الجداول المطلوب إظهار بياناتها عند الكلمة المفتاحية FROM، إن تنفيذ الاستعلام الآتي سيجلب الأعمدة المطلوبة بحسب وجودها في الجدول المناسب لها:

SELECT River, LengthKm, Mountain, HeightKm
FROM riverTable, mountainTable;

ولدى التعامل مع أكثر من جدول تُربط الجداول فيما بينها بإحدى معاملات الربط.

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم نعم نعم نعم نعم

مصادر