Gelişmiş SQL

Mar 03 2023
Kısa bir süre önce bir SQL Beginners tutorial hazırladım, buradan okuyabilirsiniz. Bugün size GROUP BY ve HAVING işleçleri, MERGE deyimi ve saklı yordamlar gibi daha ileri düzey konulardan bahsetme zamanı.

Kısa bir süre önce bir SQL Beginner's tutorial hazırladım, buradan okuyabilirsiniz . Bugün size GROUP BY ve HAVING işleçleri, MERGE deyimi ve saklı yordamlar gibi daha ileri düzey konulardan bahsetme zamanı.

GRUPLANDIRMAYA GÖRE

SQL'deki GROUP BY deyimi, bir veya daha fazla sütuna dayalı olarak bir sonuç kümesindeki satırları gruplandırmak için kullanılır. Her grubun değerlerini hesaplamak için genellikle COUNT, SUM, AVG, MIN ve MAX gibi toplama işlevleriyle birlikte kullanılır.

SELECT category, SUM(sales)
FROM orders
GROUP BY category;

Başka bir örnek:

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

Bir hata almamak için, GROUP BY yan tümcesinin kapsamına girmeyen, seçtiğiniz herhangi bir sütunda toplama işlevlerini kullanmanız gerektiğini unutmamak önemlidir. Ek olarak, GROUP BY yan tümcesindeki sütunların grupları tanımlayan sütunlar olduğunu unutmamak önemlidir; SELECT deyimindeki sütunların sırasının sonuç kümesi üzerinde hiçbir etkisi yoktur.

SAHİP OLMAK

Toplama işlevinin koşullarına bağlı olarak, bir sonuç kümesindeki satır grupları, SQL'deki HAVING yan tümcesi kullanılarak filtrelenebilir. Belirli gereksinimlere uymayan grupları ortadan kaldırmak için genellikle GROUP BY yan tümcesiyle birleştirilir.

Örneğin, örnek bir tablodaki her bir ürün kategorisi için toplam satışları seçen orderve yalnızca toplam satışı 1000'den fazla olan kategorileri döndüren aşağıdaki SQL sorgusunu göz önünde bulundurun:

SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;

Başka bir örnek:

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;

WHERE yan tümcesine benzer şekilde, HAVING yan tümcesi, GROUP BY yan tümcesi onları oluşturduktan ve toplama işlevleri uygulandıktan sonra grupları filtrelemek için kullanılır.

BİRLEŞTİRMEK

SQL MERGE deyimi, bir kaynak tablodaki verilere dayalı olarak bir hedef tabloya veri güncellemek veya eklemek ya da iki veya daha fazla tablodaki verileri tek bir tabloda birleştirmek için kullanılır. INSERT, UPDATE ve DELETE'i birleştiren ifadelere alternatif olarak sıklıkla kullanılır.

Sözdizimi:

MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
    UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (source_table.column1, source_table.column2, ...)

MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
    UPDATE SET products.price = prices.price;

MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
    UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, first_name, last_name, department, salary)
    VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);

MySQL ve SQLite gibi bazı veritabanı yönetim sistemleri MERGE deyimini desteklemez, bu nedenle bunun yerine INSERT, UPDATE ve DELETE deyimlerinin birleşimini kullanmanız gerekir.

MERGE komutu, büyük tablolar üzerinde önemli bir performans etkisine sahip olabileceğinden, tüm tablo üzerinde kullanılmadan önce küçük bir veri alt kümesi üzerinde test edilmelidir.

saklı yordamlar

Bir veritabanında saklı yordam olarak tutulan, önceden derlenmiş bir SQL deyimleri grubu. Genellikle bir veri tabanından bilgi almak veya zor matematik işlemleri yapmak gibi belirli bir görevi veya etkinlikler koleksiyonunu gerçekleştirmek için kullanılırlar. Çok sayıda ayrı SQL deyimi çalıştırmakla karşılaştırıldığında, saklı yordamlar girdi parametrelerini alabildiği ve çıktı değerlerini döndürebildiği için daha çok yönlü ve etkilidir.

İşte bir tablodan tüm satırları alan basit bir saklı yordam örneği employees:

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM employees;
END

EXEC GetAllEmployees;

Yayınımızı takip ederek destek olun

Ayrıca aşağıdaki makalelere bakın.

Java 8 Stream API Mülakat Soruları ve Cevapları