English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، ستتعلم كيفية استخراج البيانات بناءً على المطابقة الجزئية.
حتى الآن، رأيت الشروط التي تحدد الكلمات المحددة، مثل WHERE name='Lois Lane'، ولكن يمكنك أيضًا استخدام عمودية LIKE في SQL للقيام بالمطابقة الجزئية أو النموذجية.
يسمح لك عمودية LIKE بتقديم علامات الاستبدال لتوفير قياس التطابق النموذجي للصفحات. يمكنك استخدام علامتي الاستبدال التاليتين:
النسبة المئوية (%) - تطابق أي عدد من الحروف، حتى لا شيء
الخط السفلي ( _) - تطابق كامل لحرف واحد
هذه بعض الأمثلة التي تظهر كيفية استخدام عمودية LIKE مع علامات الاستبدال.
البيان | المعنى | القيمة الم返回ة |
---|---|---|
WHERE الاسم يشبه 'Da%' | البحث عن الأسماء التي تبدأ بـ Da | David, Davidson |
WHERE الاسم يشبه '%th' | البحث عنthاسم النهاية | Elizabeth, Smith |
WHERE الاسم يشبه '%on%' | البحث عن الأسماء التي تحتوي على on | Davidson, Toni |
WHERE الاسم يشبه 'Sa_' | البحث عن الأسماء التي تبدأ بـ Sa وتتبعها حرف واحد على الأكثر | Sa |
WHERE الاسم يشبه '_oy' | البحث عن الأسماء التي تنتهي بoy وتحتوي على حرف واحد فقط | Joy, Roy |
WHERE name LIKE '_an_' | البحث عنanالأسماء، التي تبدأ وتنتهي بحرف واحد | Dana, Hans |
WHERE name LIKE '%ar_' | البحث عنarالأسماء، التي تبدأ بأي عدد من الأحرف، وتنتهي بأحرف واحدة | Richard, Karl |
WHERE name LIKE '_ar%' | البحث عنarالأسماء، التي تبدأ بأحرف واحدة، وتنتهي بأي عدد من الأحرف | Karl, Mariya |
من خلال البحث عن بعض السجلات، دعنا نطبق الجملة التي ناقشناها سابقًا في التطبيق العملي.
نأخذ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 | | 6 | simons bistro | 2009-04-01 | 6000 | 1 | +--------+------------------+------------+--------+---------+
الآن، لنفترض أنك تريد العثور على جميع الموظفين الذين تبدأ أسمائهم بحرف S.
SELECT * FROM employees WHERE emp_name LIKE 'S%';
بعد تنفيذ الاستعلام، ستحصل على输出来كذا:
+--------+------------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+------------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | | 6 | simons bistro | 2009-04-01 | 6000 | 1 | +--------+------------------+------------+--------+---------+
في MySQL،是非 الثنائي مقارنة الأحرف (CHAR،VARCHAR،TEXT) هي غير معتمدة على الحروف الكبيرة والصغيرة بشكل افتراضي، بينما مقارنة الأحرف الثنائية (BINARY،VARBINARY،BLOB) هي معتمدة على الحروف الكبيرة والصغيرة.
هذا يعني، إذا كنت تستخدم البحث WHERE name LIKE 'S%'، فستحصل على جميع القيم التي تبدأ بحرف S أو s (كما ترون، لدينا أيضًا 'Sarah' و 'simons'). ولكن إذا كنت تريد أن يُفرق البحث بين الحروف الكبيرة والصغيرة، يمكنك استخدام عميل BINARY كما يلي:
-- بناء الجملة لقاعدة بيانات MySQL SELECT * FROM employees WHERE BINARY emp_name LIKE 'S%';
الآن، هذه الجملة ستعود فقط بنames تبدأ بحرف S الكبير من الموظفين:
+--------+------------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+------------------+------------+--------+---------+ | 3 | Sarah Connor | 2005-10-18 | 8000 | 5 | +--------+------------------+------------+--------+---------+
ملاحظة:إذا كنت ترغب في التعامل مع الأعمدة بشكل حساس لحالة الحروف، فاستخدم قواعد الترتيب الحساس لحالة الحروف أو الترتيب الثنائي لتجنب أي مشاكل في الأداء.
إشارة:عندما لا تعرف شكل الدالة التي تبحث عنها بدقة، فإن التكامل الجزئي مفيد للغاية. يمكنك أيضًا استخدام التكامل الجزئي للبحث عن سطرين تحتويان على نص مشابه في عمود معين من الجدول.