
دستور SELECT در SQL Server
دستور Select در SQL Server، کاربردهای متنوعی دارد و شما میتوانید آن را در انواع کوئریهای زبان T-SQL به کار ببرید. این دستور بهعنوان یکی از اجزای کلیدی در اسکریپتنویسی و به هدف استخراج دادهها مورد استفاده قرار میگیرد. در این مقاله، دستور SELECT و کاربردهای آن بههمراه مثالهای قابل درک شرح داده میشوند.
زبان SQL چیست و چه تفاوتی با T-SQL دارد؟
زبان اسکریپت نویسی SQL یک زبان کوئرینویسی ساختاریافته است که به منظور مدیریت و دستکاری در پایگاه داده رابطه ای (RDBMS) طراحی شده است. این زبان، با ارائه یک راه استانداردشده در اموری همچون تعامل با پایگاه داده، اجرای کوئریها، بهروزرسانی رکوردها، درج دادههای جدید و مدیریت ساختار خود دیتابیس مورد استفاده قرار میگیرد. در حال حاضر، SQL بهصورت گسترده در انواع حوزههای صنعت و آکادمیک به کار میرود و اغلب سیستمهای مدیریت پایگاه داده (DBMS) از آن پشتیبانی میکنند.
زبان T-SQL نسخه تعمیمیافته SQL محسوب میشود که توسط شرکت مایکروسافت پیادهسازی شده است. T-SQL به طور خاص با Microsoft SQL Server کار میکند و در آن، قابلیتهای توسعهیافتهای مانند استور پروسیجر (Stored Procedures)، توابع تعریفشده توسط کاربر (User-Defined)، Trigger ها و… افزوده شده است.
دستور SELECT در SQL Server چیست؟
SQL Server بهعنوان یک سیستم مدیریت پایگاه داده قدرتمند، امکانات و قابلیتهای گوناگونی در اختیار توسعهدهنده و مدیر پایگاه داده (DBA) قرار میدهد. دستور Select در SQL Server یکی از اصلیترین دستورات SQL Server به شمار میرود که به واسطه آن، امکان استخراج دادهها وجود دارد؛ به طوری که گاهاً به این دستور، تحت عنوان سنگ بنای کوئرینویسی و استخراج دادهها از پایگاههای داده SQL Server اشاره میشود. در بخش بعدی، به موارد استفاده دستور Select پرداخته خواهد شد تا نقش آن در کوئرینویسی شفافتر شود.
کاربرد Select در SQL Server
در این بخش از آموزش کاربرد دستور Select را برای شما بازگو خواهیم کرد، با ما همراه باشید. همچنین افراد علاقهمند میتوانند با مطالعه مقاله پرکاربردترین دستورات SQL Server، دانش خود را در زمینه کوئرینویسی گسترش دهند.
۱- استخراج داده
اصلیترین کاربرد دستور Select در SQL Server ، استخراج دادهها از یک یا چند جدول پایگاه داده رابطه ای (RDBMS) است. این عمل، واکشی یک یا چند ستون خاص از جدول را شامل میشود. بهعنوان مثال، فرض کنید قصد دارید نام و نام خانوادگی کارکنان سازمان را از جدول مربوط به آنها (Employee) استخراج کنید. در چنین شرایطی، باید دستور Select را به صورت زیر اجرا کنید:
SELECT FirstName, LastName FROM Employees;
۲- فیلترینگ داده ها با Where
شما میتوانید با استفاده از WHERE در SQL Server ، سطرها را براساس شرایط خاصی فیلتر کنید. به این ترتیب، این امکان فراهم میشود که زیرمجموعهای از دادههای جدول استخراج شوند. برای درک بهتر، به مثال زیر توجه کنید.
فرض کنید میخواهیم تنها قیمت و نام محصولاتی را از جدول محصول استخراج کنیم که CategoryID آنها برابر با ۲ باشد. در چنین شرایطی، لازم است دستور Select به همراه شرط زیر به کار رود:
SELECT ProductName, UnitPrice, CategoryID FROM Products WHERE CategoryID = 2;
۳- مرتب سازی نتایج با Order By
در برخی مواقع، شرایط حکم میکند که نتایج حاصل از اجرای یک کوئری را مرتبسازی (Sort) کنید. برای این کار، کافیست دستور Select بههمراه Order By استفاده شود. مرتبسازی نتایج در مواقعی مناسب است که بخواهید دادهها در یک ترتیب خاص، صعودی (Ascending) یا نزولی (Descending)، نمایش داده شوند. برای مثال، در ادامه قصد داریم نام محصولات و قیمت آنها را بهصورت نزولی نمایش دهیم:
SELECT ProductName, UnitPrice, CategoryID FROM Products ORDER BY UnitPrice DESC;
۴- حذف سطرهای تکراری با Distinct
به واسطه کلمه کلیدی Distinct و دستور Select در SQL Server میتوان سطرهای تکراری را از نتیجه حذف کرد و یک لیست یکتا از مقادیر بهدست آورد. با اجرای دستور زیر، CategoryID های منحصربهفرد از جدول محصولات (Products) استخراج میشوند.
SELECT DISTINCT CategoryID FROM Products;
برای درک بهتر این Use-Case دستور Select، پیشنهاد میشود مقاله دستور Select Distinct در SQL نیز مطالعه شود.
۵- استفاده از دستور Select به همراه توابع تجمیعی
با کمک Group By و دستور Select ، میتوان سطرها را براساس یک یا چند ستون خاص، گروهبندی کرد. معمولاً در این موردِ استفاده دستور Select، توابع تجمیعی (Aggregation Functions) مانند COUNT ،SUM ،AVG و… به همراه Group By به کار میروند. برای درک بهتر، به دستور زیر توجه کنید.
SELECT CategoryID, AVG(UnitPrice) AS AvgUnitPrice FROM Products GROUP BY CategoryID;
با اجرای مثال فوق، نتیجه این کوئری در قالب دو ستون CategoryID و AvgUnitPrice نمایش داده میشود؛ به طوری که هر سطر، نمایانگر یک Category خاص باشد و در ستون AvgUnitPrice مرتبط به آن، میانگین قیمت محصولات آن Category نمایش داده شود.
۶- پیاده سازی Join روی جداول
دستور Select به شما این اجازه را میدهد که چندین جدول پایگاه داده را Join کنید. درواقع، زمانی که شما بخواهید دادههایی از دو یا چند جدول پایگاه داده رابطهای را با یکدیگر ترکیب کنید، لازم است دستور Select را بههمراه کلاز Join استفاده کنید. برای درک بهتر عملیات Join و کاربرد دستور Select ، به مثال زیر توجه کنید:
SELECT
Orders.OrderID,
Customers.CompanyName,
Orders.OrderDate
FROM Orders
JOIN Customers ON
Orders.CustomerID = Customers.CustomerID;
۷- زیر کوئری (SubQuery) برای شرط های پیچیده
با بهکارگیری Subquery ها درون دستور Select ، امکان رسیدگی به شرطهای پیچیده و استخراج دادهها برمبنای نتایج حاصل از یک کوئری نویسی دیگر وجود دارد. فرض کنید بخواهیم نام شرکت مشتریانی را استخراج کنیم که در تاریخ ‘۱۹۹۶-۱۰-۳۰’ ثبت سفارش انجام دادهاند. برای این کار، لازم است دستور Select بهصورت زیر مورد استفاده قرار بگیرد. همجنین شما میتوانید کوئری نویسی را به صورت گامبهگام با استفاده از دورههایی که برای شما تهیه کردهایم میتوانید از نیک آموز فرا بگیرید.
SELECT
CompanyName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE OrderDate = '1996-10-30');
۸- عملگرهای SET
شما میتوانید با استفاده از عملگرهای SET، شامل UNION ،INTERSECT و EXCEPT، در یک دستور Select، نتایج حاصل از اجرای چند کوئری را ترکیب یا مقایسه کنید. برای مثال، نحوه استفاده از عملگر UNION بههمراه دستور Select به شکل زیر است:
SELECT ProductID AS RecID, ProductName AS RecTitle,'Products' AS RecType FROM Products
UNION
SELECT EmployeeID AS RecID, LastName AS RecTitle ,'Employees' AS RecType FROM Employees
با اجرای کوئری فوق، نتایج حاصل از دو کوئری مختلف در قالب یک نتیجه، ترکیب و نمایش داده میشوند.
۹- استفاده از Window Function ها برای کوئری نویسی تحلیلی
به واسطه استفاده از Window Function ها در دستور Select ، میتوان محاسبات را روی بازه خاصی از ستونهای مرتبط با ستون فعلی انجام داد. در مثال زیر، با کمک ()AVG و کلاز OVER، میانگین قیمت هر Category از محصول محاسبه میشود.
SELECT
ProductID, UnitPrice,
AVG(UnitPrice) OVER (PARTITION BY CategoryID) AS AvgUnitPriceInCategory
FROM Products;
۱۰- منطق شرطی و استفاده از عبارت Case When
شما میتوانید با بهرهمندی از عبارت CASE WHEN در دستور Select ، منطق شرطی را معرفی کرده و خروجی را براساس شرایط خاصی شخصسازی کنید. در مثال زیر، از CASE به منظور طبقهبندی محصولات براساس قیمت آنها استفاده خواهد شد:
SELECT
ProductName,
CASE
WHEN UnitPrice > 100 THEN 'Expensive'
ELSE 'Affordable'
END AS PriceCategory
FROM Products;
علاوهبر این، مقاله استفاده از عبارت Case در SQL Server میتواند برای شما بهعنوان مطلب مکمل مفید باشد.
۱۱- اعمال محدودیت روی سطرها با TOP
شما میتوانید با کمک کلید واژه TOP در دستور Select ، هر تعداد خاصی از ستونها را از ابتدای مجموعه جواب استخراج کنید. بهعنوان مثال، با اجرای کوئری زیر، «۱۰ محصول بالایی» از جدول Products، به همراه نام و قیمت آنها استخراج شده و براساس هزینه، بهصورت نزولی (DESC) مرتبسازی میشوند و درنهایت، در خروجی نشان داده خواهند شد.
SELECT TOP 10
ProductName, UnitPrice
FROM Products
ORDER BY UnitPrice DESC;
۱۲- Pivot و Unpivot داده ها
Pivot و Unpivot در SQL Server دو عملگری به شمار میروند که برای تبدیل دادهها به فرمتهای ستونی و سطری استفاده میشوند. در کوئری زیر، از Pivot در دستور Select استفاده شده است و به کمک آن، تعداد رخداد هر CategoryID برای هر محصول شمرده میشود.
SELECT
*
FROM (SELECT ProductName, CategoryID FROM Products) AS SourceTable
PIVOT
(
COUNT(CategoryID)
FOR CategoryID IN ([1], [2], [3] , [4])
) AS PivotTable;
۱۳- استفاده از دستور Select در Insert Into
شما میتوانید دستور Select را بهصورتی ترکیبی با دستور Insert Into به کار ببرید. با این کار، براساس کوئری خاصی، دادهها به جدول مورد نظر درج میشوند. معمولاً به این عبارت، تحت عنوان INSERT INTO SELECT نیز اشاره میشود. برای درک بهتر، به مثالهای زیر توجه کنید.
INSERT INTO NewEmployees
SELECT * FROM Employees;
با اجرای کوئری فوق، تمام ستونهای جدول Employees به جدول NewEmployees درج میشوند. این موضوع، در مواقعی مناسب است که بخواهید دادهها را از یک جدول به جدول دیگر کپی کنید.
در مثال زیر، تنها ستونهای مشخصی به جدول SalesEmployes درج میشوند که شرط جلوی کلمه WHERE برای آنها صدق کند.
INSERT INTO SalesEmployees (EmployeeID, FirstName, LastName)
SELECT
EmployeeID, FirstName, LastName
FROM Employees
WHERE Department = 'Sales';
۱۴- استفاده از دستور Select به همراه کلاز Having
در SQL Server میتوان Having را بههمراه دستور Select استفاده کرد تا بدین طریق، نتایج حاصل از کوئری را براساس مقادیر تجمیعی فیلتر کرد. توجه کنید که با بهکارگیری Where، پیش از گروهبندی و تجمیع سطرها، فرآیند فیلترکردن سطرها انجام میشود؛ در حالی که با استفاده از Having، فرآیند فیلترینگِ نتایج پس از گروهبندی و تجمیع آنها اعمال خواهد شد. به منظور درک بهتر، به کوئری زیر توجه کنید:
SELECT
CustomerID, SUM(Freight) as TotalFreight
FROM orders
GROUP BY CustomerID
HAVING SUM(Freight)>300;
در مثال فوق، لیست مقادیر CustomerID ها بههمراه «مجموعه مقدار هزینه حمل» بازگردانده میشوند؛ البته در صورتی که مجموعه هزینه حمل آنها بزرگتر از ۳۰۰ باشد.
نکته حائز اهمیت این است که Having با توابع تجمیعی به کار میرود و پس از اعمال Group By اعمال خواهد شد.
۱۵- مفهوم Index Optimizer Hint در SQL Server
شما میتوانید با استفاده از Optimizer Hint خاصی که INDEX نام دارد، یک ایندکس (ایندکس چیست) مشخص برای بهینهساز کوئری پیشنهاد کنید. INDEX Hint به شما این امکان را میدهد که انتخاب پیشفرض بهینهساز را برای یک کوئری مشخص، نادیده بگیرید. در مثال زیر، با بهکارگیری WITH(INDEX(CustomerID)) به عنوان Hint، بهینهسازی متوجه خواهد شد که شما یک ایندکس خاص برای کوئری پیشنهاد کردهاید.
SELECT
*
FROM Orders WITH(INDEX(CustomerID))
WHERE CustomerID = 123;
در این بخش، مهمترین کاربردهای دستور Select در SQL Server مورد بررسی قرار گرفتند. با توجه به نقش کلیدی Select، بدیهی است که امکان استفاده از آن در اسکریپت های SQL Server وجود دارد.
سخن پایانی
دستور Select در SQL Server بهعنوان یکی از عبارات پایه و متداول کوئرینویسی شناخته شده است. به واسطه این دستور، میتوانید اموری همچون استخراج دادهها، فیلترینگ دادهها، پیادهسازی جوین روی جداول، حذف مقادیر تکراری، استفاده از Subquery ها و سایر موارد را انجام داد. در این مطلب، پراهمیتترین Use Case های دستور Select در SQL Server بههمراه مثالهای کاربردی شرح داده شدند و در مقالات آتی، نحوه استفاده از سایر کوئریهای T-SQL آموزش داده خواهند شد. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم.