English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

جملة WHERE في SQL

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

اختيار السجلات بناءً على الشروط

في الفصل السابق تعلمنا كيفية الحصول على جميع السجلات من جدول أو عمود في الجدول. ولكن في العالم الحقيقي، عادةً ما نحتاج إلى اختيار، تحديث أو حذف السجلات التي تفي ببعض الشروط مثل المستخدمين الذين ينتمون إلى فئة معينة من العمر أو بلد/منطقة معينة إلخ.

جملة WHERE تستخدم معSELECT،UPDATEوDELETE، ولكن سترى في الفصول القادمة كيف يمكن استخدام هذه الجملة مع جمل أخرى.

النحو

جملة WHERE تستخدم مع جملة SELECT، لاستخراج فقط السجلات التي تفي بالشروط المحددة. يمكن تقديم الجملة الأساسية بالشكل التالي:

SELECT column_list FROM table_name WHERE condition;

في هذا السياق،column_listهي عمود/حقل في جدول البيانات الذي ترغب في الحصول على قيمتهالاسم،على سبيل المثالname،age،countryإلخ. ولكن، إذا كنت ترغب في الحصول على قيم جميع الأعمدة المتاحة في الجدول، يمكنك استخدام الجملة التالية:

SELECT * FROM table_name WHERE condition;

الآن، دعونا نرى بعض الأمثلة لعرض كيفية عمله في الواقع.

افترض أن لدينا في قاعدة البيانات اسمemployeesالجدول، الذي يحتوي على السجلات التالية:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|                                  2                       | Tony Montana                               | 2002-07-15                                  |                                  6500                                  |                                  1                                  |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

使用WHERE子句过滤记录

以下SQL语句将从employees表中返回其薪水大于7000的所有employee 。该WHERE子句只是过滤掉不需要的数据。

SELECT * FROM employees
WHERE salary > 7000;

执行后,输出将如下所示:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
+--------+--------------+------------+--------+---------+

正如您看到的,输出仅包含薪水大于7000的那些雇员。类似地,您可以从特定列中获取记录,如下所示:

SELECT emp_id, emp_name, hire_date, salary
FROM employees
WHERE salary > 7000;

执行上面的语句后,您将获得如下输出:

+--------+--------------+------------+--------+
| emp_id | emp_name     | hire_date  | salary |
+--------+--------------+------------+--------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |
+--------+--------------+------------+--------+

以下语句将获取其雇员ID为2的雇员的记录。

SELECT * FROM employees
WHERE emp_id = 2;

该语句将产生以下输出:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|                                  2                       | Tony Montana                               | 2002-07-15                                  |                                  6500                                  |                                  1                                  |
+--------+--------------+------------+--------+---------+

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

WHERE جملة المسميات المسموح بها

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

المشغلوصفنماذج على الإنترنت
=يساويWHERE id = 2
>أفضل من...WHERE age > 30
<أقلWHERE age < 18
>=أكبر أو يساويWHERE rating >= 4
<=أقل أو يساويWHERE price <= 100
LIKEمطابقة بسيطةWHERE name LIKE 'Dav'
INالتحقق من ما إذا كانت القيمة المحددة تتطابق مع أي قيمة في القائمة أو الاستعلام الفرعيWHERE country IN ('USA', 'UK')
BETWEENالتحقق من ما إذا كانت القيمة المحددة تتكون من نطاق القيمWHERE rating BETWEEN 3 AND 5