الاستعلام SELECT
يُستخدَم استعلام 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 |
---|---|---|---|---|
نعم | نعم | نعم | نعم | نعم |