آموزش استفاده از Wildcardها در SQL

مقدمه (Introduction)

مانند بسیاری از زبان‌های برنامه‌نویسی، SQL نیز امکان استفاده از Wildcard‌ها (کاراکترهای جانشین) را فراهم می‌کند. Wildcardها کاراکترهای خاصی هستند که می‌توانند نماینده‌ی یک یا چند کاراکتر یا مقدار دیگر باشند.
این قابلیت در SQL بسیار کاربردی است، زیرا به شما اجازه می‌دهد بدون دانستن مقدار دقیق داده‌ها، در پایگاه داده جستجو انجام دهید.

در این راهنما یاد می‌گیرید که چگونه با استفاده از Wildcardهای تعریف‌شده در SQL داده‌ها را Query کنید.


پیش‌نیازها (Prerequisites)

برای دنبال کردن این راهنما به موارد زیر نیاز دارید:

  • یک سیستم دارای Relational Database Management System (RDBMS) که از SQL پشتیبانی کند

نمونه‌ها و دستورات این آموزش در محیط زیر بررسی شده‌اند:

  • سرور Ubuntu 20.04 با کاربر non-root دارای دسترسی مدیریتی و فایروال UFW

  • MySQL نصب و ایمن‌سازی‌شده روی سرور

  • یک کاربر non-root در MySQL

نکته: هر RDBMS پیاده‌سازی مخصوص خود را از SQL دارد. اگرچه دستورات این آموزش در اکثر دیتابیس‌ها کار می‌کنند، اما ممکن است سینتکس یا خروجی آن‌ها در سیستم‌هایی غیر از MySQL کمی متفاوت باشد.

همچنین به یک دیتابیس و جدول نمونه دارای داده نیاز دارید تا بتوانید Wildcardها را تمرین کنید.


اتصال به MySQL و ساخت دیتابیس نمونه

اگر دیتابیس شما روی سرور راه دور قرار دارد، ابتدا از طریق SSH وارد سرور شوید:

ssh sammy@your_server_ip

سپس وارد محیط MySQL شوید:

mysql -u sammy -p

ایجاد دیتابیس:

CREATE DATABASE wildcardsDB;

در صورت موفقیت، خروجی مشابه زیر نمایش داده می‌شود:

Query OK, 1 row affected (0.01 sec)

انتخاب دیتابیس:

USE wildcardsDB;

ساخت جدول نمونه

در این مثال جدولی به نام user_profiles می‌سازیم که اطلاعات کاربران یک اپلیکیشن را ذخیره می‌کند.

ستون‌ها:

  • user_id : شناسه یکتا (Primary Key)

  • name : نام کاربر

  • email : ایمیل کاربر

  • birthdate : تاریخ تولد

  • quote : نقل‌قول مورد علاقه‌ی کاربر

CREATE TABLE user_profiles (
user_id int,
name varchar(30),
email varchar(40),
birthdate date,
quote varchar(300),
PRIMARY KEY (user_id)
);

وارد کردن داده‌های نمونه

INSERT INTO user_profiles
VALUES
(1, 'Kim', 'bd_eyes@example.com', '1945-07-20', '"Never let the fear of striking out keep you from playing the game." -Babe Ruth'),
(2, 'Ann', 'cantstandrain@example.com', '1947-04-27', '"The future belongs to those who believe in the beauty of their dreams." -Eleanor Roosevelt'),
(3, 'Phoebe', 'poetry_man@example.com', '1950-07-17', '"100% of the people who give 110% do not understand math." -Demitri Martin'),
(4, 'Jim', 'u_f_o@example.com', '1940-08-13', '"Whoever is happy will make others happy too." -Anne Frank'),
(5, 'Timi', 'big_voice@example.com', '1940-08-04', '"It is better to fail in originality than to succeed in imitation." -Herman Melville'),
(6, 'Taeko', 'sunshower@example.com', '1953-11-28', '"You miss 100% of the shots you don\'t take." -Wayne Gretzky'),
(7, 'Irma', 'soulqueen_NOLA@example.com', '1941-02-18', '"You have brains in your head. You have feet in your shoes. You can steer yourself any direction you choose." -Dr. Seuss'),
(8, 'Iris', 'our_town@example.com', '1961-01-05', '"You will face many defeats in life, but never let yourself be defeated." -Maya Angelou');

اکنون آماده‌ی یادگیری استفاده از Wildcardها هستید.


جستجوی داده با Wildcard در SQL

در SQL تنها دو Wildcard اصلی وجود دارد:

  • _ : نمایش‌دهنده‌ی یک کاراکتر

    • مثال:
      s_mmy → sammy، sbmmy، sxmmy

  • % : نمایش‌دهنده‌ی صفر یا چند کاراکتر

    • مثال:
      s%mmy → sammy، smmy، saaaaaammy

این Wildcardها فقط در بخش WHERE و همراه با LIKE یا NOT LIKE استفاده می‌شوند.


مثال: جستجوی نام‌های سه‌حرفی که به im ختم می‌شوند

SELECT * FROM user_profiles
WHERE name LIKE '_im';

نتیجه:

Kim و Jim

علامت * در SELECT به معنی «تمام ستون‌ها» است و Wildcard محسوب نمی‌شود.


استفاده از NOT LIKE

SELECT * FROM user_profiles
WHERE name NOT LIKE '_im';

این دستور تمام رکوردهایی را نمایش می‌دهد که الگوی مشخص‌شده را ندارند.


استفاده از % برای جستجوی پیشوند

SELECT user_id, name, email
FROM user_profiles
WHERE name LIKE 'I%';

تمام نام‌هایی که با حرف I شروع می‌شوند برگردانده می‌شوند.

در MySQL، LIKE به‌صورت پیش‌فرض حساس به حروف بزرگ و کوچک نیست.


Escape کردن Wildcardها

گاهی لازم است خود کاراکترهای % یا _ را جستجو کنید. در این حالت باید از Escape Character استفاده کنید.

مثال نادرست:

SELECT user_id, name, quote
FROM user_profiles
WHERE quote LIKE '%';

این Query تمام رکوردها را برمی‌گرداند.


Escape کردن علامت %

SELECT user_id, name, quote
FROM user_profiles
WHERE quote LIKE '%\%%';

این دستور فقط رکوردهایی را نمایش می‌دهد که در متن آن‌ها علامت % وجود دارد.


تعریف Escape سفارشی با ESCAPE

SELECT user_id, name, email
FROM user_profiles
WHERE email LIKE '%@_%' ESCAPE '@';

در اینجا @ به‌عنوان Escape Character تعریف شده و Query ایمیل‌هایی را که دارای _ هستند برمی‌گرداند.


جمع‌بندی (Conclusion)

در این راهنما یاد گرفتید:

  • Wildcard در SQL چیست

  • تفاوت % و _

  • استفاده از LIKE و NOT LIKE

  • Escape کردن Wildcardها

  • تعریف Escape سفارشی با ESCAPE

دستورات ارائه‌شده در اکثر دیتابیس‌های SQL قابل استفاده هستند، اما برای جزئیات دقیق‌تر بهتر است مستندات رسمی DBMS خود را بررسی کنید.

از همراهی شما با پارمین کلود متشکریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *