Relationship
Relationship adalah hubungan antara dua atau lebih tabel dalam sebuah database. Relationship ini penting untuk mengelola data yang tersebar di beberapa tabel dan memungkinkan integrasi informasi secara efisien.
Jenis-Jenis Relationship:
One-to-One:
Setiap baris dalam tabel A berhubungan dengan satu baris dalam tabel B.
Contoh: Tabel
usersdengan tabeluser_profiles, di mana setiap pengguna hanya memiliki satu profil.
CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50) ); CREATE TABLE user_profiles ( profile_id INT PRIMARY KEY, user_id INT, bio TEXT, FOREIGN KEY (user_id) REFERENCES users(user_id) );Untuk menampilkan data antara dua tabel
usersdanuser_profiles, kita bisa menggunakan SQLINNER JOIN,LEFT JOIN, atauRIGHT JOINtergantung pada kebutuhan kita.Berikut ini adalah contoh menggunakan
INNER JOIN, yang hanya akan menampilkan data jika ada kecocokan di kedua tabel:SELECT users.user_id, users.username, user_profiles.profile_id, user_profiles.bio FROM users INNER JOIN user_profiles ON users.user_id = user_profiles.user_id;Penjelasan:INNER JOIN: Menggabungkan baris dari kedua tabel hanya jika ada kecocokan antara kolomuser_idpada tabelusersdengan kolomuser_idpada tabeluser_profiles.Hasilnya: Query ini akan menampilkan data
user_id,username,profile_id, danbiodari kedua tabel yang memilikiuser_idyang sama.
Jika Anda ingin menampilkan semua pengguna, termasuk mereka yang tidak memiliki profil, Anda bisa menggunakan
LEFT JOIN:SELECT users.user_id, users.username, user_profiles.profile_id, user_profiles.bio FROM users LEFT JOIN user_profiles ON users.user_id = user_profiles.user_id;Penjelasan:LEFT JOIN: Mengambil semua data dari tabelusers, dan data dariuser_profilesyang cocok. Jika tidak ada kecocokan, kolom dariuser_profilesakan berisiNULL.
One-to-Many :
Setiap baris dalam tabel A berhubungan dengan banyak baris dalam tabel B.
Contoh: Tabel
authorsdengan tabelbooks, di mana seorang penulis bisa menulis banyak buku.
CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(100), author_id INT, FOREIGN KEY (author_id) REFERENCES authors(author_id) );Berikut adalah contoh query untuk melakukan join antara tabel
authorsdanbooks, menggunakanINNER JOIN:SELECT authors.author_id, authors.name, books.book_id, books.title FROM authors INNER JOIN books ON authors.author_id = books.author_id;Penjelasan:INNER JOIN: Menggabungkan baris dari kedua tabel hanya jika ada kecocokan antara kolomauthor_idpada tabelauthorsdengan kolomauthor_idpada tabelbooks.Hasilnya: Query ini akan menampilkan data
author_id,name,book_id, dantitledari kedua tabel yang memilikiauthor_idyang sama.
Jika Anda ingin menampilkan semua penulis, termasuk mereka yang belum menulis buku, Anda bisa menggunakan
LEFT JOIN:SELECT authors.author_id, authors.name, books.book_id, books.title FROM authors LEFT JOIN books ON authors.author_id = books.author_id;Penjelasan:LEFT JOIN: Mengambil semua data dari tabelauthors, dan data daribooksyang cocok. Jika tidak ada kecocokan, kolom daribooksakan berisiNULL.
Sebaliknya, jika Anda ingin menampilkan semua buku, termasuk yang tidak memiliki penulis terkait (mungkin karena penulisnya dihapus), Anda bisa menggunakan
RIGHT JOIN:SELECT authors.author_id, authors.name, books.book_id, books.title FROM authors RIGHT JOIN books ON authors.author_id = books.author_id;Penjelasan:RIGHT JOIN: Mengambil semua data dari tabelbooks, dan data dariauthorsyang cocok. Jika tidak ada kecocokan, kolom dariauthorsakan berisiNULL.
Many-to-Many:
Banyak baris dalam tabel A berhubungan dengan banyak baris dalam tabel B.
Contoh: Tabel
studentsdengan tabelcourses, di mana seorang siswa bisa mengambil banyak kursus, dan satu kursus bisa diikuti oleh banyak siswa. Ini biasanya diimplementasikan dengan tabel ketiga (tabel penghubung).
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE courses ( course_id INT PRIMARY KEY, course_name VARCHAR(100) ); CREATE TABLE student_courses ( student_id INT, course_id INT, FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id), PRIMARY KEY (student_id, course_id) );Berikut adalah contoh query untuk melakukan join antara tabel
students,courses, danstudent_courses, untuk menampilkan informasi mengenai siswa dan kursus yang mereka ikuti:Menggunakan
INNER JOINQuery ini akan menampilkan semua siswa yang terdaftar dalam kursus tertentu:
SELECT students.student_id, students.name, courses.course_id, courses.course_name FROM students INNER JOIN student_courses ON students.student_id = student_courses.student_id INNER JOIN courses ON student_courses.course_id = courses.course_id;Penjelasan:INNER JOINdigunakan untuk menggabungkan tabelstudentsdenganstudent_courses, kemudian menggabungkannya dengan tabelcourses.Query ini menampilkan data
student_id,name,course_id, dancourse_nameuntuk semua siswa yang telah terdaftar dalam kursus.
Menggunakan
LEFT JOINJika Anda ingin menampilkan semua siswa, termasuk mereka yang belum terdaftar dalam kursus apa pun, Anda bisa menggunakan
LEFT JOIN:SELECT students.student_id, students.name, courses.course_id, courses.course_name FROM students LEFT JOIN student_courses ON students.student_id = student_courses.student_id LEFT JOIN courses ON student_courses.course_id = courses.course_id;Penjelasan:LEFT JOINmemastikan bahwa semua siswa akan ditampilkan, bahkan jika mereka belum terdaftar dalam kursus. Jika seorang siswa belum terdaftar dalam kursus, kolom yang terkait dengan kursus akan berisiNULL.
Menggunakan
RIGHT JOINSebaliknya, jika Anda ingin menampilkan semua kursus, termasuk kursus yang belum diambil oleh siswa mana pun, Anda bisa menggunakan
RIGHT JOIN:SELECT students.student_id, students.name, courses.course_id, courses.course_name FROM students RIGHT JOIN student_courses ON students.student_id = student_courses.student_id RIGHT JOIN courses ON student_courses.course_id = courses.course_id;Penjelasan:RIGHT JOINmemastikan bahwa semua kursus akan ditampilkan, bahkan jika tidak ada siswa yang terdaftar dalam kursus tersebut. Jika tidak ada siswa yang terdaftar, kolom yang terkait dengan siswa akan berisiNULL.
Dengan memahami jenis-jenis relationship ini, kita bisa merancang database yang lebih terstruktur dan efisien dalam mengelola data yang saling berhubungan.
Last updated