Zaawansowany język SQL
Nie tak dawno temu stworzyłem samouczek SQL dla początkujących, możesz go przeczytać tutaj . Dziś pora opowiedzieć o bardziej zaawansowanych tematach, takich jak operatory GROUP BY i HAVING, instrukcja MERGE i procedury składowane.
GRUPUJ WEDŁUG
Klauzula GROUP BY w języku SQL służy do grupowania wierszy w zestawie wyników na podstawie jednej lub większej liczby kolumn. Zwykle jest używany w połączeniu z funkcjami agregującymi, takimi jak LICZBA, SUMA, ŚREDNIA, MIN i MAX, do obliczania wartości dla każdej grupy.
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
Inny przykład:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
Należy pamiętać, że należy używać funkcji agregujących w wybranych kolumnach, które nie są objęte klauzulą GROUP BY, aby uniknąć błędu. Ponadto bardzo ważne jest, aby pamiętać, że kolumny w klauzuli GROUP BY definiują grupy; kolejność kolumn w instrukcji SELECT nie ma wpływu na zestaw wyników.
MAJĄCY
W oparciu o warunki dla funkcji agregującej grupy wierszy w zbiorze wyników można filtrować za pomocą klauzuli HAVING w języku SQL. Zwykle jest łączony z klauzulą GROUP BY w celu wyeliminowania grup, które nie spełniają określonych wymagań.
Rozważmy na przykład następujące zapytanie SQL, które wybiera łączną sprzedaż dla każdej kategorii produktów w przykładowej ordertabeli i zwraca tylko te kategorie, których łączna sprzedaż jest większa niż 1000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
Inny przykład:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
Podobnie jak klauzula WHERE, klauzula HAVING służy do filtrowania grup po utworzeniu ich przez klauzulę GROUP BY i zastosowaniu funkcji agregujących.
ŁĄCZYĆ
Instrukcja SQL MERGE służy do aktualizowania lub wstawiania danych do tabeli docelowej na podstawie danych z tabeli źródłowej lub do łączenia danych z dwóch lub więcej tabel w jedną tabelę. Jest często używany jako alternatywa dla instrukcji łączących INSERT, UPDATE i DELETE.
Składnia:
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);
Niektóre systemy zarządzania bazami danych, takie jak MySQL i SQLite, nie obsługują instrukcji MERGE, dlatego zamiast tego należy użyć kombinacji instrukcji INSERT, UPDATE i DELETE.
Komendę MERGE należy przetestować na małym podzbiorze danych przed użyciem na całej tabeli, ponieważ może ona mieć duży wpływ na wydajność dużych tabel.
Procedury składowane
Prekompilowana grupa instrukcji SQL, które są przechowywane w bazie danych jako procedura składowana. Często są zatrudniani do wykonania określonego zadania lub zbioru działań, takich jak pobieranie informacji z bazy danych lub wykonywanie skomplikowanych działań matematycznych. W porównaniu z uruchamianiem wielu oddzielnych instrukcji SQL procedury składowane są bardziej wszechstronne i efektywne, ponieważ mogą odbierać parametry wejściowe i zwracać wartości wyjściowe.
Oto przykład prostej procedury składowanej, która pobiera wszystkie wiersze z tabeli employees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
Wesprzyj naszą publikację, śledząc ją
Zapoznaj się również z poniższymi artykułami.
Java 8 Stream API Pytania i odpowiedzi do wywiadu
![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































