Sunday, November 19, 2017

Belajar Node.js Part 22 - Join MySQL




Kita bisa mengombinasikan row dari 2 atau lebih tabel, berdasarkan kolom-kolom yang berelasi diantaranya, dengan menggunakan pernyataan "JOIN".

[MY_ADS/]

Misalkan kita memiliki tabel "users" dan tabel "products":

users
[
  { id: 1, name: 'Jack 1', favorite_product: 154},
  { id: 2, name: 'Jack 2', favorite_product: 154},
  { id: 3, name: 'Jack 3', favorite_product: 155},
  { id: 4, name: 'Jack 4', favorite_product:},
  { id: 5, name: 'Jack 5', favorite_product:}
]
products
[
  { id: 154, name: 'Produk 1' },
  { id: 155, name: 'Produk 2' },
  { id: 156, name: 'Produk 3' }
]

Kedua tabel ini dapat dikombinasikan dengan menggunakan field "favorite_product" dan field "products id"

Contohnya, jika kita ingin menyeleksi records yang match di antara kedua tabel:

var mysql = require('mysql');

var connection = mysql.createConnection({
  host: "localhost",
  user: "nama_anda",
  password: "password_anda",
  database: "dbsaya"
});

connection.connect(function(err) {
  if (err) throw err;
  var sql = "SELECT users.name AS user, products.name AS favorite FROM users JOIN products ON users.favorite_product = products.id";
  connection.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Simpan kode tersebut dengan nama "mysql_15.js", kemudian jalankan perintah ini:
node mysql_15.js
Hasilnya akan seperti ini:

[
  { user: 'Jack 1', favorite: 'Produk 1' },
  { user: 'Jack 2', favorite: 'Produk 1' },
  { user: 'Jack 3', favorite: 'Produk 2' }
]

Seperti yang bisa kita lihat dari hasil di atas, hanya records yang match pada kedua tabel saja yang ditampilkan.

Left Join

Jika kita ingin mengembalikan semua users, tidak peduli apakah mereka memiliki favorite_product atau tidak, gunakan LEFT JOIN.

Contohnya, jika kita ingin menyeleksi semua users dan favorite product-nya:

SELECT users.name AS user,
products.name AS favorite
FROM users
LEFT JOIN products ON users.favorite_product = products.id

Hasilnya akan seperti ini:

[
  { user: 'Jack 1', favorite: 'Produk 1' },
  { user: 'Jack 2', favorite: 'Produk 1' },
  { user: 'Jack 3', favorite: 'Produk 2' },
  { user: 'Jack 4', favorite: null },
  { user: 'Jack 5', favorite: null }
]

Right Join

Jika kita ingin mengembalikan semua products dan semua users yang mem-favorite-kannya, meskipun tidak ada user yang mem-favorite-kannya, gunakan RIGHT JOIN.

Contohnya:

SELECT users.name AS user,
products.name AS favorite
FROM users
RIGHT JOIN products ON users.favorite_product = products.id

Hasilnya akan seperti ini:

[
  { user: 'Jack 1', favorite: 'Produk 1' },
  { user: 'Jack 2', favorite: 'Produk 1' },
  { user: 'Jack 3', favorite: 'Produk 2' },
  { user: null, favorite: 'Produk 3' }
]

Catatan: Jack 4 dan Jack 5, yang tidak mem-favorite-kan apapun, tidak termasuk dalam hasil.

Sumber:
https://www.w3schoools.com