MySQL - Common Table Expressions: Panduan untuk Pemula

Hai sana, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan yang menarik ke dunia MySQL Common Table Expressions (CTEs). Jangan khawatir jika Anda baru belajar pemrograman - saya akan menjadi panduan teman baik Anda, dan kita akan berjalan langkah demi langkah. Pada akhir tutorial ini, Anda akan bisa membuat CTEs seperti seorang ahli!

MySQL - Common Table Expressions

Apa Itu Common Table Expressions?

Sebelum kita masuk ke detil, mari kita mulai dari dasar. Bayangkan Anda mengatur sebuah pesta besar (siapa yang tidak suka pesta basis data yang bagus, kan?). Anda mungkin membuat daftar tamu, daftar makanan, dan daftar kegiatan. Daftar ini membantu Anda mengatur pikiran dan mempermudah perencanaan. Common Table Expressions mirip seperti daftar itu, tapi untuk query basis data Anda!

Sebuah Common Table Expression, atau CTE untuk pendek, adalah hasil set sementar yang dinamai yang Anda bisa referensikan dalam SELECT, INSERT, UPDATE, DELETE, atau MERGE statement. Itu seperti membuat tabel sementar yang ada hanya untuk durasi query Anda. Keren, kan?

Klause MySQL WITH: tongkat ajaib CTE Anda

Dalam MySQL, kita menggunakan klause WITH untuk membuat CTE. Itu seperti mengatakan, "Hey MySQL, saya ingin membuat hasil set sementar, dan saya akan menyebutnya X." Mari kita lihat contoh sederhana:

WITH cte_nama AS (
SELECT column1, column2
FROM table_nama
WHERE condition
)
SELECT * FROM cte_nama;

mari kitauraikan ini:

  1. WITH memberitahu MySQL bahwa kita akan mendefinisikan CTE.
  2. cte_nama adalah nama yang kita berikan kepada CTE ( Anda dapat memilih nama apa saja yang Anda sukai).
  3. AS diikuti oleh query yang mendefinisikan data yang akan ada dalam CTE kita.
  4. Setelah definisi CTE, kita memiliki query utama yang menggunakan CTE.

Sekarang, mari kita coba contoh dunia nyata. Bayangkan kita memiliki tabel siswa dan nilai mereka:

CREATE TABLE siswa (
id INT PRIMARY KEY,
nama VARCHAR(50),
nilai INT
);

INSERT INTO siswa VALUES
(1, 'Alice', 85),
(2, 'Bob', 92),
(3, 'Charlie', 78),
(4, 'Diana', 95),
(5, 'Eva', 88);

WITH high_achievers AS (
SELECT nama, nilai
FROM siswa
WHERE nilai > 90
)
SELECT * FROM high_achievers;

Dalam contoh ini, kita membuat CTE bernama high_achievers yang hanya mencakup siswa dengan nilai di atas 90. Kemudian, kita memilih semua kolom dari CTE ini. Hasilnya akan menampilkan Bob dan Diana, siswa-siswa berprestasi tinggi kita!

CTE dari Beberapa Tabel: Bergabung ke Pesta

CTEs tidak terbatas pada hanya satu tabel. Tidak, mereka bisa sebanyak yang Anda perlukan! Mari kita tambahkan tabel pelajaran ke basis data sekolah kita:

CREATE TABLE pelajaran (
id INT PRIMARY KEY,
nama VARCHAR(50),
guru VARCHAR(50)
);

INSERT INTO pelajaran VALUES
(1, 'Matematika', 'Mr. Smith'),
(2, 'Sains', 'Ms. Johnson'),
(3, 'Sejarah', 'Mrs. Brown');

CREATE TABLE pendaftaran (
siswa_id INT,
pelajaran_id INT,
FOREIGN KEY (siswa_id) REFERENCES siswa(id),
FOREIGN KEY (pelajaran_id) REFERENCES pelajaran(id)
);

INSERT INTO pendaftaran VALUES
(1, 1), (1, 2), (2, 2), (3, 3), (4, 1), (4, 3), (5, 2);

WITH siswa_pelajaran AS (
SELECT s.nama AS siswa_nama, c.nama AS pelajaran_nama
FROM siswa s
JOIN pendaftaran p ON s.id = p.siswa_id
JOIN pelajaran c ON p.pelajaran_id = c.id
),
sains_siswa AS (
SELECT siswa_nama
FROM siswa_pelajaran
WHERE pelajaran_nama = 'Sains'
)
SELECT * FROM sains_siswa;

Wow, itu banyak! Mari kitauraikan ini:

  1. Kita membuat dua tabel baru: pelajaran dan pendaftaran.
  2. Kita mendefinisikan CTE bernama siswa_pelajaran yang menggabungkan tabel ini untuk mendapatkan daftar siswa dan pelajaran mereka.
  3. Kita mendefinisikan CTE lain bernama sains_siswa yang menggunakan CTE pertama untuk menemukan siswa yang mengambil Sains.
  4. Akhirnya, kita memilih semua siswa sains.

Query ini akan menampilkan Alice, Bob, dan Eva - siswa-siswa yang menjadi ilmuwan muda kita!

Kuasa CTE: Mengapa Anda Harus Peduli?

Anda mungkin berpikir, " Mengapa harus mendatangkan kesulitan ini? Bisakah saya hanya menggunakan subquery?" Pertanyaan yang bagus! CTE menyediakan beberapa keuntungan:

  1. Bacaan: CTE membuat query kompleks mudah dibaca dan dipahami. Itu seperti memecahkan masalah besar menjadi bagian kecil dan dapat dikelola.

  2. Reusabilitas: Anda dapat merujuk ke CTE beberapa kali dalam query utama Anda, yang bisa lebih efisien daripada mengulangi subquery.

  3. Rekursi: CTE dapat rekursif, memungkinkan Anda bekerja dengan data hierarki atau struktur pohon mudah (tetapi itu adalah topik untuk hari lainnya!).

Metode CTE: pisau Switzerland Anda untuk Query Tools

Mari rangkum berbagai cara Anda dapat menggunakan CTE dalam tabel praktis:

Metode Deskripsi Contoh
CTE Dasar Definisikan hasil set dinamai sederhana WITH cte AS (SELECT * FROM table)
Beberapa CTE Definisikan beberapa CTE dalam satu query WITH cte1 AS (...), cte2 AS (...)
CTE Tertanam Gunakan CTE dalam CTE lain WITH outer_cte AS (WITH inner_cte AS (...) SELECT * FROM inner_cte)
CTE Rekursif Buat CTE yang merujuk ke dirinya sendiri WITH RECURSIVE cte AS (...)

Ingat, seperti segala jenis alat yang kuat, gunakan CTE bijak. Mereka sangat cocok untuk mengatur query kompleks, tapi untuk operasi sederhana, mungkin saja SELECT saja yang Anda butuhkan.

Kesimpulan: Perjalanan CTE Anda Dimulai!

Selamat! Anda telah mengambil langkah pertama ke dunia Common Table Expressions. Kita telah melihat dasar-dasar, melihat bagaimana menggunakan klause WITH, dan bahkan menangani CTE multi-tabel. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba dengan basis data Anda sendiri.

Sekarang Anda teruskan perjalanan MySQL Anda, Anda akan menemukan CTE menjadi alat yang tak ternilai dalam kotak alat query Anda. Mereka akan membantu Anda menulis kode yang bersih, efisien, dan mudah dipelihara. Dan siapa tahu? Mungkin suatu hari Anda akan menjadi yang mengajarkan orang lain tentang keajaiban CTE!

Terus coding, tetap curiga, dan semoga query Anda selalu mengembalikan hasil yang Anda harap! Sampaijumpa nanti, selamat memanipulasi data!

Credits: Image by storyset