Pengantar Database Bergabung dengan MariaDB dan MySQL Bergabunglah Contoh

Pengantar Database Bergabung dengan MariaDB dan MySQL Bergabunglah Contoh

Objektif

Belajar mengetahui berbagai jenis gabungan dan cara menggunakannya bekerja dengan database mysql atau mariadb

Persyaratan

  • Tidak ada persyaratan khusus

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
    langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - Diberikan perintah linux untuk dieksekusi sebagai pengguna biasa

Perkenalan

Dalam sistem database relasional, data ini disusun dalam tabel, disusun berdasarkan baris dan kolom. Setiap baris adalah instance dari entitas yang diwakili oleh tabel, dengan kolom yang digunakan sebagai propertinya. Hubungan antar tabel dibuat dengan penggunaan kunci asing, dan pernyataan yang dengannya kita dapat melakukan pertanyaan yang menjangkau beberapa tabel yang disebut a bergabung. Dalam tutorial ini kita akan melihat berbagai jenis gabungan yang tersedia saat menggunakan mysql atau mariadb.

Database "film_store"

Apa yang akan kita lakukan dalam tutorial ini, adalah mereproduksi beberapa kasus konkret di mana gabungan dapat membantu kita mencapai apa yang kita inginkan.

Hal pertama yang harus dilakukan adalah membuat database pengujian. Katakanlah kami memiliki toko film dan kami perlu melacak judul yang kami miliki: kami akan membuat database "film_store" dan meja untuk meng -host informasi tentang sutradara film:

Mariadb [(tidak ada)]> buat basis data film_store; Mariadb [(tidak ada)]> Gunakan film_store; Mariadb [film_store]> buat sutradara tabel ( -> id Smallint (1) Unsigned not null auto_increment, -> name varchar (35) not null, -> bilthDate Date not null, -> primer kunci (id)); 
Menyalin

Berikut adalah representasi visual dari tabel yang baru saja kami buat:

Mariadb [film]> Jelaskan sutradara; +-----------+----------------------+------+-----+- --------+ ----------------+ | Bidang | Ketik | Null | Kunci | Default | Ekstra | +-----------+----------------------+------+-----+- --------+ ----------------+ | ID | Smallint (1) Unsigned | Tidak | Pri | Null | auto_increment | | Nama | Varchar (35) | Tidak | | Null | | | Tanggal lahir | Tanggal | Tidak | | Null | | +-----------+----------------------+------+-----+---------+----------------+ 
Menyalin

Pertama kami membuat basis data film_store, daripada kami “memasukkannya” dengan menggunakan MENGGUNAKAN pernyataan, dan akhirnya membuat tabel sutradara. Seperti yang kami katakan sebelumnya, setiap baris dalam tabel mewakili "contoh" entitas yang diwakili oleh tabel itu sendiri, dalam hal ini seorang sutradara film.

Setiap sutradara memiliki beberapa properti yang diwakili oleh kolom tabel, jadi misalnya, setiap direktur memiliki nama dan ulang tahun. Setiap baris memiliki pengidentifikasi unik, yang merupakan nilai di kolom yang merupakan kunci utama dari meja.

Dalam contoh ini kunci utama juga yang disebut a Kunci pengganti. Jenis kunci ini adalah pengidentifikasi "buatan", dalam arti bahwa itu tidak terkait dengan sifat entitas (direktori dalam kasus ini): tidak memiliki makna semantik, dan dihasilkan dan digunakan oleh sistem untuknya sendiri bekerja internal. Kuncinya dihasilkan secara otomatis, dan karena memiliki Auto_increment Properti, ini dimasukkan secara bertahap setiap kali kami membuat baris baru, jadi kami tidak perlu memasukkannya secara eksplisit:

Mariadb [film_store]> Insert Into Director ('Name', 'BirthDate') Values-> ('George Lucas', '1944-05-14'),-> ('George Romero', '1940-02-04' ),-> ('John McTiernan', '1951-01-08'),-> ('Rian Johnson', '1973-12-17'); 
Menyalin

Tabel kami sekarang berisi empat sutradara:

+----+----------------+------------+ | ID | Nama | Tanggal lahir | +----+----------------+------------+| 1 | George Lucas | 1944-05-14 | | 2 | George Romero | 1940-02-04 | | 3 | John McTiernan | 1951-01-08 | | 4 | Rian Johnson | 1973-12-17 | +----+----------------+------------+ 
Menyalin

Masing -masing sutradara memiliki satu atau lebih film yang terkait dengannya: bagaimana kita bisa mewakili mereka ? Kami tidak dapat menambahkan informasi tentang film dalam tabel ini: ini berarti memiliki banyak data yang diulang: setiap kali kami menambahkan film, kami akan mengulangi informasi sutradara, dan ini akan sangat buruk untuk sedikitnya. Kita perlu membuat tabel khusus untuk meng -host informasi film, dan pada saat yang sama, kita harus dapat membuat referensi antara itu dan sutradara. Itulah yang kunci asing adalah untuk:



Mariadb [film_store]> buat judul tabel ( -> id Smallint (1) Unsigned not null auto_increment, -> name varchar (35) not null, -> release_date Date not null, -> genre varchar (10) not null, - Director_id Smallint (1) Unsigned Not Null, -> Primary Key (ID), -> Kunci Asing (Director_ID) Direktur Referensi (ID)); 
Menyalin

Kami membuat tabel seperti sebelumnya, mendefinisikan kunci utama, dan menambahkan kendala kunci asing. Ini adalah bagaimana kami mengaktifkan hubungan antara dua tabel: Pada dasarnya kami memaksakan agar suatu baris dimasukkan, nilai kolom direktur_id harus sesuai dengan nilai di kolom ID tabel sutradara (yang unik, karena itu adalah Tabel Kunci Utama). Dengan kata lain, setiap judul harus memiliki referensi ke sutradara yang ada di database kami, jika tidak kesalahan akan dipicu: Ini memastikan konsistensi.

Mari masukkan beberapa judul di tabel kami:

Mariadb [film_store]> masukkan ke dalam judul ('nama', 'rilis_date', 'genre', 'sutradara_id') nilai-> ('Night of the Living Dead', '1968-10-01', 'Horror', 2 ),-> ('Revenge of the Sith', '2005-05-19', 'Space Opera', 1),-> ('Die Hard', '1988-07-15', 'Action', 3) ; 
Menyalin

Itu saja, kami memiliki beberapa judul. Pertama -tama kami memasukkan karya agung film yaitu 'Night of the Living Dead', yang disutradarai oleh George Romero: Amati bahwa 2 Di kolom direktur_id sesuai dengan ID George Romero di tabel sutradara.

Menggunakan prinsip yang sama kami memasukkan film dari George Lucas (ID 1 di Tabel Sutradara), 'Revenge of the Sith', dan 'Die Hard', sebuah film aksi terkenal yang disutradarai oleh John McTiernan (ID 3 di Tabel Sutradara). Saat ini kami tidak memiliki film dari Rian Johnson: ada alasan untuk ini (terlepas dari fakta bahwa saya kecewa dengan Jedi terakhir), dan kita akan melihatnya nanti. Sekarang kita mengatur struktur basis data yang sangat mendasar, kita dapat mulai membicarakannya bergabung.

Berapa banyak jenis gabungan?

Nama yang berbeda digunakan untuk merujuk jenis gabungan yang sama, tetapi pada dasarnya kami miliki batin Dan luar bergabung. Yang pertama juga dipanggil Bergabung dengan silang atau sederhana bergabung (Mereka sinonim di MySQL - Mariadb). Kategori terakhir termasuk kiri Dan Kanan bergabung.



Batin bergabung

BERNAGE BAWAH Biarkan kami cocok dengan baris dalam satu meja dengan baris di yang lain. Asosiasi ini dapat didasarkan pada hubungan antara dua tabel atau dapat dibuat terlepas dari itu: dalam hal ini semua baris tabel akan bergabung dengan semua baris yang lain, menghasilkan apa yang disebut a Produk Cartesian. Ini tidak terlalu masuk akal dalam contoh kita, tetapi mari kita tunjukkan:

Mariadb [film_store]> SELECT * dari judul Direktur Bergabung; +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | ID | Nama | Tanggal lahir | ID | Nama | rilis_date | Genre | direktur_id | +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | 1 | George Lucas | 1944-05-14 | 1 | Night of the Living Dead | 1968-10-01 | Horor | 2 | | 1 | George Lucas | 1944-05-14 | 2 | Revenge of the Sith | 2005-05-19 | Oper ruang | 1 | | 1 | George Lucas | 1944-05-14 | 3 | Mati keras | 1988-07-15 | aksi | 3 | | 2 | George Romero | 1940-02-04 | 1 | Night of the Living Dead | 1968-10-01 | Horor | 2 | | 2 | George Romero | 1940-02-04 | 2 | Revenge of the Sith | 2005-05-19 | Oper ruang | 1 | | 2 | George Romero | 1940-02-04 | 3 | Mati keras | 1988-07-15 | aksi | 3 | | 3 | John McTiernan | 1951-01-08 | 1 | Night of the Living Dead | 1968-10-01 | Horor | 2 | | 3 | John McTiernan | 1951-01-08 | 2 | Revenge of the Sith | 2005-05-19 | Oper ruang | 1 | | 3 | John McTiernan | 1951-01-08 | 3 | Mati keras | 1988-07-15 | aksi | 3 | | 4 | Rian Johnson | 1973-12-17 | 1 | Night of the Living Dead | 1968-10-01 | Horor | 2 | | 4 | Rian Johnson | 1973-12-17 | 2 | Revenge of the Sith | 2005-05-19 | Oper ruang | 1 | | 4 | Rian Johnson | 1973-12-17 | 3 | Mati keras | 1988-07-15 | aksi | 3 | +----+----------------+------------+----+--------------------------+--------------+------------+-------------+ 
Menyalin

Seperti yang Anda lihat, setiap baris satu tabel telah dikombinasikan dengan setiap baris yang lain, menghasilkan 12 baris.

Sekarang mari kita lihat kasus penggunaan yang berbeda untuk bergabung. Katakanlah kami ingin memeriksa database kami untuk memeriksa semua film yang disutradarai oleh George Lucas yang kami miliki. Untuk menyelesaikan tugas ini, kita harus membatasi gabungan dengan a PADA Klausul, sehingga akan didasarkan pada hubungan antara judul dan sutradara mereka:

Mariadb [film_store]> sutradara pilih.Nama, judul.Nama sebagai film_title dari sutradara -> bergabung dengan judul di sutradara.ID = Judul.Director_id -> di mana sutradara.name = "George Lucas" 
Menyalin

Berikut adalah hasil dari kueri di atas:

+--------------+---------------------+ | Nama | film_title | +--------------+---------------------+| George Lucas | Revenge of the Sith | +--------------+---------------------+ 
Menyalin

Menggunakan gabungan terbatas, berdasarkan hubungan antara dua tabel, kami menemukan bahwa kami hanya memiliki satu judul George Lucas di toko: Revenge of the Sith. Tidak hanya kami membatasi gabungan di pangkalan hubungan yang ada di antara kedua tabel, tetapi kami lebih lanjut membatasi permintaan untuk film yang disutradarai oleh Lucas, menggunakan DI MANA penyataan. Jika kami telah menghilangkannya, kueri akan menghasilkan meja dengan semua sutradara yang ada - korespondensi film:

+----------------+--------------------------+ | Nama | film_title | +----------------+--------------------------+| George Lucas | Revenge of the Sith | | George Romero | Night of the Living Dead | | John McTiernan | Mati keras | +----------------+--------------------------+ 
Menyalin

Perhatikan bahwa Rian Johnson tidak termasuk dalam kueri. Mengapa ini terjadi? Ini adalah karakteristik dari bergabung dalam: mereka hanya menunjukkan baris di mana ada kecocokan di kedua tabel. Karena tidak ada korespondensi untuk Rian Johnson yang ada di tabel judul, kami tidak memiliki hasil untuk sutradara ini.



Outer gabungan

Jenis gabungan lain yang kami miliki adalah outer gabungan. Kategori ini sendiri dibagi Kiri Bergabung Dan Hak bergabung. Apa bedanya dengan gabungan batin yang kami lihat di atas ? Sebaliknya terhadap apa yang terjadi dengan gabungan batin, gabungan luar menunjukkan kecocokan bahkan ketika korespondensi tidak ada di kedua tabel. Saat itu masalahnya, itu akan menunjukkan nilai nol di kolom yang diminta dari tabel di mana pertandingan tidak ada.Ini bisa berguna, misalnya, jika kita ingin tahu apakah ada beberapa sutradara yang terkait dengan tidak ada film. Dalam kasus kami, kami sudah tahu itu masalahnya, tetapi mari kita verifikasi menggunakan gabungan kiri:

Mariadb [film_store]> sutradara pilih.Nama, judul.Name As Movie_title -> dari sutradara kiri bergabung dengan judul di judul.Director_id = Direktur.pengenal 
Menyalin

Hasil kueri:

+----------------+--------------------------+ | Nama | film_title | +----------------+--------------------------+| George Romero | Night of the Living Dead | | George Lucas | Revenge of the Sith | | John McTiernan | Mati keras | | Rian Johnson | Null | +----------------+--------------------------+ 
Menyalin

Satu -satunya sutradara yang tidak memiliki film di toko kami adalah Rian Johnson. Saat menggunakan luar bergabung dengan urutan di mana kami menentukan tabel itu penting. Misalnya, menggunakan a Kiri bergabung, Seperti yang baru saja kami lakukan di atas, ketika baris dari meja kiri (dalam kasus ini direktur) tidak memiliki kecocokan di barisan tabel kanan (judul), a BATAL Nilai ditentukan dalam setiap kolom yang diminta dari yang terakhir; Ketika kecocokan ditemukan, sebaliknya, nilainya ditampilkan seperti halnya terjadi dengan gabungan batin.

A Bergabung dengan benar bekerja sama, satu -satunya perbedaan adalah bahwa peran tabel terbalik. Di kanan bergabung dengan semua baris tabel kanan yang tidak cocok di tabel kiri ditandai dengan nilai nol.

Properti ini dari luar bergabung ini sangat berguna, tetapi ada kasus di mana sedikit kebingungan dapat muncul, terutama ketika tabel memiliki nilai nol diperbolehkan di beberapa kolomnya.

Tutorial Linux Terkait:

  • Instal MySQL di Ubuntu 20.04 LTS Linux
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara menginstal mysql di almalinux
  • Cara mengubah kata sandi pengguna mariadb
  • Pengantar Mesin Penyimpanan MySQL
  • Aplikasi antarmuka pengguna grafis (GUI) untuk mengelola…
  • Ubuntu 20.04 WordPress dengan Instalasi Apache
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Instalasi OpenLitespeed WordPress
  • Instalasi ampache raspberry pi