اسکریپت جستجوی یک جدول توسط نام در SQL Server
اسکریپت جستجوی یک جدول توسط نام با استفاده از SELECT، WHERE و LIKE است،میتوان رکورد یک جدول را بر اساس نام جستجو و فیلتر کرد.
30 شهریور 1405
لینک کوتاه
اسکریپت جستجوی یک جدول توسط نام در SQL Server
جستجو در اطلاعات یکی از پرکاربردترین عملیات در پایگاههای داده است.تقریباً در هر نرمافزار سازمانی، فروشگاهی، حسابداری یا مدیریتی، نیاز داریم اطلاعات یک جدول را بر اساس نام، نام خانوادگی، عنوان یا سایر مشخصات پیدا کنیم.
در SQL Server میتوان با استفاده از دستور SELECT و شرط WHERE اطلاعات موردنظر را جستجو کرد.
یکی از رایجترین روشها برای جستجوی نام، استفاده از عملگر LIKE است.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
جستجوی ساده بر اساس نام در SQL Server
فرض کنید جدولی با نام Customers داریم که اطلاعات مشتریان را در خود ذخیره میکند.این جدول میتواند ستونهایی مانند Id، Name، Family و PhoneNumber داشته باشد.
برای مشاهده تمام مشتریان میتوان از دستور زیر استفاده کرد:
SELECT *
FROM Customers;
اما اگر بخواهیم فقط مشتریای را پیدا کنیم که نام او «علی» است، میتوانیم از شرط WHERE استفاده کنیم:
SELECT *
FROM Customers
WHERE Name = N'علی';
در این مثال، SQL Server فقط رکوردهایی را نمایش میدهد که مقدار ستون Name دقیقاً برابر با «علی» باشد.
استفاده از حرف N قبل از متن فارسی اهمیت دارد، زیرا باعث میشود SQL Server رشته را به صورت Unicode در نظر بگیرد.
برای اطلاعات فارسی بهتر است از نوع داده NVARCHAR نیز استفاده شود.
جستجوی نام با LIKE در SQL Server
در بسیاری از مواقع کاربر نام کامل را وارد نمیکند.برای مثال ممکن است فقط بخواهد عبارت «علی» را جستجو کند و تمام افرادی که این عبارت در نام آنها وجود دارد نمایش داده شوند.
برای این کار میتوان از LIKE استفاده کرد:
SELECT *
FROM Customers
WHERE Name LIKE N'%علی%';
علامت % به معنی هر تعداد کاراکتر است.
بنابراین این دستور میتواند مقادیری مانند موارد زیر را پیدا کند:
علی
علی رضا
محمدعلی
علی اکبری
به همین دلیل، LIKE یکی از مهمترین ابزارها برای ایجاد قابلیت جستجو در SQL Server محسوب میشود.
جستجو از ابتدای نام در SQL Server
گاهی لازم است فقط نامهایی نمایش داده شوند که با عبارت موردنظر شروع میشوند.در این شرایط % را فقط در انتهای عبارت قرار میدهیم:
SELECT *
FROM Customers
WHERE Name LIKE N'علی%';
این دستور نامهایی مانند «علی»، «علی رضا» و «علی اکبری» را پیدا میکند، اما ممکن است «محمدعلی» را پیدا نکند؛ زیرا عبارت «علی» در ابتدای مقدار قرار ندارد.
جستجوی انتهای نام
اگر هدف این باشد که نامهایی پیدا شوند که با یک عبارت مشخص تمام میشوند، % را در ابتدای عبارت قرار میدهیم:SELECT *
FROM Customers
WHERE Name LIKE N'%رضا';
این روش برای جستجوی نامهایی که با عبارت مشخصی تمام میشوند کاربرد دارد.
استفاده از متغیر برای جستجو
در برنامههای واقعی معمولاً عبارت جستجو مستقیماً داخل Query نوشته نمیشود.بهتر است عبارت جستجو در یک متغیر قرار گیرد:
DECLARE @Name NVARCHAR(100);
SET @Name = N'علی';
SELECT *
FROM Customers
WHERE Name LIKE N'%' + @Name + N'%';
مزیت این روش این است که میتوان مقدار @Name را از برنامه، فرم جستجو یا Stored Procedure دریافت کرد.
ساخت Stored Procedure برای جستجوی نام
یکی از روشهای مناسب در SQL Server استفاده از Stored Procedure است. برای مثال:CREATE PROCEDURE SearchCustomerByName
@Name NVARCHAR(100)
AS
BEGIN
SELECT
Id,
Name,
Family,
PhoneNumber
FROM Customers
WHERE Name LIKE N'%' + @Name + N'%';
END;
پس از ایجاد Procedure میتوان آن را به شکل زیر اجرا کرد:
EXEC SearchCustomerByName N'علی';
این روش برای نرمافزارهایی که دائماً نیاز به جستجو دارند بسیار مناسب است.
جستجوی نام و نام خانوادگی در SQL Server
گاهی نام و نام خانوادگی در دو ستون جداگانه ذخیره شدهاند.در این حالت میتوان هر دو ستون را جستجو کرد:
DECLARE @Search NVARCHAR(100) = N'علی';
SELECT *
FROM Customers
WHERE Name LIKE N'%' + @Search + N'%'
OR Family LIKE N'%' + @Search + N'%';
با این Query اگر عبارت جستجو در نام یا نام خانوادگی وجود داشته باشد، رکورد نمایش داده میشود.
برای مثال اگر اطلاعات زیر در جدول وجود داشته باشد:
علی | رضایی
محمد | علیزاده
رضا | کریمی
جستجوی «علی» میتواند دو رکورد اول را برگرداند.
جستجوی نام کامل در SQL Server
اگر نام و نام خانوادگی در دو ستون ذخیره شده باشند، میتوان آنها را با هم ترکیب کرد:DECLARE @Search NVARCHAR(100) = N'علی رضایی';
SELECT *
FROM Customers
WHERE CONCAT(Name, N' ', Family)
LIKE N'%' + @Search + N'%';
تابع CONCAT برای اتصال مقادیر متنی استفاده میشود و در این مثال نام و نام خانوادگی را به یک عبارت تبدیل میکند.
جستجوی پویا جستجوی یک جدول توسط نام در SQL Server
در بسیاری از سیستمها ممکن است کاربر عبارت جستجو را وارد نکند.بنابراین میتوان شرط را به شکلی نوشت که در صورت خالی بودن پارامتر، همه اطلاعات نمایش داده شود:
DECLARE @Name NVARCHAR(100) = NULL;
SELECT *
FROM Customers
WHERE @Name IS NULL
OR @Name = N''
OR Name LIKE N'%' + @Name + N'%';
اگر @Name خالی باشد، همه رکوردها نمایش داده میشوند و اگر مقداری داشته باشد، جستجو انجام میشود.
نکته مهم درباره NULL در SQL Server
باید توجه داشت که NULL با رشته خالی ('') یکسان نیست.مقدار NULL به معنی نبود مقدار است، در حالی که رشته خالی یک مقدار متنی بدون کاراکتر است.
بنابراین در Queryهای جستجو بهتر است هر دو حالت در نظر گرفته شوند.
مثلاً:
WHERE @Name IS NULL
OR LTRIM(RTRIM(@Name)) = N''
OR Name LIKE N'%' + LTRIM(RTRIM(@Name)) + N'%'
تابع LTRIM و RTRIM برای حذف فاصلههای ابتدا و انتهای عبارت استفاده میشوند.
بهینهسازی جستجو در SQL Server
اگر جدول بسیار بزرگ باشد، استفاده از:WHERE Name LIKE N'%' + @Name + N'%'
ممکن است باعث کاهش سرعت Query شود؛ زیرا جستجویی که با % شروع میشود معمولاً امکان استفاده مؤثر از Index معمولی روی ستون را محدود میکند.
اگر جستجو فقط از ابتدای نام انجام شود:
WHERE Name LIKE @Name + N'%'
در شرایط مناسب میتواند عملکرد بهتری داشته باشد.
برای جدولهای بسیار بزرگ همچنین میتوان بسته به نیاز از Indexهای مناسب یا قابلیت Full-Text Search در SQL Server استفاده کرد.
جلوگیری از SQL Injection
اگر عبارت جستجو از کاربر دریافت میشود، نباید مقدار کاربر را با اتصال رشتهای وارد Query کرد.برای مثال ساختن Query به شکل زیر روش مناسبی نیست:
SELECT * FROM Customers WHERE Name = '...'
بهتر است از پارامترها، Stored Procedure یا دستورات پارامتری در زبان برنامهنویسی استفاده شود.
این کار علاوه بر تمیزی کد، امنیت برنامه را نیز افزایش میدهد.




کاربران ما
شما هم نظرتون با ما دریاره “اسکریپت جستجوی یک جدول توسط نام در SQL Server” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید