تصفية البيانات مع دالات التقييم
ستقيم أبسط عبارات SELECT مع عبارات SELECT وFROM فقط كل صف في الجدول. باستخدام عبارة WHERE، يمكنك تحديد الشروط التي تحدد الصفوف التي ستتم معالجتها والتي من المحتمل أن تقلل من مجموعة النتائج.
بنية عبارة WHERE
تتكون عبارة WHERE من شرط بحث واحد أو أكثر، كل منها يجب أن يتم تقييمه إلى TRUE أو FALSE أو "غير معروف" لكل صف من الجدول. سيتم إرجاع الصفوف فقط عند تقييم عبارة WHERE على أنها TRUE. تعمل الشروط الفردية كعوامل تصفية على البيانات، ويشار إليها باسم "دالات التقييم". تتضمن كل دالة تقييم شرطًا يتم اختباره، عادةً باستخدام عوامل المقارنة الأساسية:
- = (يساوي)
- <>(لا يساوي)
- >(أكثر من)
- >= (أكبر من أو يساوي)
- <(أصغر من)
- <= (أصغر من أو يساوي)
على سبيل المثال، يقوم الاستعلام التالي بإرجاع كافة المنتجات ذات قيمة 2 ProductCategoryID:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ProductCategoryID = 2;
وبالمثل، يقوم الاستعلام التالي بإرجاع كافة المنتجات التي يقل ListPriceعن 10.00 في القائمة:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ListPrice < 10.00;
فارغ / ليس فارغا
يمكنك أيضًا التصفية بسهولة للسماح بالقيم 'غير المعروفة' أو القيم الخالية أو استبعادها باستخدام IS NULL أو IS NOT NULL.
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ProductName IS NOT NULL;
شروط متعددة
يمكن دمج دالات التقييم المتعددة مع عوامل التشغيل AND و OR، وبالأقواس. ومع ذلك، سيقوم SQL Server بمعالجة شرطين فقط في كل مرة. يجب أن تكون جميع الشروط TRUE عند توصيل شروط متعددة بعامل تشغيل AND. عند استخدام عامل تشغيل OR لتوصيل شرطين، قد يكون أحدهما أو كليهما TRUE لمجموعة النتائج.
على سبيل المثال، يقوم الاستعلام التالي بإرجاع منتج في الفئة 2 تكلفته أقل من 10.00:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ProductCategoryID = 2
AND ListPrice < 10.00;
تتم معالجة عوامل التشغيل AND قبل عوامل التشغيل OR ما لم يتم استخدام الأقواس. للحصول على أفضل الممارسات، استخدم الأقواس عند استخدام أكثر من دالتين تقييم. يقوم الاستعلام التالي بإرجاع المنتجات في الفئة 2 OR 3 AND وتكلفة أقل من 10.00:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE (ProductCategoryID = 2 OR ProductCategoryID = 3)
AND (ListPrice < 10.00);
عوامل المقارنة
توفر Transact-SQL بعض عوامل المقارنة الإضافية التي يمكن أن تساعد في تبسيط عبارة WHERE.
IN
عامل التشغيل IN هو اختصار لشروط المساواة المتعددة لنفس العمود المتصل بـ OR. لا يوجد خطأ في استخدام شروط OR متعددة في استعلام، كما هو الحال في المثال التالي:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ProductCategoryID = 2
OR ProductCategoryID = 3
OR ProductCategoryID = 4;
ومع ذلك، فإن استخدام IN واضح وموجز، ولن يتأثر أداء الاستعلام.
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ProductCategoryID IN (2, 3, 4);
بين
BETWEEN هو اختصار آخر يمكن استخدامه عند التصفية لحد علوي وسفلي للقيمة بدلاً من استخدام شرطين مع عامل التشغيل AND. الاستعلامات التالية متكافئة:
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ListPrice >= 1.00
AND ListPrice <= 10.00;
SELECT ProductCategoryID AS Category, ProductName
FROM Production.Product
WHERE ListPrice BETWEEN 1.00 AND 10.00;
يستخدم عامل BETWEEN قيم حد شاملة. سيتم تضمين المنتجات بسعر إما 1.00 أو 10.00 في النتائج. يعد BETWEEN مفيدًا أيضًا عند الاستعلام عن حقول التاريخ. على سبيل المثال، سيتضمن الاستعلام التالي جميع أسماء المنتجات المعدلة بين 1 يناير 2012 و31 ديسمبر 2012:
SELECT ProductName, ModifiedDate
FROM Production.Product
WHERE ModifiedDate BETWEEN '2012-01-01' AND '2012-12-31';
ProductName
ModifiedDate
جوارب الدراجة الجبلية ، م
2012-01-01 00:00:00.000
هيكل جبلي HL - فضي، 42
2012-03-05 00:00:00.000
هيكل جبلي HL - فضي، 38
2012-08-29 00:00:00.000
ماونتن 100 فضي، 38
2012-12-31 00:00:00.000
ومع ذلك، نظرًا لأننا لا نحدد نطاقًا زمنيًا، لا يتم إرجاع أي نتائج بعد 2012-12-31 00:00:00.000. لتضمين التاريخ و الوقت بدقة، نحتاج إلى تضمين الوقت في دالة التقييم:
SELECT ProductName, ListPrice, ModifiedDate
FROM Production.Product
WHERE ModifiedDate BETWEEN '2012-01-01 00:00:00.000' AND '2012-12-31 23:59:59.999';
تكون عوامل المقارنة الأساسية مثل أكبر من (>) و يساوي (=) دقيقة أيضًا عند التصفية حسب التاريخ فقط:
SELECT ProductName, ListPrice, ModifiedDate
FROM Production.Product
WHERE ModifiedDate >= '2012-01-01'
AND ModifiedDate < '2013-01-01';
LIKE
لا يمكن استخدام عامل المقارنة النهائي إلا لبيانات الشخصية ويسمح لنا باستخدام أحرف البدل وأنماط التعبير العادي. تسمح لنا أحرف البدل بتحديد سلاسل جزئية. على سبيل المثال، يمكنك استخدام الاستعلام التالي لإرجاع جميع المنتجات ذات الأسماء التي تحتوي على كلمة "mountain"
SELECT Name, ListPrice
FROM SalesLT.Product
WHERE Name LIKE '%mountain%';
يمثل حرف البدل%أي سلسلة مكونة من 0 أو أكثر من الأحرف، لذلك تتضمن النتائج منتجات تحتوي على كلمة "mountain" في أي مكان باسمها، مثل هذا:
الاسم
ListPrice
جوارب الدراجة الجبلية ، م
9.50
جوارب الدراجة الجبلية ، L
9.50
هيكل جبلي HL - فضي، 42
1364.0
هيكل جبلي HL - أسود، 42
1349.60
هيكل جبلي HL - فضي، 38
1364.50
ماونتن 100 فضي، 38
3399.99
يمكنك استخدام حرف البدل_ (شرطة سفلية) لتمثيل حرف واحد، مثل هذا:
SELECT ProductName, ListPrice
FROM SalesLT.Product
WHERE ProductName LIKE 'Mountain Bike Socks, _';
تتضمن النتائج التالية فقط المنتجات التي تبدأ بـ "Mountain Bike Socks، " وبعدها حرف واحد:
ProductName
ListPrice
جوارب الدراجة الجبلية ، م
9.50
جوارب الدراجة الجبلية ، L
9.50
يمكنك تعريف أنماط معقدة للسلاسل التي تريد العثور عليها. على سبيل المثال، بحث الاستعلام التالي عن منتجات باسم يبدأ بـ "Mountain-"، ثم يليه:
- ثلاثة أحرف بين 0 و9
- مسافة
- أي سلسلة
- فاصلة
- مسافة
- حرفان بين 0 و9
SELECT ProductName, ListPrice
FROM SalesLT.Product
WHERE ProductName LIKE 'Mountain-[0-9][0-9][0-9] %, [0-9][0-9]';
قد تبدو نتائج هذا الاستعلام على النحو التالي:
ProductName
ListPrice
ماونتن 100 فضي، 38
3399.99
ماونتن 100 فضي، 42
3399.99
ماونتن 100 أسود, 38
3399.99
ماونتن 100 أسود, 42
3399.99
ماونتن 200 فضي، 38
2319.99
ماونتن 200 فضي، 42
2319.99
ماونتن 200 أسود، 38
2319.99
ماونتن 200 أسود, 42
2319.99