SELECT DISTINCT, TOP N, klausa WHERE dalam SQL ditambah filter, peta, metode array irisan, dan banyak lagi

SQL adalah singkatan dari Structured Query Language. Ini dapat digunakan untuk menyimpan, memperbarui dan mengambil data dalam database. Artikel ini membahas pernyataan SELECT dasar yang mengambil data dari satu tabel dan membahas cara mencapai perilaku serupa di JavaScript menggunakan metode array.

Data

Dalam semua contoh, kita akan mempertimbangkan tabel Products berikut.

Products
Id | Name  | Type  | Price
1  | mango | fruit | 2
2  | lemon | fruit | 1
3  | orange| fruit | 1.5
4  | corn  | vegetable | 0.5

Di bawah ini adalah products array yang digunakan saat mengimplementasikan fungsi yang sama menggunakan metode array.

const products = [
  { id: 1, name: 'mango', type: 'fruit', price: 2 },
  { id: 2, name: 'lemon', type: 'fruit', price: 1 },
  { id: 3, name: 'orange', type: 'fruit', price: 1.5 },
  { id: 4, name: 'corn', type: 'vegetable', price: 0.5 },
];

Pilih

Pernyataan SELECT digunakan untuk mengambil data dari database.

Sintaks berikut mengembalikan semua baris dari tabel tertentu dimana setiap baris hanya berisi kolom tertentu.

SELECT column1, column2, column3
FROM table_name;

SELECT berikutnya mengekstrak semua baris dari tabel. Sebuah baris hanya berisi kolom Id dan Nama.

SELECT Id, Name FROM Products;
Id | Name  |
1  | mango |
2  | lemon |
3  | orange|
4  | corn  |

Dalam array objek, objek tersebut setara dengan baris tabel dan properti objek setara dengan nilai kolom.

Untuk mengekstrak dari sebuah array objek hanya properti yang kita perlukan, kita dapat menggunakan metode array map. Ini mengubah array menjadi array baru menggunakan fungsi pemetaan.

Fungsi pemetaan dalam kasus kita dapat mengambil objek dengan empat properti dan mengembalikan objek baru yang hanya berisi dua properti. Berikut adalah fungsi pemetaannya.

function selectFewerProps(product){
  const {id, name} = product;
  return {id, name};
}

Metode array map dapat menggunakan fungsi pemetaan ini untuk membuat array objek baru yang hanya berisi dua properti yang diperlukan.

const newProducts = products.map(selectFewerProps);
/*[
{id: 1, name: "mango"},
{id: 2, name: "lemon"},
{id: 3, name: "orange"},
{id: 4, name: "corn"}
*/

Pilih Berbeda

Perintah SELECT DISTINCT hanya mengembalikan nilai berbeda dalam kumpulan hasil.

Perintah SQL berikutnya memilih nilai yang berbeda dari kolom Type di tabel Products.

SELECT DISTINCT Type FROM Products;
Type      |
fruit     |
vegetable |

Dalam JavaScript, set terutama digunakan untuk menangani nilai-nilai yang berbeda.

Kami hanya mengekstrak properti tertentu dari array objek menggunakan metode array map

function selectType(obj){
  return obj.type;
}

Hasil pemanggilan metode array map menggunakan selectType sebagai fungsi pemetaannya adalah array baru yang berisi semua tipe. Array yang dikembalikan berisi duplikat.

const allTypes = products.map(selectType);
console.log(allTypes);
//["fruit", "fruit", "fruit", "vegetable"]

Himpunan adalah kumpulan nilai unik. Kapan dapat menghapus duplikat dari array dengan mengubahnya menjadi satu set. Kemudian kami mengubah kembali set tersebut menjadi array baru tanpa duplikat.

const distinctTypes = [... new Set(allTypes)];
console.log(distinctTypes);
//["fruits", "vegetables"]

Perhatikan bahwa pendekatan untuk menghapus duplikat ini hanya berfungsi ketika berhadapan dengan primitif. Dua string yang menyimpan nilai yang sama adalah sama. Dua objek yang berisi kunci properti dan nilai yang sama tidak sama.

SQL DIMANA

Klausa WHERE hanya memilih catatan tertentu dari tabel yang memenuhi kondisi tertentu.

SELECT column1, column2, ...
FROM table_name
WHERE condition;

Perintah SQL berikut hanya memilih baris yang berisi buah-buahan.

SELECT Id, Name FROM Products WHERE type == 'fruit';
Id | Name  |
1  | mango |
2  | lemon |
3  | orange|

Kami hanya memilih elemen tertentu dari array menggunakan array filter. Ini hanya memilih elemen dari array yang lulus tes dari fungsi predikat.

Berikut adalah fungsi predikat kami yang menguji apakah suatu produk adalah buah.

function isFruit(obj){
  return obj.type === 'fruit';
}

Kita meneruskan fungsi predikat isFruit ke metode array filter dan mendapatkan kembali array baru yang hanya berisi buah-buahan.

const newArray = products.filter(isFruit);
console.log(newArray);
/*
{id: 1, name: "mango", type: "fruits", price: 2},
{id: 2, name: "lemon", type: "fruits", price: 1},
{id: 3, name: "orange", type: "fruits", price: 1.5}
*/

Perhatikan bahwa array yang dikembalikan hanya berisi buah-buahan tetapi memiliki lebih banyak properti daripada yang dibutuhkan. Kami menggunakan toFewerProps sebelumnya untuk mengekstrak hanya properti yang diperlukan.

const newArray = products.filter(isFruit).map(toFewerProps);
console.log(newArray);
/*
{id: 1, name: "mango"},
{id: 2, name: "lemon"},
{id: 3, name: "orange"}
*/

Perhatikan bahwa kita merangkai metode array filter dan map untuk mendapatkan hasil yang diperlukan.

SQL DIPESAN OLEH

Klausa ORDER BY mengurutkan hasil dalam urutan menaik atau menurun. Secara default, hasilnya diurutkan dari atas ke atas. Untuk mengurutkan record dalam urutan menurun, kita harus menggunakan kata kunci DESC.

SELECT column1, column2, ...
FROM table_name
ORDER BY column1

Perintah SQL berikut mengambil semua catatan dari tabel Products yang diurutkan berdasarkan nama menaik.

SELECT Id, Name 
FROM Products
ORDER BY Name
Id | Name  |
4  | corn  |
1  | mango |
2  | lemon |
3  | orange|

Metode array sort memungkinkan pengurutan elemen dalam array.

Dibutuhkan fungsi perbandingan yang digunakan untuk mengurutkan elemen. Berikut adalah fungsi perbandingan kami untuk memesan produk secara menaik berdasarkan nama.

Fungsi perbandingan membutuhkan dua elemen. Ketika kedua elemen sama, ia mengembalikan 0. Ketika elemen pertama muncul sebelum elemen kedua, ia mengembalikan -1. Ketika elemen pertama muncul setelah elemen kedua, ia mengembalikan 1.

function orderByName(objA, objB){
  const a = objA.name;
  const b = objB.name;
  return a === b 
    ? 0 
    : a > b 
      ? 1 
      : -1;
}

Di bawah ini adalah hasil pemanggilan metode array sort menggunakan fungsi orderByName bandingkan.

const newProducts = products.sort(orderByName);
console.log(newProducts);
/*
{id: 4, name: "corn", type: "vegetables", price: 0.9},
{id: 2, name: "lemon", type: "fruits", price: 1},
{id: 1, name: "mango", type: "fruits", price: 2},
{id: 3, name: "orange", type: "fruits", price: 1.5}
*/

Hasil sebelumnya mengandung lebih banyak properti daripada yang dibutuhkan. Kami hanya mengekstrak properti yang diperlukan dengan merangkai pemanggilan metode map.

const newProducts = products.sort(orderByName).map(selectFewerProps);
console.log(newProducts);
/*
{id: 4, name: "corn"},
{id: 2, name: "lemon"},
{id: 1, name: "mango"},
{id: 3, name: "orange"}
*/

Pilih Atas

Klausa SELECT TOP menentukan jumlah maksimum rekaman yang akan dikembalikan. Perintahnya berbeda antar database tetapi idenya sama, untuk mengembalikan jumlah record yang maksimal.

SELECT TOP number column1, column2, ...
FROM table_name

Kueri SQL berikutnya hanya memilih dua baris pertama dari tabel Products.

SELECT TOP 2 Id, Name FROM Products;
Id | Name  |
1  | mango |
2  | lemon |

Kita dapat mengekstrak bagian dari array ke dalam array baru menggunakan metode slice.

Metode slice(start, end) mengembalikan sebagian array ke dalam array baru yang berisi semua elemen antara indeks start hingga indeks end. Elemen di indeks akhir tidak disertakan dalam hasil.

Untuk mengekstrak dua elemen pertama dari array, indeks awal adalah 0 dan indeks akhir adalah 2.

const newArray = products.slice(0, 2).map(toFewerProps);
console.log(newArray);
/*
{id: 1, name: "mango"}
{id: 2, name: "lemon"}
*/

Perhatikan bahwa kita merangkai metode array slice dan map untuk mendapatkan hasil yang diperlukan. Panggilan map diperlukan untuk mengekstrak hanya dua properti yang diperlukan.

Catatan Penting

Pernyataan SELECT mengambil data dari database. Ini memungkinkan menentukan kolom yang diperlukan dalam hasil. Mengekstraksi hanya properti tertentu dari array objek dapat dilakukan menggunakan metode map.

Perintah SELECT DISTINCT hanya mengembalikan nilai berbeda dalam kumpulan hasil. Duplikat dapat dihapus dari array dengan mengubahnya menjadi satu set dan kemudian kembali ke array baru dengan nilai unik.

Klausa WHERE hanya memilih catatan tertentu dari tabel yang memenuhi kondisi tertentu. Metode array filter memungkinkan pemilihan hanya elemen tertentu yang memenuhi fungsi pengujian tertentu.

Klausa ORDER BY untuk mengurutkan hasil dalam urutan menaik atau menurun. Metode array sort memungkinkan kita mengurutkan elemen dalam array.

Klausa SELECT TOP menentukan jumlah maksimum rekaman yang akan dikembalikan. Metode array slice memungkinkan kita mengekstrak bagian array menjadi yang baru.

Terima kasih sudah membaca.