چه شما یک توسعهدهنده SQL با تجربه باشید یا تازه کار در دنیای پایگاههای داده، این راهنمای جامع، موضوعات پیشرفته SQL را کاوش میکند و مهارتهای کوئری پایگاه داده شما را ارتقا میدهد. این مفاهیم شما را با دانش لازم برای مدیریت چالشهای پیچیده داده به طور مطمئن مجهز میکند.
از طریق توضیحات واضح و مثالهای عملی، شما SQL را بهتر درک خواهید کرد و نحوه بهرهبرداری مؤثر از آن را خواهید آموخت. آماده شوید تا به intricacies SQL غوطهور شوید و پتانسیل کامل تواناییهای دستکاری و تحلیل داده خود را آزاد کنید.
SQL پیشرفته چیست؟
SQL پیشرفته به مفاهیم و تکنیکهایی اشاره دارد که فراتر از مهارتهای پایهای کوئری داده از پایگاههای داده رابطهای با استفاده از زبان کوئری ساختیافته است. در حالی که SQL پایه شما را با عملیات استاندارد مانند فیلتر کردن، مرتبسازی و تغییر جداول مجهز میکند، SQL پیشرفته عمیقتر میرود و قابلیتهایی مانند توابع پنجرهای، توابع تجمعی، تکنیکهای pivot و بسیاری دیگر را ارائه میدهد.
SQL پیشرفته به شما امکان مدیریت موارد زیر را میدهد:
دستکاری پیچیده داده: شما میتوانید به راحتی تحولات پیچیده داده را با تکنیکهایی مانند pivot و unpivot مدیریت کنید. این تکنیکها به شما اجازه میدهند داده را بین فرمتهای مبتنی بر ردیف و مبتنی بر ستون تغییر شکل دهید تا تحلیل بهتری انجام شود.
اتوماسیون و قابلیت استفاده مجدد: مفاهیمی مانند رویههای ذخیرهشده و triggers به شما اجازه میدهند وظایف تکراری را اتوماتیک کنید و قابلیت استفاده مجدد کد را ترویج دهید. رویههای ذخیرهشده بلوکهای کد SQL از پیش نوشتهشده هستند که میتوان با پارامترها از آنها استفاده مجدد کرد، در حالی که triggers اشیاء پایگاه داده هستند که بر اساس رویدادها، اقدامات خاصی را به طور خودکار اجرا میکنند.
مفاهیم SQL پیشرفته چیست؟
در اینجا ۱۵ مفهوم پیشرفته SQL آورده شده است که به تحول کوئریهای شما و افزایش تخصص پایگاه دادهتان کمک میکند:
این مفاهیم شامل توابع پیشرفتهای هستند که محاسبات پیچیده، تحولات داده و تجمیعها را امکانپذیر میسازند.
سابکوئریها
سابکوئریها، که به عنوان کوئریهای تو در تو شناخته میشوند، ویژگی قدرتمندی از SQL پیشرفته هستند که به شما اجازه میدهند یک دستور کامل را درون دستور SQL دیگری جاسازی کنید. با شکستن بازیابی داده پیچیده به سابکوئریهایی کوچکتر، منطق پشت کد SQL شما بسیار آسانتر برای درک میشود.
شما میتوانید سابکوئریها را در بندهای مختلف کوئری بیرونی، از جمله SELECT، FROM، WHERE و HAVING استفاده کنید. در زیر مثالی از استفاده از سابکوئری برای یافتن مشتریانی که در ماه گذشته خرید کردهاند آورده شده است.
SELECT customer_name
FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
);
اتصالات (Joins)
اتصالات مفهوم اساسی برای کار با پایگاههای داده رابطهای هستند. آنها به عنوان پل بین جداول عمل میکنند و به شما اجازه میدهند دادهها را از چندین جدول بر اساس روابط تعریفشده ترکیب کنید. انواع مختلفی از اتصالات وجود دارد، مانند INNER، FULL، RIGHT و LEFT.
در اینجا،
LEFT JOIN شامل تمام ردیفهای جدول چپ و ردیفهای منطبق از جدول راست است. مجموعه نتایج برای ردیفهایی که ردیف منطبقی در سمت راست ندارند، NULL خواهد بود. برعکس، RIGHT JOIN شامل تمام رکوردهای ردیفهای جدول راست و ردیفهای منطبق از چپ است در حالی که ورودیهای منطبقنشده از سمت چپ را به عنوان NULL باقی میگذارد. INNER JOIN اتصال پیشفرض است که فقط ردیفهایی را برمیگرداند که شرط اتصال در هر دو جدول برقرار باشد. FULL JOIN نتایج اتصال چپ و راست را ترکیب میکند و شامل تمام ردیفهای هر دو جدول میشود، حتی اگر تطبیقی در جدول دیگر وجود نداشته باشد.
SELECT table1.column1,
table1.column2,
table2.column1,
....
FROM table1
INNER JOIN table2
ON table1.matching_column = table2.matching_column;
-- table1: First table.
-- table2: Second table
-- matching_column: Column common to both the tables.
Union
عملگر UNION نتایج چندین دستور SELECT را در یک مجموعه نتایج واحد و یکپارچه ترکیب میکند. به طور پیشفرض، تمام ردیفهای تکراری را بر اساس مقادیر در تمام ستونهای انتخابشده حذف میکند.
در مثالی که در زیر ذکر شده، کوئری SQL نام مشتریان را از دو زیرمجموعه جدول مشتریان بر اساس کشورهایشان ترکیب میکند.
SELECT customer_name
FROM customers
WHERE country = 'USA'
UNION
SELECT customer_name
FROM customers
WHERE country = 'Canada';
توابع تجمعی
تابع تجمعی در SQL پیشرفته دادهها را با انجام محاسبات روی گروههای مقادیر خلاصه میکند و یک نتیجه واحد برمیگرداند، اغلب به صورت یک مقدار معنادار واحد. اغلب با بند GROUP BY برای دستهبندی و تحلیل داده از دیدگاه گستردهتر استفاده میشود. توابع تجمعی رایج COUNT، SUM، AVG، MIN و MAX هستند.
برای مثال، تابع تجمعی زیر مبلغ کل فروش هر محصول را محاسبه میکند.
SELECT product_category,
SUM(order_amount) AS total_sales
FROM orders
GROUP BY product_category;
توابع پنجرهای
توابع پنجرهای عملیات خاصی در SQL هستند که به شما اجازه میدهند محاسبات یا عملیات را روی گروهی از ردیفها به طور همزمان انجام دهید، با در نظر گرفتن رابطه آنها درون گروه. توابع پنجرهای رایج شامل LAG، RANK، DENSERANK، ROWNUMBER و بسیاری دیگر هستند.
برای مثال، تابع ROW_NUMBER میتواند برای رتبهبندی مشتریان بر اساس حداکثر مبلغ سفارششان استفاده شود.
SELECT customer_name,
order_amount,
ROW_NUMBER() OVER (ORDER BY order_amount DESC) AS rank
FROM orders;
عبارات جدول مشترک (CTEs)
CTEs مجموعههای نتایج موقتی نامگذاریشده هستند که با یک دستور SQL واحد، مانند SELECT، DELETE، INSERT یا CREATE VIEW تعریف میشوند. این CTEها به عنوان جداول مجازی عمل میکنند که میتوان در همان دستور برای پردازش بیشتر به آنها اشاره کرد.
برای مثال، CTEها میتوانند برای محاسبه مبلغ کل سفارش هر مشتری استفاده شوند.
WITH customer_orders AS (
SELECT customer_id, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer_id
)
SELECT customers.customer_name, customer_orders.total_amount
FROM customers
INNER JOIN customer_orders
ON customers.customer_id = customer_orders.customer_id;
Pivoting
Pivoting تکنیکی برای تبدیل داده از فرمت مبتنی بر ردیف به فرمت مبتنی بر ستون است. مثال زیر کوئری pivoting را برای دانستن کل فروش هر محصول در ماههای مختلف ارائه میدهد.
sql
SELECT product,
SUM(amount) AS Jan_Sales,
SUM(amount) AS Feb_Sales,
SUM(amount) AS Mar_Sales
FROM sales
PIVOT (
SUM(amount) FOR month IN ('Jan', 'Feb’, 'Mar')
) AS pivoted_data;
کوئریهای بازگشتی
کوئریهای بازگشتی در SQL تکنیک قدرتمندی برای کار با دادههای سلسلهمراتبی هستند. برخلاف کوئریهای SQL سنتی که داده را در یک پاس پردازش میکنند، کوئریهای بازگشتی میتوانند خود را به طور مکرر فراخوانی کنند تا شرط خاصی برآورده شود.
کوئریهای بازگشتی معمولاً با استفاده از CTEها برای دستیابی به نتیجه مورد نظر پیادهسازی میشوند. مثال زیر از کوئری بازگشتی برای بازیابی تمام کارکنان و مدیرانشان استفاده میکند و ساختار گزارشدهی را نشان میدهد.
WITH EmployeeHierarchy (id, name, manager_id, level) AS (
-- Base Case: Get all top-level employees (with no manager)
SELECT id, name, manager_id, 1 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive Case: Find employees who report to someone in the hierarchy
SELECT e.id, e.name, e.manager_id, h.level + 1
FROM employees e
INNER JOIN EmployeeHierarchy h ON e.manager_id = h.id
)
SELECT * FROM EmployeeHierarchy;
دستکاری رشته
دستکاری رشته، جنبه حیاتی پیشپردازش داده و پاکسازی داده، به مجموعهای از توابع قدرتمند اشاره دارد که به شما امکان تغییر، استخراج و تحول دادههای متنی ذخیرهشده در پایگاه دادهتان را میدهد. توابعی مانند CONCAT، SUBSTRING و REPLACE معمولاً برای وظایفی مانند اتصال رشتهها، استخراج زیررشتهها و جایگزینی کاراکترها استفاده میشوند.
در اینجا مثالی از تابع CONCAT برای ترکیب نام و نام خانوادگی آورده شده است:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
توابع تاریخ و زمان
SQL پیشرفته مجموعه غنیای از توابع برای دستکاری و کار با زمان و تاریخ ارائه میدهد. توابعی مانند DATEPART برای استخراج بخشهای یک تاریخ استفاده میشوند، DATEADD تعداد مشخصی روز به تاریخ اضافه میکند، و DATEDIFF تفاوت بین دو تاریخ را در واحدهای مشخص محاسبه میکند، در حالی که DATEFORMAT تاریخها را طبق رشته فرمت مشخص مرتب میکند.
برای مثال،
SELECT DATEPART(MONTH, order_date) AS order_month
FROM orders;
دستورات Case
دستورات Case عباراتی برای پیادهسازی منطق شرطی درون کوئریهایتان هستند. آنها به شما اجازه میدهند شرایط مختلف را ارزیابی کنید و مقادیر متناظر را برگردانید، و ساختار if-then-else را تقلید میکنند.
در مثالی که در زیر داده شده، دستور SQL مشتریان را بر اساس مبلغ کل سفارششان دستهبندی میکند.
SELECT customer_name,
CASE
WHEN total_order_amount >= 1000 THEN 'High Value'
WHEN total_order_amount >= 500 THEN 'Medium Value'
ELSE 'Low Value'
END AS customer_category
FROM customers;
توابع کاربر-تعریفشده
توابع کاربر-تعریفشده (UDFs) در SQL به شما اجازه میدهند عملکرد سیستم پایگاه دادهتان را با ایجاد توابع سفارشی گسترش دهید. این توابع مانند ماژولهای قابل استفاده مجدد عمل میکنند که ورودی (پارامترها) را میپذیرند، عملیات خاصی انجام میدهند و نتیجه را برمیگردانند، مشابه توابع در زبانهای برنامهنویسی.
دو نوع مختلف UDF وجود دارد—توابع اسکالر و توابع مبتنی بر جدول. جایی که
توابع اسکالر رایجترین نوع هستند و یک مقدار اسکالر واحد (عدد، رشته، تاریخ و غیره) را به عنوان خروجی برمیگردانند. توابع مبتنی بر جدول یک مجموعه نتایج کامل مانند جدول مجازی برمیگردانند و به شما امکان دستکاری داده پیچیدهتر را میدهند. در مثالی که در زیر فهرست شده، UDF calculate_discount() قیمت تخفیفدار یک محصول را با توجه به قیمت اصلی و نرخ تخفیف محاسبه میکند.
CREATE FUNCTION calculate_discount(price DECIMAL(10,2), discount_rate INT)
RETURNS DECIMAL(10,2)
BEGIN
DECLARE discount DECIMAL(10,2);
SET discount = price * (discount_rate / 100.0);
RETURN price - discount;
END;
جداول موقتی
جداول موقتی داده را به طور دائمی در پایگاه داده ذخیره نمیکنند؛ در عوض، به طور موقت وجود دارند. برخلاف جداول دائمی، جداول موقتی پس از پایان جلسه یا حذف دستی وجود ندارند. شما همچنین میتوانید رکوردها را در جداول موقتی درج، بهروزرسانی و حذف کنید، مشابه جداول دائمی.
برای مثال،
CREATE TEMPORARY TABLE temp_customer_orders (
customer_id INT,
total_order_amount DECIMAL(10,2),
PRIMARY KEY (customer_id)
);
INSERT INTO temp_customer_orders
SELECT customer_id, SUM(order_amount) AS total_order_amount
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-04-03' -- Current date
GROUP BY customer_id;
SELECT
c.customer_name,
COALESCE(t.total_order_amount / COUNT(o.order_id), 0.00) AS average_order_value
FROM customers c
LEFT JOIN temp_customer_orders t ON c.customer_id = t.customer_id
LEFT JOIN orders o ON c.customer_id = o.customer_id -- For calculating order count
WHERE o.order_date BETWEEN '2024-01-01' AND '2024-04-03' -- Current date
GROUP BY c.customer_id, c.customer_name, t.total_order_amount;
فیلتر کوئری خارجی
فیلترهای کوئری خارجی، predicate pushdown یا filter pushdown تکنیکهای بهینهسازی برای بهبود عملکرد کوئری هستند. آنها از قدرت پردازشی منابع داده خارجی (مانند پایگاه داده یا برنامه دیگر) برای فیلتر کردن داده قبل از انتقال به سرور SQL مرکزی استفاده میکنند.
در مثالی که در زیر فهرست شده، فیلتر کوئری خارجی (رویه ذخیرهشده در این مورد) داده را از سیستم خارجی بازیابی میکند.
CREATE VIEW active_customers AS
SELECT customer_id, customer_name
FROM crm_customers
WHERE is_active = 1;
SELECT
o.order_id,
o.customer_id,
c.customer_name
FROM orders o
INNER JOIN active_customers c ON o.customer_id = c.customer_id
WHERE o.customer_id IN (
SELECT customer_id
FROM temp_gold_customers
);
بهینهسازی کوئری
تکنیکهای بهینهسازی کوئری شامل روشهایی مانند ایندکسگذاری، انتخاب استراتژی اتصال مناسب و اجتناب از بازیابی داده غیرضروری است. این استراتژیها عملکرد کوئریهای SQL را با تحلیل برنامههای اجرا و انتخاب استراتژیهای اجرا کارآمد بهبود میبخشند.
برای مثال، این قطعه کد یک ایندکس برای بهینهسازی عملکرد بالقوه ایجاد میکند. سپس کوئری را اجرا میکند که ممکن است از آن ایندکس سود ببرد اگر به ساختار جدول و الگوهای کوئری برنامه خاص شما اعمال شود.
CREATE INDEX IF NOT EXISTS idx_product_category_stock (category_id, quantity);
-- Assuming you don't already have this index
SELECT *
FROM products
WHERE category_id = 1
AND quantity > 0;
دستکاری داده
دستکاری داده جنبه حیاتی کار با پایگاههای داده است و مهارتهای پیشرفته SQL برای انجام وظایف دستکاری داده پیچیده ضروری هستند. این شامل استفاده از توابع پنجرهای، مانند ROWNUMBER()، RANK() و LAG()، برای دستکاری و تحول داده است. برای مثال، تابع ROWNUMBER() میتواند شمارههای منحصربهفرد را به ردیفها درون یک پارتیشن اختصاص دهد و شناسایی و مدیریت رکوردهای خاص را آسانتر کند.
عبارات جدول مشترک (CTEs) و کوئریهای بازگشتی همچنین ابزارهای قدرتمندی برای دستکاری داده هستند. CTEها به شما اجازه میدهند مجموعههای نتایج موقتی ایجاد کنید که در همان دستور SQL قابل اشاره باشند و کوئریهای پیچیده را ساده کنند. کوئریهای بازگشتی، از سوی دیگر، به شما امکان پردازش دادههای سلسلهمراتبی را با اجرای مکرر کوئری تا برآورده شدن شرط مشخص میدهند.
در اینجا مثالی از استفاده از تابع LAG() برای مقایسه ارقام فروش ماه جاری با ماه قبل آورده شده است:
WITH MonthlySales AS (
SELECT
product_id,
sales_month,
SUM(sales_amount) AS total_sales
FROM sales
GROUP BY product_id, sales_month
)
SELECT
product_id,
sales_month,
total_sales,
LAG(total_sales, 1) OVER (PARTITION BY product_id ORDER BY sales_month) AS previous_month_sales
FROM MonthlySales;
با بهرهگیری از این تکنیکهای پیشرفته SQL، شما میتوانید مجموعههای داده بزرگ را به طور کارآمد دستکاری و تحول دهید و استخراج بینشها و تصمیمگیریهای آگاهانه را آسانتر کنید.
تحول داده
تحول داده فرآیند تبدیل داده از یک فرمت به فرمت دیگر است و مهارتهای پیشرفته SQL برای انجام وظایف تحول داده پیچیده ضروری هستند. این شامل استفاده از توابع تجمعی، مانند SUM()، COUNT() و AVG()، برای تحول و خلاصهسازی داده است. توابع تجمعی به شما اجازه میدهند محاسبات را روی مجموعهای از مقادیر انجام دهید و یک نتیجه واحد برگردانید که برای تولید گزارشهای خلاصه بسیار مفید است.
منطق شرطی، که از طریق دستورات CASE پیادهسازی میشود، ابزار قدرتمند دیگری برای تحول داده است. آن به شما اجازه میدهد تحولات مختلف را بر اساس شرایط خاص اعمال کنید و کنترل دقیقتری روی دادهتان داشته باشید.
برای مثال، دستور SQL زیر از تابع SUM() برای محاسبه کل فروش هر دستهبندی محصول و دستور CASE برای دستهبندی محصولات بر اساس کل فروششان استفاده میکند:
SELECT
product_category,
SUM(sales_amount) AS total_sales,
CASE
WHEN SUM(sales_amount) >= 10000 THEN 'High Sales'
WHEN SUM(sales_amount) >= 5000 THEN 'Medium Sales'
ELSE 'Low Sales'
END AS sales_category
FROM sales
GROUP BY product_category;
با استفاده از این تکنیکهای پیشرفته SQL، شما میتوانید داده را تحول و دستکاری کنید تا نیازهای تجاری خاص را برآورده کند و تحلیل و استخراج بینش از مجموعههای داده بزرگ را آسانتر کند.
جمعهای در حال اجرا
جمعهای در حال اجرا نیاز رایجی در بسیاری از پایگاههای داده هستند و مهارتهای پیشرفته SQL برای محاسبه جمعهای در حال اجرا به طور کارآمد ضروری هستند. این شامل استفاده از توابع پنجرهای، مانند SUM() و ROW_NUMBER()، برای محاسبه جمعهای در حال اجرا است. توابع پنجرهای به شما اجازه میدهند محاسبات را روی مجموعهای از ردیفهای جدول که به ردیف جاری مرتبط هستند انجام دهید و راه قدرتمندی برای تولید جمعهای در حال اجرا فراهم میکنند.
عبارات جدول مشترک (CTEs) و کوئریهای بازگشتی همچنین میتوانند برای محاسبه جمعهای در حال اجرا استفاده شوند. CTEها راهی برای شکستن کوئریهای پیچیده به بخشهای سادهتر فراهم میکنند، در حالی که کوئریهای بازگشتی به شما امکان پردازش تکراری داده را میدهند.
در اینجا مثالی از استفاده از تابع SUM() به عنوان تابع پنجرهای برای محاسبه جمعهای در حال اجرا برای مبالغ فروش آورده شده است:
SELECT
sales_date,
sales_amount,
SUM(sales_amount) OVER (ORDER BY sales_date) AS running_total
FROM sales
ORDER BY sales_date;
با بهرهگیری از این تکنیکهای پیشرفته SQL، شما میتوانید جمعهای در حال اجرا را سریع و کارآمد محاسبه کنید و تحلیل و استخراج بینش از مجموعههای داده بزرگ را آسانتر کنید.
ملاحظات امنیتی
امنیت جنبه حیاتی کار با پایگاههای داده است و مهارتهای پیشرفته SQL برای اطمینان از امنیت و یکپارچگی داده ضروری هستند. این شامل استفاده از تکنیکهای پیشرفته SQL، مانند رمزنگاری و کنترل دسترسی، برای حفاظت از دادههای حساس است. رمزنگاری اطمینان میدهد که داده به فرمت امن ذخیره شود، در حالی که کنترل دسترسی محدود میکند که چه کسی میتواند داده را مشاهده یا تغییر دهد.
موضوعات پیشرفته SQL، مانند شیوههای کدگذاری امن و ذخیرهسازی داده امن، همچنین برای حفظ امنیت داده حیاتی هستند. شیوههای کدگذاری امن شامل نوشتن کد SQL مقاوم در برابر آسیبپذیریهای رایج، مانند حملات تزریق SQL است. ذخیرهسازی داده امن اطمینان میدهد که اطلاعات حساس به گونهای ذخیره شود که دسترسی غیرمجاز را جلوگیری کند.
برای مثال، میتوانید از دستور SQL زیر برای ایجاد کاربر با امتیازات دسترسی خاص استفاده کنید:
CREATE USER 'report_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT SELECT ON sales TO 'report_user'@'localhost';
با استفاده از این تکنیکهای پیشرفته SQL، شما میتوانید دادههای حساس را حفاظت کنید و دسترسی غیرمجاز را جلوگیری کنید و حفظ امنیت و یکپارچگی مجموعههای داده بزرگ را آسانتر کنید.
عیبیابی
عیبیابی جنبه ضروری کار با پایگاههای داده است و مهارتهای پیشرفته SQL برای عیبیابی مسائل پیچیده پایگاه داده ضروری هستند. این شامل استفاده از تکنیکهای پیشرفته SQL، مانند دیباگینگ و مدیریت خطا، برای شناسایی و حل مسائل پایگاه داده است. دیباگینگ شامل بررسی سیستماتیک کد SQL برای یافتن و رفع خطاها است، در حالی که مدیریت خطا اطمینان میدهد که کد SQL شما بتواند موقعیتهای غیرمنتظره را به طور کامل مدیریت کند.
موضوعات پیشرفته SQL، مانند بهینهسازی کوئری و تنظیم عملکرد، همچنین برای عیبیابی و بهینهسازی عملکرد پایگاه داده حیاتی هستند. بهینهسازی کوئری شامل تحلیل و بهبود کارایی کوئریهای SQL است، در حالی که تنظیم عملکرد بر بهبود عملکرد کلی سیستم پایگاه داده تمرکز دارد.
برای مثال، دستور SQL زیر یک ایندکس برای بهبود عملکرد کوئری ایجاد میکند:
CREATE INDEX idx_sales_date ON sales(sales_date);
با بهرهگیری از این تکنیکهای پیشرفته SQL، شما میتوانید مسائل پایگاه داده را سریع شناسایی و حل کنید و حفظ عملکرد و یکپارچگی مجموعههای داده بزرگ را آسانتر کنید.
نتیجهگیری
تسلط بر کوئریهای پیشرفته SQL میتواند ظرفیت شما برای تحلیل و مدیریت داده در پایگاه داده رابطهای را به طور قابل توجهی بهبود بخشد. این مقاله به ۱۵ مفهوم پیشرفته SQL میپردازد و پایهای محکم برای مقابله با وظایف داده پیچیده ارائه میدهد. هرچه بیشتر تمرین کنید، در مدیریت و تحلیل داده ماهرتر خواهید شد. این تخصص تازه به دست آمده به شما امکان میدهد تصمیمگیریهای مبتنی بر داده را با اعتماد به نفس بیشتر انجام دهید، پتانسیل کامل پایگاههای داده رابطهای خود را آزاد کنید و در نهایت مزیت قابل توجهی کسب کنید.
سؤالات متداول درباره SQL پیشرفته
SQL «پیشرفته» در مقایسه با پایهها چیست؟
SQL پیشرفته فراتر از SELECTهای ساده و فیلترها میرود و شامل توابع پنجرهای، CTEها، recursion، pivoting و unpivoting، اتصالات پیچیده، توابع کاربر-تعریفشده، رویههای ذخیرهشده، triggers و تکنیکهای تنظیم عملکرد است.
چه زمانی از تابع پنجرهای به جای GROUP BY استفاده کنم؟
از توابع پنجرهای زمانی استفاده کنید که نیاز به تجمیعها همراه با جزئیات سطح ردیف دارید. برای مثال، نمایش هر سفارش با جمع در حال اجرای مشتریاش. GROUP BY ردیفها را فشرده میکند. توابع پنجرهای روی «پنجره» محاسبه میکنند در حالی که هر ردیف را قابل مشاهده نگه میدارند.
CTEs از زیرکوئریها چگونه متفاوت هستند؟
CTEs خوانایی و قابلیت استفاده مجدد را در یک دستور واحد بهبود میبخشند و از recursion پشتیبانی میکنند. سابکوئریها inline هستند. از نظر عملکردی هر دو کار میکنند، اما CTEها آسانتر برای دیباگ و نگهداری هستند.
چه زمانی از CTEهای بازگشتی استفاده کنم؟
از آنها برای سلسلهمراتب و مسیرها استفاده کنید: نمودارهای سازمانی، درختهای پوشه، فهرست مواد، پیمایش گراف و توالیهای در حال اجرا. همیشه شامل مورد پایه، گام بازگشتی و شرط خاتمه باشید.