MySQL - Common Table Expressions: Panduan untuk Pemula
Hai teman-teman, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia MySQL Common Table Expressions (CTEs). Jangan khawatir jika Anda baru dalam programming – saya akan menjadi panduan yang ramah, dan kita akan mengambil langkah ini satu demi satu. Pada akhir tutorial ini, Anda akan menciptakan CTEs seperti seorang ahli!
Apa Itu Common Table Expressions?
Sebelum kita masuk ke detil, mari 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 membuat rencana lebih mudah. Common Table Expressions seperti itu, tetapi untuk permintaan basis data Anda!
Sebuah Common Table Expression, atau CTE untuk pendek, adalah sebuah himpunan hasil sementar yang dinamai yang Anda bisa merujuk dalam sebuah pernyataan SELECT, INSERT, UPDATE, DELETE, atau MERGE. Itu seperti menciptakan sebuah tabel sementar yang ada hanya untuk durasi permintaan Anda. Keren, kan?
Klausul MySQL WITH: tongkat sihir CTE Anda
Dalam MySQL, kita menggunakan klausa WITH
untuk menciptakan CTE. Itu seperti mengatakan, "Hey MySQL, saya ingin menciptakan sebuah himpunan hasil sementar, dan saya akan menamakannya X." mari lihat contoh sederhana:
WITH cte_name AS (
SELECT column1, column2
FROM table_name
WHERE condition
)
SELECT * FROM cte_name;
mariuraikan ini:
-
WITH
memberitahu MySQL bahwa kita akan mendefinisikan sebuah CTE. -
cte_name
adalah nama yang kita berikan kepada CTE ( Anda bisa memilih nama apa saja yang Anda suka). -
AS
diikuti oleh permintaan yang mendefinisikan data apa yang akan ada dalam CTE kita. - Setelah pendefinisian CTE, kita memiliki permintaan utama yang menggunakan CTE.
Sekarang, mari coba contoh dunia nyata. Bayangkan kita memiliki tabel siswa dan nilai mereka:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
grade INT
);
INSERT INTO students VALUES
(1, 'Alice', 85),
(2, 'Bob', 92),
(3, 'Charlie', 78),
(4, 'Diana', 95),
(5, 'Eva', 88);
WITH high_achievers AS (
SELECT name, grade
FROM students
WHERE grade > 90
)
SELECT * FROM high_achievers;
Dalam contoh ini, kita menciptakan sebuah CTE bernama high_achievers
yang mencakup hanya siswa dengan nilai di atas 90. Kemudian, kita memilih semua kolom dari CTE ini. Hasilnya akan menampilkan Bob dan Diana, siswa-siswa yang berprestasi tinggi!
CTEs dari Banyak Tabel: Bergabung ke Pesta
CTEs tidak terbatas hanya pada satu tabel. Oh tidak, mereka bisa sekompleks seperti yang Anda perlukan! mari tambahkan tabel mata pelajaran ke basis data sekolah kita:
CREATE TABLE courses (
id INT PRIMARY KEY,
name VARCHAR(50),
teacher VARCHAR(50)
);
INSERT INTO courses VALUES
(1, 'Math', 'Mr. Smith'),
(2, 'Science', 'Ms. Johnson'),
(3, 'History', 'Mrs. Brown');
CREATE TABLE enrollments (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
INSERT INTO enrollments VALUES
(1, 1), (1, 2), (2, 2), (3, 3), (4, 1), (4, 3), (5, 2);
WITH student_courses AS (
SELECT s.name AS student_name, c.name AS course_name
FROM students s
JOIN enrollments e ON s.id = e.student_id
JOIN courses c ON e.course_id = c.id
),
science_students AS (
SELECT student_name
FROM student_courses
WHERE course_name = 'Science'
)
SELECT * FROM science_students;
Wow, itu banyak! mariuraikan ini:
- Kita menciptakan dua tabel baru:
courses
danenrollments
. - Kita mendefinisikan sebuah CTE bernama
student_courses
yang menggabungkan tabel ini untuk mendapatkan daftar siswa dan mata pelajaran mereka. - Kita mendefinisikan CTE lain bernama
science_students
yang menggunakan CTE pertama untuk menemukan siswa yang mengambil Science. - Akhirnya, kita memilih semua siswa ilmu pengetahuan.
Permintaan ini akan menampilkan Alice, Bob, dan Eva – para ilmuwan muda kita!
Kuasa CTEs: Mengapa Anda Harus Peduli?
Anda mungkin berpikir, " Mengapa harus kesulitan ini? Bisakah saya hanya menggunakan subquery?" Pertanyaan yang bagus! CTEs menawarkan beberapa keunggulan:
- Bacaan: CTEs membuat permintaan kompleks mudah dibaca dan dipahami. Itu seperti memecah masalah besar menjadi bagian-bagian kecil dan dapat dikelola.
- Reusabilitas: Anda bisa merujuk ke CTE beberapa kali dalam permintaan utama Anda, yang bisa lebih efisien daripada mengulangi subquery.
- Rekursi: CTEs bisa rekursif, memungkinkan Anda bekerja dengan data berstruktur hierarki atau pohon mudah (tetapi itu adalah topik untuk hari lain!).
Metode CTE: pisau swisst army Anda untuk tools permintaan
mari rangkum berbagai cara Anda bisa menggunakan CTE dalam tabel praktis:
Metode | Deskripsi | Contoh |
---|---|---|
Basic CTE | Definisikan himpunan hasil dinamai sederhana | WITH cte AS (SELECT * FROM table) |
Banyak CTE | Definisikan beberapa CTE dalam satu permintaan | WITH cte1 AS (...), cte2 AS (...) |
CTE Tertanam | Gunakan satu 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 semua tools yang kuat, gunakan CTEs bijaksana. Mereka sangat cocok untuk mengatur permintaan kompleks, tetapi untuk operasi sederhana, mungkin saja permintaan SELECT yang straightforward cukup.
Kesimpulan: Perjalanan CTE Anda Dimulai!
Selamat! Anda telah mengambil langkah pertama ke dunia Common Table Expressions. Kita telah melihat dasar, melihat bagaimana menggunakan klausa WITH, dan bahkan menangani CTEs 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 CTEs menjadi tools tak ternilai dalam set alat permintaan Anda. Mereka akan membantu Anda menulis kode yang lebih bersih, lebih efisien, dan mudah dipelihara. Dan siapa tahu? Mungkin suatu hari Anda akan menjadi yang mengajarkan orang lain tentang keajaiban CTEs!
Terus coding, tetap curiga, dan semoga permintaan Anda selalu mengembalikan hasil yang Anda harapkan! Sampai jumpa lagi, selamat mengelola data!
Credits: Image by storyset