راهنمای جامع تابع SQL LOWER: بهینهسازی جستجو و مرتبسازی دادهها
تابع SQL LOWER تمام حروف بزرگ را در یک عبارت رشتهای مشخص، به حروف کوچک تبدیل میکند. سینتکس (نحو) تابع SQL LOWER به صورت زیر است:
LOWER ( string_expression )
در اینجا، string_expression
رشتهای است که میخواهید آن را به حروف کوچک تبدیل کنید. تابع SQL LOWER پس از تبدیل عبارت رشتهای مشخص شده به حروف کوچک، یک رشته را بازمیگرداند.
بیایید چند مثال از کاربرد تابع SQL LOWER را بررسی کنیم. این مثال نحوه استفاده از تابع SQL LOWER برای تبدیل یک رشته به حروف کوچک را نشان میدهد:
SELECT LOWER('SQL LOWER function') AS ConvertedString;
در این مثال، تابع SQL LOWER عبارت ‘SQL LOWER function’ را به ‘sql lower function’ تبدیل میکند.
برای نشان دادن کاربرد تابع SQL LOWER بر روی یک ستون، بیایید یک جدول نمونه با نام Employees
و مقداری داده ایجاد کنیم:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department) VALUES
(1, 'JOHN', 'DOE', 'Sales'),
(2, 'Jane', 'SMITH', 'Marketing'),
(3, 'mike', 'JONES', 'IT');
اکنون، بیایید از تابع SQL LOWER برای تبدیل ستون FirstName
به حروف کوچک استفاده کنیم:
SELECT EmployeeID, LOWER(FirstName) AS LowercaseFirstName, LastName, Department
FROM Employees;
نتیجه، ستون FirstName
را به حروف کوچک تبدیل شده نمایش میدهد.
تابع SQL LOWER هنگام جستجوی دادهها به صورت غیرحساس به حروف (case-insensitive) بسیار مفید است. بیایید کارمندانی را پیدا کنیم که نام کوچک آنها، پس از تبدیل به حروف کوچک، با ‘john’ مطابقت دارد:
SELECT EmployeeID, FirstName, LastName, Department
FROM Employees
WHERE LOWER(FirstName) = 'john';
این کوئری با موفقیت ‘JOHN’ را پیدا میکند، زیرا LOWER('JOHN')
به ‘john’ ارزیابی میشود.
شما میتوانید از تابع SQL LOWER در شرطهای JOIN برای تطبیق غیرحساس به حروف بین جداول نیز استفاده کنید. فرض کنید یک جدول دیگر به نام Departments
داریم:
CREATE TABLE Departments (
DeptID INT PRIMARY KEY,
DeptName VARCHAR(50)
);
INSERT INTO Departments (DeptID, DeptName) VALUES
(101, 'sales'),
(102, 'Marketing'),
(103, 'IT');
اکنون، بیایید جداول Employees
و Departments
را بر اساس ستونهای Department
و DeptName
که به حروف کوچک تبدیل شدهاند، JOIN کنیم:
SELECT E.FirstName, E.LastName, D.DeptName
FROM Employees E
JOIN Departments D ON LOWER(E.Department) = LOWER(D.DeptName);
این کار تضمین میکند که حتی اگر حروفبزرگ و کوچک بین دو جدول متفاوت باشد، تطابق برقرار شود.
برای مرتبسازی دادهها به صورت غیرحساس به حروف، میتوانید از تابع SQL LOWER در بند ORDER BY استفاده کنید:
SELECT EmployeeID, FirstName, LastName
FROM Employees
ORDER BY LOWER(FirstName);
این کوئری ستون FirstName
را به ترتیب حروف الفبا و بدون در نظر گرفتن حروفبزرگ و کوچک مرتب میکند. بنابراین، ‘Jane’, ‘JOHN’ و ‘mike’ بر اساس معادلهای حروف کوچک خود یعنی ‘jane’, ‘john’, ‘mike’ مرتب خواهند شد.
تابع SQL LOWER همچنین میتواند در بند GROUP BY برای گروهبندی دادهها به صورت غیرحساس به حروف استفاده شود. بیایید یک ستون City
با حروفبزرگ و کوچک مختلف به جدول Employees
خود اضافه کنیم:
ALTER TABLE Employees
ADD City VARCHAR(50);
UPDATE Employees
SET City = 'new york' WHERE EmployeeID = 1;
UPDATE Employees
SET City = 'NEW YORK' WHERE EmployeeID = 2;
UPDATE Employees
SET City = 'london' WHERE EmployeeID = 3;
INSERT INTO Employees (EmployeeID, FirstName, LastName, Department, City) VALUES
(4, 'Anna', 'White', 'HR', 'New York');
اکنون، بیایید کارمندان را بر اساس شهر، با نادیده گرفتن حروفبزرگ و کوچک، گروهبندی کنیم:
SELECT LOWER(City) AS LowercaseCity, COUNT(*) AS EmployeeCount
FROM Employees
GROUP BY LOWER(City);
این کار تمامی انواع ‘new york’ را به درستی در یک گروه واحد گروهبندی میکند.
میتوانید از تابع SQL LOWER برای اعمال یکپارچگی دادهها استفاده کنید و اطمینان حاصل کنید که ستونهای رشتهای خاص همیشه دادهها را به حروف کوچک ذخیره میکنند. به عنوان مثال، برای اطمینان از اینکه Department
همیشه به حروف کوچک ذخیره میشود:
ALTER TABLE Employees
ADD CONSTRAINT CK_Department_Lowercase CHECK (LOWER(Department) = Department);
این محدودیت از درج یا بهروزرسانی مقادیری در ستون Department
که به طور کامل حروف کوچک نیستند، جلوگیری میکند.
یک ستون محاسباتی (Computed Column) ستونی مجازی است که به صورت فیزیکی در جدول ذخیره نمیشود، مگر اینکه ستون با گزینه PERSISTED علامتگذاری شود. مقدار آن از یک عبارت محاسبه میشود. میتوانید از SQL LOWER برای تعریف یک ستون محاسباتی استفاده کنید:
ALTER TABLE Employees
ADD LowercaseFirstName AS LOWER(FirstName);
اکنون، اگر از جدول Employees
انتخاب (SELECT) کنید، ستون LowercaseFirstName
را مشاهده خواهید کرد که به طور خودکار پر شده است:
SELECT EmployeeID, FirstName, LowercaseFirstName FROM Employees;
حتی میتوانید روی یک ستون محاسباتی، در صورتی که PERSISTED باشد، ایندکس ایجاد کنید. این کار میتواند برای عملکرد، زمانی که مکرراً بر روی نسخه حروف کوچک یک ستون کوئری میزنید، مفید باشد.
ابتدا، مطمئن شوید که ستون محاسباتی PERSISTED شده است:
ALTER TABLE Employees
DROP COLUMN LowercaseFirstName; -- اگر وجود دارد برای افزودن مجدد به عنوان persisted حذف شود
ALTER TABLE Employees
ADD LowercaseFirstName AS LOWER(FirstName) PERSISTED;
سپس، میتوانید یک ایندکس روی آن ایجاد کنید:
CREATE INDEX IX_Employees_LowercaseFirstName
ON Employees (LowercaseFirstName);
این ایندکس میتواند سرعت کوئریهایی را که از LOWER(FirstName)
در بندهای WHERE یا JOIN خود استفاده میکنند، به طور قابل توجهی افزایش دهد.
**مدیریت مقادیر NULL:** تابع SQL LOWER اگر عبارت رشته ورودی NULL باشد، NULL را برمیگرداند.
**عملکرد:** با وجود مفید بودن، اعمال تابع LOWER روی ستونها در بندهای WHERE یا JOIN میتواند مانع استفاده از ایندکسها بر روی آن ستونها شود که منجر به اسکن کامل جدول (full table scans) میگردد. برای جستجوهای مکرر، استفاده از یک ستون محاسباتی با ایندکس، یا ذخیره مداوم دادهها به حروف کوچک را در نظر بگیرید.
**Collation:** رفتار تابع LOWER ممکن است به تنظیمات Collation پایگاه داده شما بستگی داشته باشد، به ویژه برای کاراکترهای غیر ASCII.
**توابع دیگر:** SQL همچنین توابع UPPER
برای تبدیل به حروف بزرگ و INITCAP
(در برخی پایگاههای داده مانند اوراکل) برای بزرگ کردن حرف اول هر کلمه را ارائه میدهد.