SQL tingkat lanjut
Belum lama ini saya membuat tutorial SQL Beginner, anda bisa membacanya disini . Hari ini saatnya untuk memberi tahu Anda tentang topik yang lebih lanjut, seperti operator GROUP BY dan HAVING, pernyataan MERGE, dan prosedur tersimpan.
KELOMPOK OLEH
Klausa GROUP BY dalam SQL digunakan untuk mengelompokkan baris dalam kumpulan hasil berdasarkan satu atau lebih kolom. Ini biasanya digunakan bersama dengan fungsi agregat seperti COUNT, SUM, AVG, MIN, dan MAX untuk menghitung nilai untuk setiap grup.
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
Contoh lain:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
Penting untuk dicatat bahwa Anda harus menggunakan fungsi agregat pada setiap kolom yang Anda pilih yang tidak dicakup oleh klausa GROUP BY untuk menghindari kesalahan. Selain itu, penting untuk diingat bahwa kolom dalam klausa GROUP BY adalah kolom yang menentukan grup; urutan kolom dalam pernyataan SELECT tidak ada hubungannya dengan set hasil.
MEMILIKI
Berdasarkan kondisi untuk fungsi agregat, grup baris dalam kumpulan hasil dapat difilter menggunakan klausa HAVING di SQL. Biasanya digabungkan dengan klausa GROUP BY untuk mengeliminasi grup yang tidak sesuai dengan persyaratan tertentu.
Misalnya, pertimbangkan kueri SQL berikut yang memilih total penjualan untuk setiap kategori produk dalam ordertabel sampel, dan hanya mengembalikan kategori yang memiliki total penjualan lebih besar dari 1000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
Contoh lain:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
Mirip dengan klausa WHERE, klausa HAVING digunakan untuk memfilter grup setelah klausa GROUP BY menghasilkannya dan fungsi agregat telah diterapkan.
MENGGABUNGKAN
Pernyataan SQL MERGE digunakan untuk memperbarui atau memasukkan data ke dalam tabel target berdasarkan data dalam tabel sumber, atau untuk menggabungkan data dari dua atau lebih tabel ke dalam satu tabel. Ini sering digunakan sebagai alternatif pernyataan yang menggabungkan INSERT, UPDATE, dan DELETE.
Sintaksis:
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);
Beberapa sistem manajemen basis data seperti MySQL dan SQLite tidak mendukung pernyataan MERGE, jadi Anda harus menggunakan kombinasi pernyataan INSERT, UPDATE, dan DELETE.
Perintah MERGE harus diuji pada sebagian kecil data sebelum digunakan di seluruh tabel karena mungkin berdampak besar pada kinerja pada tabel besar.
Prosedur Tersimpan
Grup pernyataan SQL yang telah dikompilasi yang disimpan dalam database sebagai prosedur tersimpan. Mereka sering dipekerjakan untuk melakukan tugas atau kumpulan aktivitas tertentu, seperti mendapatkan informasi dari database atau melakukan matematika yang rumit. Dibandingkan menjalankan banyak pernyataan SQL terpisah, prosedur tersimpan lebih fleksibel dan efektif karena dapat menerima parameter masukan dan mengembalikan nilai keluaran.
Berikut adalah contoh stored procedure sederhana yang mengambil semua baris dari tabel employees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
Dukung publikasi kami dengan mengikutinya
Lihat juga artikel berikut ini.
Pertanyaan dan Jawaban Wawancara Java 8 Stream API
![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































