Hohoho, selamat malam, artikel ini akan membawa pembahasan mengenai mysql laravel right join SQL untuk Pemula: Bagian 3 - Relasi Database simak selengkapnya
Hari ini, abdi melanjutkan perjalanan abdi ke adam sistem database relasional dan SQL. Dalam bagian tiga seri ini, kita akan mempelajari betapa dengan cara apa bekerja dengan jumlah bagan yang memiliki relasi ahad sama lain. Pertama, kita akan pergi ke jumlah corat-coret inti, dan akan datang akan mulai bekerja dengan query JOIN di SQL.
Anda jua dapat melihat database SQL dalam aktivitas dengan memeriksa skrip SQL, apps dan add-ons di Envato Market.
Mengejar
Pengenalan
Ketika membuat sebentuk database, budi efektif mendikte kita memakai tabel-tabel terpisah buat beragam jenis entitas. Beberapa contoh adalah: customers, orders, items, messages dll... Tapi kita jua kudu memiliki relasi celah tabel-tabel tersebut. Misalnya, customers membuat orders, dan orders berisi items. Relasi ini kudu diwakili dalam database. Juga, kala mengambil data dengan SQL, kita harus memakai jumlah jenis query JOIN buat membaca apa yang kita butuhkan.
Ada jumlah jenis relasi database. Hari ini kita akan berbalah berikut:
- Relasi One to One
- Relasi One to Many dan Many to One
- Relasi Many to Many
- Relasi Referensi Mandiri
Ketika memilih data dari jumlah bagan dengan relasi ini, kita akan memakai JOIN query. Ada jumlah jenis JOIN, dan kita akan berguru tentang hal berikut:
- Cross Joins
- Natural Joins
- Inner Joins
- Left (Outer) Joins
- Right (Outer) Joins
Kita jua akan berguru tentang kalimat ON dan klausa USING.
Relasi One to One
Katakanlah Anda memiliki sebentuk bagan buat customers:
Kita dapat meletakkan informasi alamat customer pada bagan yang terpisah:
Sekarang kita memiliki relasi celah bagan Customers dan bagan Addresses. Jika address masing-masing cuma dapat jadi milik ahad customer, relasi ini ialah "One to One". Perlu diingat bahwa relasi semacam ini amat tak umum. Tabel awal abdi yang disertakan address bersama dengan customer bisa bekerja baik dalam kebanyakan kasus.
Perhatikan bahwa kini siap sebentuk field yang bernama "address_id" di bagan Customers, yang mengacu pada record yang cocok dalam bagan Address. Ini disebut "Foreign Key" dan digunakan buat sarwa jenis relasi database. Kami akan berbalah hal ini akan datang di dalam artikel.
Kita dapat memvisualisasikan relasi celah record customer dan address seperti ini:
Perhatikan bahwa adanya suatu relasi dapat opsional, seperti memiliki record customer yang telah siap yang berkaitan dengan record address.
Relasi One to Many dan Many to One
Ini ialah jenis yang paling am digunakan dari relasi. Pertimbangkan sebentuk situs web e-commerce, dengan berikut:
- Customers dapat membuat berjibun orders.
- Orders dapat berisi berjibun items.
- Items dapat memiliki deskripsi dalam berjibun bahasa.
Dalam kasus ini kita akan harus buat membuat relasi "One to Many". Berikut ialah contohnya:
Setiap customer dapat memiliki nol, ahad alias jumlah orders. Tapi sebentuk order dapat cuma jadi milik ahad customer.
Relasi Many to Many
Dalam jumlah kasus, Anda mungkin harus jumlah contoh relasi pada kedua sisi. Misalnya, saban order dapat berisi jumlah items. Dan masing-masing item jua bisa dalam jumlah orders.
Untuk relasi ini, kita harus membuat sebentuk bagan tambahan:
Tabel Items_Orders cuma memiliki ahad tujuan, dan itu ialah buat menciptakan sebentuk relasi "Many to Many" celah items dan orders.
Berikut ialah betapa dengan cara apa kita dapat memvisualisasikan relasi semacam ini:
Jika Anda ingin menyertakan record items_orders pada grafik, ini dapat datang seperti ini:
Relasi Referensi Mandiri
Ini digunakan kala sebentuk bagan membutuhkan buat memiliki relasi dengan dirinya sendiri. Sebagai contoh, katakanlah Anda memiliki program referral. Customers dapat merujuk customers lain ke situs belanja Anda. Tabel dapat datang seperti ini:
Customers 102 dan 103 dirujuk oleh customer 101.
Ini sebenarnya jua dapat mirip dengan relasi "one to many" akibat ahad pelanggan dapat merujuk ke jumlah pelanggan. Juga hal ini dapat divisualisasikan seperti struktur pohon:
Satu customer dapat merujuk nol, ahad alias jumlah customers. Setiap customer bisa dirujuk jua dengan cuma ahad customer, alias tak sama sekali.
Jika Anda ingin membuat referensi mandiri relasi "many to many", Anda akan membutuhkan sebentuk bagan tambahan seperti yang kita bicarakan dalam bagian sebelumnya.
Foreign Key
Sejauh ini kita telah berguru tentang jumlah konsep. Sekarang ialah waktunya menghidupkan mereka dengan memakai SQL. Untuk bagian ini, kita harus memahami apa itu Foreign Key.
Dalam contoh-contoh relasi di atas, abdi acap memiliki field ini "****_id" yang direferensikan sebentuk kolom di bagan yang lain. Dalam contoh ini, kolom customer_id dalam bagan Orders ialah kolom Foreign Key:
Dengan database seperti MySQL, siap dua cara buat membuat kolom foreign key kolom:
Mendefinisikan Foreign Key secara eksplisit
Mari kita membuat bagan customers sederhana:
CREATE TABLE customers ( customer_id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(100) );
Sekarang bagan orders, yang akan berisi Foreign Key:
CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT, amount DOUBLE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
Kedua kolom (customers.customer_id dan orders.customer_id) kudu dengan struktur data yang sama persis. Jika salah satunya ialah INT, yang lain tak boleh BIGINT misalnya.
Harap dicatat bahwa di MySQL cuma mesin InnoDB yang memiliki dukungan penuh buat Foreign Key. Tapi mesin pencadangan lainnya masih akan memungkinkan Anda buat memasang mereka minus siap kesalahan. Juga kolom Foreign Key ialah yang diindeks secara otomatis, eksepsi andaikan Anda memasang indeks lain untuknya.
Tanpa Deklarasi Eksplisit
Tabel orders yang sama dapat dibuat minus menyatakan kolom customer_id buat jadi Foreign Key secara eksplisit:
CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT, amount DOUBLE, INDEX (customer_id) );
Ketika mengambil data dengan query JOIN, Anda masih bisa memperlakukan kolom ini sebagai Foreign Key meskipun mesin database tak mengecamkan relasi ini.
SELECT * FROM orders JOIN customers USING(customer_id)
Kita akan berguru tentang query JOIN lebih lanjut dalam artikel ini.
Memvisualisasikan Relasi
Perangkat lunak favorit saya detik ini buat merancang database dan memvisualisasikan relasi Foreign Key adalah MySQL Workbench.
Setelah Anda merancang database Anda, Anda dapat memperdagangkan SQL dan menjalankan pada peladen Anda. Hadir yang amat berarti buat desain database yang lebih besar dan lebih kompleks.
Query JOIN
Untuk mengambil data dari database yang memiliki relasi, kita sering harus buat memakai query JOIN.
Sebelum kita mulai, ayo kita membuat bagan dan jumlah sampel data buat bekerja dengannya.
CREATE TABLE customers ( customer_id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(100) ); CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT, amount DOUBLE, FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ); INSERT INTO `customers` (`customer_id`, `customer_name`) VALUES (1, 'Adam'), (2, 'Andy'), (3, 'Joe'), (4, 'Sandy'); INSERT INTO `orders` (`order_id`, `customer_id`, `amount`) VALUES (1, 1, 19.99), (2, 1, 35.15), (3, 3, 17.56), (4, 4, 12.34);
Kami memiliki 4 customers. Satu customer memiliki dua orders, dua customers memiliki ahad order masing-masing, dan salah ahad customer tak memiliki order. Sekarang ayo kita amat-amati beragam jenis query JOIN yang dapat kita jalankan di bagan ini.
Cross Join
Ini ialah default tipe query JOIN kala tak siap kondisi yang ditentukan.
Hasilnya ialah apa yang disebut "produk Cartesian" dari tabel. Itu berfaedah bahwa saban alur dari bagan pertama dicocokkan dengan saban alur dari bagan kedua. Karena saban bagan memiliki 4 baris, abdi akibatnya membaca buatan 16 baris.
Kata kunci JOIN secara opsional dapat diganti dengan koma sebagai gantinya.
Tentu saja buatan seperti ini biasanya tak berguna. Jadi ayo kita amat-amati jenis penggabungan lainnya.
Natural Join
Dengan query JOIN semacam ini, bagan kudu memiliki pencocokan asma kolom. Dalam kasus kami, kedua bagan memiliki kolom customer_id. Jadi, MySQL akan menggabung record cuma kala nilai dari kolom ini ialah cocok pada dua record.
Seperti yang Anda amat-amati kolom customer_id ini cuma ditampilkan sekali detik ini, akibat mesin database memperlakukan ini sebagai kolom umum. Kita dapat melihat dua orders yang dilakukan oleh Adam, dan dua orders lainnya oleh Joe dan Sandy. Akhirnya abdi membaca jumlah informasi yang berguna.
Inner Join
Ketika penggabungan dengan kondisi yang ditentukan, Inner Join dilakukan. Dalam kasus ini, akan jadi ide yang baik buat memiliki field customer_id yang cocok pada kedua tabel. Hasilnya kudu sama dengan Natural Join.
Hasil yang sama eksepsi siap kecil perbedaan. Kolom customer_id ini diulang dua kali, sekali buat saban tabel. Alasannya adalah, kita cuma bertanya database buat mencocokkan nilai-nilai pada dua kolom. Tetapi itu ialah benar-benar tak mengecamkan bahwa mereka menggantikan informasi yang sama.
Mari kita tambahkan jumlah kondisi berulang ke query.
Kali ini abdi cuma melegalkan orders lebih dari $15.
Klausa ON
Sebelum pindah ke penggabungan jenis lainnya, kita harus melihat pada klausa ON. Ini berarti buat meletakkan kondisi JOIN di klausa terpisah.
Sekarang kita dapat membedakan kondisi JOIN dari klausa kondisi WHERE. Tapi jua siap kecil perbedaan dalam fungsi. Kita akan melihatnya di contoh-contoh LEFT JOIN.
Klausa USING
Klausa USING mirip dengan klausa ON, tetapi lebih pendek. Jika kolom dengan asma yang sama pada kedua tabel, kita dapat menentukannya di sini.
Pada kenyataannya, ini ialah mirip dengan NATURAL JOIN, sehingga dengan kolom yang bergabung (customer_id) tak diulang dua kali dalam hasilnya.
Left (Outer) Join
LEFT JOIN ialah jenis Outer Join. Dalam query ini, andaikan tak siap kecocokan ditemukan dari kedua tabel, record dari bagan pertama masih ditampilkan.
Meskipun Andy tak memiliki orders, record-nya masih ditampilkan. Nilai-nilai di bawah kolom dari bagan kedua ialah ditetapkan ke NULL.
Ini jua berarti buat menciptakan record yang tak memiliki relasi. Misalnya, kita bisa mencari customers yang belum melakukan orders.
Semua yang kita lakukan ialah mencari nilai-nilai NULL buat order_id.
Juga perhatikan bahwa bicara kunci OUTER ialah opsional. Anda cuma dapat memakai LEFT JOIN, bukan LEFT OUTER JOIN.
Conditional
Sekarang ayo kita amat-amati sebentuk query dengan kondisi.
Jadi apa yang terjadi dengan Andy dan Sandy? KIRI BERGABUNG sebaiknya mengembalikan customers yang tak sesuai dengan orders. Masalahnya ialah bahwa di klausa WHERE memblokir buatan tersebut. Untuk membaca mereka, kita dapat berikhtiar melakukan kondisi NULL juga.
Kita punya Andy tetapi tak Sandy. Ini masih tak datang benar. Untuk membaca apa yang kita inginkan, kita harus memakai klausa ON.
Sekarang kita punya sarwa orang, dan sarwa orders di arah $15. Seperti yang saya katakan sebelumnya, klausa ON adakala memiliki kecil guna yang berlainan dari klausa WHERE. i Outer Join seperti yang ahad ini, alur akan dimasukkan bahkan andaikan mereka tak cocok dengan klausa kondisi ON.
Right (Outer) Join
RIGHT OUTER JOIN bekerja akurat sama, lamun urutan bagan terbalik.
Saat ini abdi tak memiliki buatan NULL akibat saban order memiliki kecocokan dengan record customer. Kita dapat mengubah urutan dari bagan dan membaca buatan yang sama seperti yang kita lakukan dari LEFT OUTER JOIN.
Sekarang kita memiliki nilai-nilai NULL akibat bagan customers siap pada sisi daksina penggabungan.
Kesimpulan
Terima kasih telah belajar artikel ini. Saya harap Anda menikmatinya! Silakan tinggalkan komentar dan pertanyaan, dan miliki hari yang besar!
Jangan lupa buat memeriksa skrip SQL, apps dan add-ons kami di Envato Market. Anda akan membaca melalui dari apa yang mungkin dengan database SQL, dan Anda mungkin menciptakan solusi yang akurat buat membantu Anda dengan pengembangan proyek Anda detik ini.
Ikuti abdi di Twitter, alias berlangganan ke Nettuts+ RSS Feed untuk tutorial pengembangan web terbaik di web.
begitulah detil mengenai SQL untuk Pemula: Bagian 3 - Relasi Database semoga artikel ini berfaedah terima kasih
tulisan ini diposting pada kategori , tanggal 25-08-2019, di kutip dari https://code.tutsplus.com/id/articles/sql-for-beginners-part-3-database-relationships--net-8561
Post a Comment
Post a Comment