آنچه در این مقاله میخوانید
آشنایی و نحوه استفاده از توابع در SQL
۱۸ شهریور ۱۴۰۴
امروزه دادهها مهمترین بخش هر کسبوکار و سازمانی هستند، اما صرفا ذخیرهسازی آنها کافی نیست. ارزش واقعی زمانی ایجاد میشود که بتوان این دادهها را پردازش، تحلیل و به بینشهای کاربردی تبدیل کرد. SQL بهعنوان زبان استاندارد پایگاههای داده رابطهای، ابزاری قدرتمند برای دستیابی به این هدف است.
با استفاده از توابع SQL میتوان محاسبات ریاضی انجام داد، متنها و تاریخها را دستکاری کرد و گزارشهای خلاصه و دقیق تهیه نمود. بهعنوان نمونه، محاسبه میانگین خرید مشتریان، گرد کردن قیمت محصولات یا تعیین مدتزمان باقیمانده از گارانتی یک سفارش، تنها با چند دستور ساده امکانپذیر است.
در این راهنما از بلاگ لیارا به بررسی مهمترین توابع SQL پرداخته میشود تا نشان دهیم چگونه میتوانید دادهها را از یک منبع خام به ابزاری استراتژیک برای تصمیمگیری هوشمندانه تبدیل کنید.
پیشنیازها
برای دنبال کردن این راهنما، به یک رایانه با سیستم مدیریت پایگاه داده رابطهای مبتنی بر SQL نیاز دارید. دستورالعملها و مثالهای این راهنما با محیط زیر اعتبارسنجی شدهاند:
- یک سرور با سیستمعامل Ubuntu 20.04، همراه با یک کاربر غیرریشه با دسترسیهای اداری و فایروال تنظیمشده با UFW، همانطور که در راهنمای تنظیم اولیه سرور برای Ubuntu 20.04 توضیح داده شده است.
- MySQL نصبشده و ایمنسازیشده روی سرور، طبق راهنمای نحوه نصب MySQL روی Ubuntu 20.04. این راهنما با یک کاربر غیرریشه MySQL اعتبارسنجی شده است که طبق مرحله ۳ آن راهنما ایجاد شده.
- آشنایی پایه با اجرای پرسوجوهای SELECT برای انتخاب دادهها از جدولها، همانطور که در راهنمای نحوه انتخاب ردیفها از جدولها در SQL توصیف شده است.
نکته: بسیاری از سیستمهای مدیریت پایگاه داده رابطهای (RDBMS) از پیادهسازی خاص خود از SQL استفاده میکنند. اگرچه دستورهای این راهنما روی بیشتر RDBMSها کار میکنند، اما استاندارد SQL تعداد محدودی از توابع را مشخص کرده است. علاوه بر این، پشتیبانی از نحو استاندارد در موتورهای مختلف پایگاه داده متفاوت است. نحو دقیق یا خروجی ممکن است اگر روی سیستمی غیر از MySQL آزمایش شود، متفاوت باشد.
همچنین به یک پایگاه داده با جدولهایی حاوی دادههای نمونه نیاز دارید تا بتوانید توابع را تمرین کنید. پیشنهاد میکنیم بخش بعدی یعنی اتصال به MySQL و تنظیم یک پایگاه داده نمونه را برای جزئیات اتصال به سرور MySQL و ایجاد پایگاه داده آزمایشی مورد استفاده در مثالهای این راهنما دنبال کنید.

اتصال به MySQL و تنظیم یک پایگاه داده نمونه
در این بخش، به سرور MySQL متصل میشوید و یک پایگاه داده نمونه ایجاد میکنید تا بتوانید مثالهای این راهنما را دنبال کنید.
اگر سیستم پایگاه داده SQL شما روی یک سروراجرا میشود، از ماشین محلی خود با استفاده از SSH به سرور متصل شوید:
ssh sammy@your_server_ip
سپس، خط فرمان MySQL را باز کنید و sammy را با نام حساب کاربری MySQL خود جایگزین کنید:
mysql -u sammy -p
یک پایگاه داده به نام bookstore ایجاد کنید:
CREATE DATABASE bookstore;
اگر پایگاه داده با موفقیت ایجاد شود، خروجی زیر را دریافت خواهید کرد:
Output
Query OK, 1 row affected (0.01 sec)
برای انتخاب پایگاه داده bookstore، دستور USE زیر را اجرا کنید:
USE bookstore;
خروجی زیر را دریافت خواهید کرد:
Output
Database changed
پس از انتخاب پایگاه داده، میتوانید جدولهای نمونهای در آن ایجاد کنید. برای این راهنما، از یک کتابفروشی خیالی استفاده میکنیم که کتابهایی از نویسندگان مختلف میفروشد.
جدول inventory دادههای مربوط به کتابهای کتابفروشی را نگه میدارد. این جدول شامل ستونهای زیر خواهد بود:
- book_id: این ستون شناسه هر کتاب را نگه میدارد، که با نوع داده int نشان داده میشود. این ستون کلید اصلی جدول خواهد بود و هر مقدار به عنوان شناسه منحصربهفرد برای ردیف مربوطه عمل میکند.
- author: این ستون نام نویسنده کتاب را نگه میدارد، که با نوع داده varchar با حداکثر ۵۰ کاراکتر بیان میشود.
- title: این ستون عنوان کتاب خریداریشده را نگه میدارد، که با نوع داده varchar با حداکثر ۲۰۰ کاراکتر بیان میشود.
- introduction_date: این ستون با استفاده از نوع داده date، تاریخ ورود هر کتاب به کتابفروشی را نگه میدارد.
- stock: این ستون تعداد کتابهای موجود در انبار کتابفروشی را با استفاده از نوع داده int نگه میدارد.
- price: این ستون قیمت خردهفروشی کتاب را با استفاده از نوع داده decimal با حداکثر ۵ رقم قبل از نقطه اعشار و ۲ رقم بعد از آن ذخیره میکند.
جدول نمونه را با دستور زیر ایجاد کنید:
CREATE TABLE inventory (
book_id int,
author varchar(50),
title varchar(200),
introduction_date date,
stock int,
price decimal(5, 2),
PRIMARY KEY (book_id)
);
اگر خروجی زیر نمایش داده شود، جدول ایجاد شده است:
Output
Query OK, 0 rows affected (0.00 sec)
پس از آن، جدول inventory را با برخی دادههای نمونه پر کنید و دستور INSERT INTO زیر را اجرا کنید:
INSERT INTO inventory
VALUES
(1, 'Oscar Wilde', 'The Picture of Dorian Gray', '2022-10-01', 4, 20.83),
(2, 'Jane Austen', 'Pride and Prejudice', '2022-10-04', 12, 42.13),
(3, 'Herbert George Wells', 'The Time Machine', '2022-09-23', 7, 21.99),
(4, 'Mary Shelley', 'Frankenstein', '2022-07-23', 9, 17.43),
(5, 'Mark Twain', 'The Adventures of Huckleberry Finn', '2022-10-01', 14, 23.15);
عملیات INSERT INTO پنج کتاب با مقادیر مشخصشده را به جدول inventory اضافه میکند. خروجی زیر نشان میدهد که تمام پنج ردیف اضافه شدهاند:
Output
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
حالا آماده هستید تا بقیه راهنما را دنبال کنید و شروع به استفاده از توابع در SQL کنید.
درک توابع SQL
توابع، عبارات نامگذاریشدهای هستند که یک یا چند مقدار را میگیرند، محاسبات یا تبدیلهایی روی دادهها انجام میدهند و یک مقدار جدید به عنوان نتیجه برمیگردانند. میتوانید توابع SQL را مشابه توابع ریاضی تصور کنید. برای مثال، تابع log(x) مقداری x را میگیرد و لگاریتم آن را برمیگرداند.
معمولاً برای بازیابی اطلاعات از یک پایگاه داده رابطهای (بدون تبدیل آن)، از پرسوجوی SELECT استفاده میکنید و از پایگاه داده میخواهید مقادیر ستونهای مورد علاقه را با مشخص کردن نام ستونها در دستور برگرداند.
برای مثال، اگر بخواهید تمام عناوین کتابها را همراه با قیمتهایشان، مرتبشده از گرانترین به ارزانترین بازیابی کنید، میتوانید دستور زیر را اجرا کنید:
SELECT title, price, introduction_date FROM inventory ORDER BY price DESC;
خروجی زیر را دریافت خواهید کرد:
Output
+------------------------------------+-------+-------------------+
| title | price | introduction_date |
+------------------------------------+-------+-------------------+
| Pride and Prejudice | 42.13 | 2022-10-04 |
| The Adventures of Huckleberry Finn | 23.15 | 2022-10-01 |
| The Time Machine | 21.99 | 2022-09-23 |
| The Picture of Dorian Gray | 20.83 | 2022-10-01 |
| Frankenstein | 17.43 | 2022-07-23 |
+------------------------------------+-------+-------------------+
5 rows in set (0.000 sec)
در این دستور، title، price و introduction_date نام ستونها هستند و در خروجی نتیجه، پایگاه داده مقادیر بدون تغییر را از آن ستونها برای هر کتاب ارائه میدهد: عنوان کامل کتاب، قیمت و تاریخ ورود کتاب به کتابفروشی.
با این حال، ممکن است بخواهید مقادیر را پس از نوعی پردازش یا دستکاری از پایگاه داده بازیابی کنید. ممکن است به قیمت کتابها گردشده به نزدیکترین دلار، عناوین کتاب به صورت حروف بزرگ، یا سال ورود بدون ماه یا روز علاقهمند باشید. اینجاست که از یک تابع استفاده میکنید.
توابع SQL را میتوان بر اساس نوع دادهای که روی آن عمل میکنند، به گروههای گستردهای دستهبندی کرد. اینها رایجترین توابع مورد استفاده هستند:
- توابع ریاضی: توابعی که روی مقادیر عددی عمل میکنند و محاسباتی مانند گرد کردن، لگاریتم، ریشه مربع یا توان انجام میدهند.
- توابع دستکاری رشته: توابعی که روی رشتهها و فیلدهای متنی عمل میکنند و تبدیلهای متنی مانند تبدیل به حروف بزرگ، کوتاه کردن یا جایگزینی کلمات در مقادیر انجام میدهند.
- توابع تاریخ و زمان: توابعی که روی فیلدهای حاوی تاریخها عمل میکنند. این توابع محاسبات و تبدیلهایی مانند افزودن تعداد روزهای به تاریخ دادهشده یا گرفتن فقط سال از تاریخ کامل انجام میدهند.
- توابع تجمعی: مورد خاصی از توابع ریاضی که روی مقادیر چندین ردیف عمل میکنند، مانند محاسبه میانگین قیمت برای تمام ردیفها.
نکته: بیشتر پایگاههای داده رابطهای، از جمله MySQL، مجموعه استاندارد توابع تعریفشده توسط استاندارد SQL را با عملیات اضافی خاص آن موتور پایگاه داده گسترش میدهند. بسیاری از توابع خارج از مجموعه استاندارد SQL در پایگاههای داده متعدد مشابه کار میکنند، در حالی که برخی دیگر به یک RDBMS خاص و ویژگیهای منحصربهفرد آن محدود هستند. میتوانید مستندات پایگاه داده مورد نظر خود را برای یادگیری بیشتر در مورد توابع ارائهشده بررسی کنید. در مورد MySQL، میتوانید در مرجع توابع و عملگرهای داخلی اطلاعات بیشتری بیابید.
مثال زیر نحو کلی استفاده از یک تابع خیالی و غیرواقعی به نام EXAMPLE را برای تغییر نتایج مقادیر price در پایگاه داده کتابفروشی با استفاده از پرسوجوی SELECT نشان میدهد:
SELECT EXAMPLE(price) AS new_price FROM inventory;
تابع (EXAMPLE) نام ستون (price) را به عنوان آرگومان در پرانتز میگیرد. این بخش از پرسوجو به پایگاه داده میگوید که تابع EXAMPLE را روی مقادیر ستون price اجرا کند و نتایج این عملیات را برگرداند. عبارت AS new_price به پایگاه داده میگوید که یک نام موقت (new_price) برای مقادیر محاسبهشده در طول پرسوجو اختصاص دهد. با این کار، میتوانید نتایج تابع را در خروجی تمایز دهید و از مقادیر محاسبهشده با استفاده از شرطهای WHERE و ORDER BY استفاده کنید.
در بخش بعدی، از توابع ریاضی برای انجام محاسبات رایج استفاده خواهید کرد.
استفاده از توابع ریاضی
توابع ریاضی روی مقادیر عددی مانند قیمت کتاب یا تعداد کتابهای موجود در انبار در پایگاه داده نمونه عمل میکنند. آنها میتوانند برای انجام محاسباتی در پایگاه داده استفاده شوند تا نتایج را با نیازهای شما تطبیق دهند.
گرد کردن یکی از رایجترین کاربردهای توابع ریاضی در SQL است. فرض کنید نیاز دارید قیمت تمام کتابها را گردشده به نزدیکترین دلار کامل بازیابی کنید. برای این کار، میتوانید از تابع ROUND استفاده کنید که عملیات گرد کردن را انجام میدهد.
دستور زیر را امتحان کنید:
SELECT title, price, ROUND(price) AS rounded_price FROM inventory;
خروجی زیر نمایش داده خواهد شد:
Output
+------------------------------------+-------+---------------+
| title | price | rounded_price |
+------------------------------------+-------+---------------+
| The Picture of Dorian Gray | 20.83 | 21 |
| Pride and Prejudice | 42.13 | 42 |
| The Time Machine | 21.99 | 22 |
| Frankenstein | 17.43 | 17 |
| The Adventures of Huckleberry Finn | 23.15 | 23 |
+------------------------------------+-------+---------------+
5 rows in set (0.000 sec)
پرسوجو مقادیر ستونهای title و price را بدون تغییر انتخاب میکند، همراه با یک ستون موقت rounded_price که نتایج تابع ROUND(price) را نشان میدهد. این تابع یک آرگومان میگیرد، نام ستون (در این مورد price)، و مقادیر آن ستون در جدول را به نزدیکترین مقدار صحیح گرد میکند.
تابع گرد کردن میتواند آرگومان اضافی برای تعریف تعداد اعشار گرد کردن را نیز بپذیرد، و همچنین عملیات حسابی به جای نام یک ستون. برای مثال، پرسوجوی زیر را اجرا کنید:
SELECT title, price, ROUND(price * stock, 1) AS stock_price FROM inventory;
خروجی زیر را دریافت خواهید کرد:
Output
+------------------------------------+-------+-------+-------------+
| title | stock | price | stock_price |
+------------------------------------+-------+-------+-------------+
| The Picture of Dorian Gray | 4 | 20.83 | 83.3 |
| Pride and Prejudice | 12 | 42.13 | 505.6 |
| The Time Machine | 7 | 21.99 | 153.9 |
| Frankenstein | 9 | 17.43 | 156.9 |
| The Adventures of Huckleberry Finn | 14 | 23.15 | 324.1 |
+------------------------------------+-------+-------+-------------+
5 rows in set (0.000 sec)
اجرای ROUND(price * stock, 1) ابتدا قیمت تک کتاب را در تعداد موجودی ضرب میکند و سپس قیمت نتیجه را به اولین رقم اعشار گرد میکند. نتیجه در ستون موقت stock_price ارائه میشود.
سایر توابع ریاضی داخلی در MySQL شامل توابع مثلثاتی، ریشه مربع، توان، لگاریتم و اکسپونانسیل هستند. میتوانید در راهنمای نحوه استفاده از عبارات ریاضی و توابع تجمعی در SQL اطلاعات بیشتری در مورد استفاده از توابع ریاضی بیابید.
در بخش بعدی، متن را از پایگاه داده با استفاده از توابع SQL دستکاری خواهید کرد.
استفاده از توابع دستکاری رشته
توابع دستکاری رشته در SQL به شما امکان میدهند مقادیر ذخیرهشده در ستونهای حاوی متن را هنگام پردازش پرسوجوی SQL تغییر دهید. آنها میتوانند برای تبدیل حروف، اتصال دادهها از چندین ستون، یا انجام عملیات جستجو و جایگزینی استفاده شوند.
با بازیابی تمام عناوین کتابها به صورت حروف کوچک شروع کنید. دستور زیر را اجرا کنید:
SELECT LOWER(title) AS title_lowercase FROM inventory;
خروجی زیر نمایش داده خواهد شد:
Output
+------------------------------------+
| title_lowercase |
+------------------------------------+
| the picture of dorian gray |
| pride and prejudice |
| the time machine |
| frankenstein |
| the adventures of huckleberry finn |
+------------------------------------+
5 rows in set (0.001 sec)
تابع SQL به نام LOWER یک آرگومان میگیرد و محتوای آن را به حروف کوچک تبدیل میکند. از طریق مستعار ستون AS title_lowercase، دادههای نتیجه در ستون موقت title_lowercase ارائه میشود.
حالا تمام نویسندگان را این بار به صورت حروف بزرگ بازیابی کنید. پرسوجوی SQL زیر را امتحان کنید:
SELECT UPPER(author) AS author_uppercase FROM inventory;
خروجی زیر را دریافت خواهید کرد:
Output
+----------------------+
| author_uppercase |
+----------------------+
| OSCAR WILDE |
| JANE AUSTEN |
| HERBERT GEORGE WELLS |
| MARY SHELLEY |
| MARK TWAIN |
+----------------------+
5 rows in set (0.000 sec)
به جای تابع LOWER، از تابع UPPER استفاده کردید که مشابه عمل میکند اما متن را به حروف بزرگ تبدیل میکند. هر دو تابع میتوانند برای تضمین سازگاری حروف در هنگام بازیابی دادهها استفاده شوند.
تابع مفید دیگری برای دستکاری رشته، CONCAT است که چندین آرگومان حاوی مقادیر متنی را میگیرد و آنها را به هم متصل میکند. سعی کنید نویسندگان و عناوین کتاب را در یک ستون واحد ترکیب کنید. برای این کار، دستور زیر را اجرا کنید:
SELECT CONCAT(author, ': ', title) AS full_title FROM inventory;
این دستور خروجی زیر را برمیگرداند:
Output
+------------------------------------------------+
| full_title |
+------------------------------------------------+
| Oscar Wilde: The Picture of Dorian Gray |
| Jane Austen: Pride and Prejudice |
| Herbert George Wells: The Time Machine |
| Mary Shelley: Frankenstein |
| Mark Twain: The Adventures of Huckleberry Finn |
+------------------------------------------------+
5 rows in set (0.001 sec)
تابع CONCAT چندین رشته را به هم متصل کرد و با سه آرگومان اجرا شد. اولین، author، به ستون نویسنده اشاره دارد که نام نویسندگان را نگه میدارد. دوم، ‘: ‘، یک مقدار رشته دلخواه برای جداسازی نویسندگان و عناوین کتاب با دو نقطه است. آخرین، title، به ستون حاوی عناوین کتاب اشاره دارد.
در نتیجه این پرسوجو، نویسندگان و عناوین در یک ستون موقت به نام full_title توسط موتور پایگاه داده مستقیماً متصل میشوند.
سایر توابع رشته داخلی در MySQL شامل توابع برای جستجو و جایگزینی رشتهها، بازیابی زیررشتهها، پدینگ و کوتاه کردن مقادیر رشته، و اعمال عبارات منظم هستند. میتوانید در راهنمای نحوه دستکاری دادهها با توابع CAST و عبارات اتصال در SQL اطلاعات بیشتری در مورد استفاده از توابع SQL برای اتصال چندین مقدار بیابید. همچنین میتوانید به توابع و عملگرهای رشته در مستندات MySQL مراجعه کنید.
در بخش بعدی، از توابع SQL برای دستکاری تاریخها از پایگاه داده استفاده خواهید کرد.
استفاده از توابع تاریخ و زمان
توابع تاریخ و زمان در SQL به شما امکان میدهند مقادیر ذخیرهشده در ستونهای حاوی تاریخها و زمانتمبرها را هنگام پردازش پرسوجوی SQL دستکاری کنید. آنها میتوانند برای استخراج بخشهایی از اطلاعات تاریخ، انجام عملیات حسابی تاریخ، یا قالببندی تاریخها و زمانتمبرها به فرمتهای خروجی مورد نیاز استفاده شوند.
فرض کنید نیاز دارید تاریخ ورود کتاب را به صورت جداگانه به سال، ماه و روز تقسیم کنید، به جای داشتن یک ستون تاریخ واحد در خروجی.
دستور زیر را اجرا کنید:
SELECT introduction_date, YEAR(introduction_date) as year, MONTH(introduction_date) as month, DAY(introduction_date) as day FROM inventory;
خروجی زیر را دریافت خواهید کرد:
Output
+-------------------+------+-------+------+
| introduction_date | year | month | day |
+-------------------+------+-------+------+
| 2022-10-01 | 2022 | 10 | 1 |
| 2022-10-04 | 2022 | 10 | 4 |
| 2022-09-23 | 2022 | 9 | 23 |
| 2022-07-23 | 2022 | 7 | 23 |
| 2022-10-01 | 2022 | 10 | 1 |
+-------------------+------+-------+------+
5 rows in set (0.000 sec)
این دستور SQL از سه تابع جداگانه استفاده کرد: YEAR، MONTH و DAY. هر تابع نام ستونی که تاریخها در آن ذخیره شدهاند را به عنوان آرگومان میگیرد و فقط یک بخش از تاریخ کامل را استخراج میکند: سال، ماه یا روز، به ترتیب. با استفاده از این توابع، میتوانید به قطعات جداگانه تاریخ در پرسوجوهای SQL دسترسی پیدا کنید.
تابع مفید دیگری برای دستکاری تاریخ، DATEDIFF است که به شما امکان میدهد تعداد روزهای بین دو تاریخ را بازیابی کنید. حالا، بررسی کنید که چند روز از تاریخ ورود هر کتاب تا تاریخ فعلی گذشته است.
پرسوجوی زیر را اجرا کنید:
SELECT introduction_date, DATEDIFF(introduction_date, CURRENT_DATE()) AS days_since FROM inventory;
خروجی زیر نمایش داده خواهد شد:
Output
+-------------------+------------+
| introduction_date | days_since |
+-------------------+------------+
| 2022-10-01 | -30 |
| 2022-10-04 | -27 |
| 2022-09-23 | -38 |
| 2022-07-23 | -100 |
| 2022-10-01 | -30 |
+-------------------+------------+
5 rows in set (0.000 sec)
تابع DATEDIFF دو آرگومان میگیرد: تاریخ شروع و تاریخ پایان. تابع DATEDIFF تعداد روزهای جداکننده این دو نقطه زمانی را محاسبه میکند. نتیجه ممکن است منفی باشد اگر تاریخ پایان زودتر بیاید. در این مثال، آرگومان اول نام ستون introduction_date است که تاریخها را در جدول inventory نگه میدارد. آرگومان دوم تابع دیگری به نام CURRENT_DATE است که تاریخ فعلی سیستم را نشان میدهد. اجرای این پرسوجو تعداد روزهای بین این دو نقطه زمانی را بازیابی میکند و نتایج را در ستون موقت days_since قرار میدهد.
نکته: DATEDIFF بخشی از مجموعه رسمی توابع استاندارد SQL نیست. در حالی که بسیاری از پایگاههای داده از این تابع پشتیبانی میکنند، نحو اغلب بین موتورهای مختلف پایگاه داده متفاوت است. این مثال از نحو بومی MySQL پیروی میکند.
سایر توابع دستکاری تاریخ داخلی در MySQL شامل افزودن و کم کردن بازههای تاریخ و زمان، قالببندی تاریخها برای فرمتهای زبانی مختلف، بازیابی نام روز و ماه، یا ایجاد مقادیر تاریخ جدید هستند. میتوانید در راهنمای نحوه کار با تاریخها و زمانها در SQL اطلاعات بیشتری در مورد کار با تاریخها بیابید. همچنین میتوانید به توابع تاریخ و زمان در مستندات MySQL مراجعه کنید.
در بخش بعدی، نحوه استفاده از توابع تجمعی را خواهید آموخت.
استفاده از توابع تجمعی
در تمام مثالهای قبلی، از توابع SQL برای اعمال تبدیلها یا محاسبات روی مقادیر ستونهای جداگانه در یک ردیف واحد استفاده کردید، که هر کدام یک کتاب در کتابفروشی را نشان میدهد. SQL راهی برای انجام محاسبات ریاضی روی چندین ردیف فراهم میکند تا به شما کمک کند اطلاعات تجمعی در مورد کل مجموعه داده را پیدا کنید.
توابع تجمعی اصلی در SQL شامل موارد زیر هستند:
- AVG برای میانگین مقادیری که محاسبات روی آنها انجام میشود.
- COUNT برای تعداد مقادیری که محاسبات روی آنها انجام میشود.
- MAX برای حداکثر مقدار.
- MIN برای حداقل مقدار.
- SUM برای مجموع تمام مقادیر.
میتوانید چندین تابع تجمعی را در پرسوجوی SELECT خود بگنجانید. فرض کنید بخواهید تعداد کتابهای فهرستشده در کتابفروشی، حداکثر قیمت هر کتاب موجود، و میانگین قیمت در کل کاتالوگ را بررسی کنید. برای این کار، دستور زیر را اجرا کنید:
SELECT COUNT(title) AS count, MAX(price) AS max_price, AVG(price) AS avg_price FROM inventory;
این دستور خروجی زیر را برمیگرداند:
Output
+-------+-----------+-----------+
| count | max_price | avg_price |
+-------+-----------+-----------+
| 5 | 42.13 | 25.106000 |
+-------+-----------+-----------+
1 row in set (0.001 sec)
پرسوجوی بالا از سه تابع تجمعی همزمان استفاده میکند. تابع COUNT ردیفهایی را که پرسوجو بررسی میکند، میشمارد. در این مثال، title به عنوان آرگومان منتقل شده است، اما از آنجایی که تعداد ردیفها برای هر ستونی که بررسی میشود یکسان خواهد بود، میتوانید از هر نام ستون دیگری به عنوان آرگومان تابع استفاده کنید. تابع MAX حداکثر مقدار را از ستون price محاسبه میکند: اینجا نام ستون مهم است، زیرا محاسبه روی مقادیر آن ستون انجام میشود. آخرین تابع AVG است که میانگین تمام قیمتها را از ستون price محاسبه میکند.
استفاده از توابع تجمعی به این شیوه منجر به بازگشت یک ردیف واحد توسط پایگاه داده با ستونهای موقت نشاندهنده مقادیر محاسبات تجمعی میشود. ردیفهای منبع برای محاسبه داخلی استفاده میشوند اما از طریق پرسوجو برگردانده نمیشوند. در این مثال، از توابع تجمعی برای محاسبه مقادیر آماری از کل جدول inventory همزمان استفاده کردید و تمام ردیفها را برای خلاصه در نظر گرفتید.
با SQL، همچنین میتوان ردیفهای جدول را به گروهها تقسیم کرد و سپس مقادیر تجمعی را برای آن گروهها جداگانه محاسبه کرد. برای مثال، میتوانید میانگین قیمت کتابها را بر اساس نویسندگان مختلف محاسبه کنید تا بفهمید کدام نویسنده عناوین گرانتری منتشر میکند. میتوانید در راهنمای نحوه استفاده از GROUP BY و ORDER BY در SQL اطلاعات بیشتری در مورد گروهبندی ردیفها برای چنین محاسباتی بیابید. همچنین میتوانید جزئیات بیشتری در مورد استفاده از تجمعیها را در راهنمای نحوه استفاده از عبارات ریاضی و توابع تجمعی در SQL بررسی کنید.
جمع بندی
با دنبال کردن این راهنما، آموختید که توابع SQL چیستند و چگونه از آنها برای دستکاری اعداد، رشتهها و تاریخها استفاده کنید. از ROUND برای گرد کردن مقادیر عددی، CONCAT برای اتصال چندین ستون به یک، و DATEDIFF برای محاسبه تعداد روزهای بین دو نقطه زمانی استفاده کردید. در نهایت، از توابع تجمعی مانند COUNT، SUM یا AVG برای تولید خلاصهها روی چندین ردیف استفاده کردید.
میتوانید از توابع برای انتقال بخشی از دستکاری و محاسبه دادهها به موتور پایگاه داده استفاده کنید. این راهنما فقط اصول استفاده از توابع برای این را پوشش داد. برای بازیابی و تحلیل دادهها به روشهای قویتر، میتوانید توابع را با پرسوجوهای شرطی با استفاده از شرط WHERE و گروهبندی توصیفشده در راهنمای نحوه استفاده از GROUP BY و ORDER BY در SQL ترکیب کنید.
اگرچه دستورهای نشاندادهشده اینجا روی بیشتر پایگاههای داده رابطهای کار میکنند، اما به خاطر داشته باشید که هر پایگاه داده SQL پیادهسازی خاص خود از زبان را دارد. باید مستندات رسمی DBMS خود را برای توصیف کامل هر دستور و مجموعه کامل گزینههای آن بررسی کنید.
اگر میخواهید در مورد مفاهیم مختلف پیرامون زبان SQL و کار با آن بیشتر بدانید، پیشنهاد میکنیم سایر راهنماهای سری نحوه استفاده از SQL را بررسی کنید.