Chapter 4 Melakukan Query Data Menggunakan SQL
Panduan ini memberikan gambaran singkat pada pembaca terkait operasi atau query umum yang digunakan untuk mengekstrak data pada database relasional. Hal yang akan dipelajari antara lain:
- Mengakses SQL dari Microsoft Access
- Memilih kolom dari sebuah tabel
- Melakukan filter pada data
- Melakukan operasi untuk membentuk kolom baru
- Menghitung nilai aggregat suatu variabel dan mengurutkan nilai tersebut
- Menggabungkan dua buah tabel data
- Query lainnya
Pada Chapter 4, kita akan menggunakan skema database relasional yang ditampilkan pada Gambar 1.2.
4.1 Mengakses SQL dari Microsoft Access
Untuk melakukan query menggunakan SQL jalankan langkah berikut:
- Pada bagian Ribbon klik Tab Create
- Klik Query Design
- Tutup jendela Show Table yang muncul setelahnya
- Pada Ribbon Design klik SQL View
- Pada jendela query yang muncul, pembaca dapat mengetikkan query yang diinginkan.
- Setelah query diinputkan, klik Run
- Proses tersebut akan menghasilkan tabel data sesuai dengan query yang diinputkan. Untuk mengedit kembali query yang diinputkan, klik View dan pilih SQL View
- Untuk menyimpan query tekan ctrl+s (untuk windows) atau command+s (untuk macOSX).
4.2 Memilih Kolom dari Sebuah Tabel
Untuk memilih kolom pada sebuah tabel, kita dapat menggunakan perintah SELECT
untuk menentukan nama kolom yang akan diambil dan FROM
untuk menentukan tabel yang akan diambil kolomnya. Secara sederhana proses tersebut ditampilkan pada Gambar 4.2.
id_barang
, nama
, dan varian
pada tabel Barang
!
query:
output:
id_barang | nama | varian |
---|---|---|
Ma0 | Makaroni rasa-rasa | original |
Ma1 | Makaroni rasa-rasa | pedas |
dst… |
Barang
!
query:
output:
id_barang | nama | varian | harga_beli | harga_jual |
---|---|---|---|---|
Ma0 | Makaroni rasa-rasa | original | 8000 | 10000 |
Ma1 | Makaroni rasa-rasa | pedas | 80000 | 10000 |
dst… |
Catatan: tanda
*
merupakan klausa untuk memilih seluruh kolom dalam tabel
4.2.1 Memilih Nilai Unik Pada Tabel
Peritah SELECT DISTINCT
digunakan untuk memperoleh nilai unik pada sebuah tabel. Format umum query yang digunakan ditampilkan pada Gambar 4.3.
Pesanan
!
Catatan: fungsi
COUNT()
digunakan untuk menghitung jumlah baris
query:
Catatan : klausa
AS
digunakan untuk memberikan alias (nama baru) pada nama tabel atau nama kolom
output:
Total |
---|
50 |
4.3 Melakukan Filter pada Tabel
Terkadang tidak semua nilai kita inginkan untuk ada dalam data yang kita miliki. Filter terhadap data perlu dilakukan. Filter data dilakukan dengan menggunakan fungsi WHERE
dengan menambahkan kondisi yang diinginkan pada data. Format proses filter data ditampilkan pada Gambar 4.4.
Catatan : untuk jenis data berupa teks berikan tanda kurung pada nilainya dan untuk jenis data tanggal beri tanda “#” pada awal dan akhir karakternya
4.3.1 Operator Perbandingan
Operator perbandingan yang digunakan dalam SQL, antara lain:
- “>” : lebih besar dari
- “<” : lebih kecil dari
- “=” : sama dengan
- “>=” : lebih besar sama dengan
- “<=” : lebih kecil sama dengan
- “<>” : tidak sama dengan
qty
) > 3!
query:
output:
Total |
---|
0 |
4.3.2 Operator AND
, OR
dan NOT
Klausa WHERE
dapat dikombinasikan pula dengan operator AND
, OR
, dan NOT
. Operator AND
dan OR
digunakan untuk melakukan filter observasi berdasarkan satu atau dua kondisi :
- Operator
AND
menampilkan baris jika dua buah kondisi yang dibatasi olehAND
bernilai benar. - Operator
OR
menampilkan baris jika salah satu dari dua kondisi yang dibatasi olehOR
bernilai benar.
Operator NOT
digunakan untuk menampilkan baris jika satu kondisi bernilai tidak benar.
qty
) >= 2 dan jenis barang yang dipesan adalah makaroni rasa-rasa dengan varian original (Ma0
)!
query:
output:
Total |
---|
5166 |
4.3.3 Melakukan Filter Karakter
Filter karakter dapat dilakukan dengan menggunakan opertor LIKE
+ pola teks yang dicari. Pola teks yang digunakan biasanya akan ditulis bersamaan dengan wildcard characters yang ditunjukkan pada Tabel 4.1.
Simbol | Deskripsi | Contoh |
---|---|---|
* |
0 atau lebih karakter | bl* untuk mencari kata bl, black, blue, dan blob |
? |
sebuah karakter tunggal | h?t untuk mencri kata hot, hat, dan hit |
[] |
karakter tunggal dalam kurung | h[oa]t untuk mencari kata hot dan hat, dan bukan hit |
! |
karakter bukan dalam tanda kurung | h[!oa]t untuk mencari kata hit, dan bukan hot dan hat |
- |
range karakter | c[a-b] untuk mencari kata cat dan cbt |
# |
karakter numerik tunggal | 2#5 untuk mencari bilangan 205 s/d 295 |
Beberapa contoh penerapan wildcard character ditampilkan pada Tabel 4.2
Operator LIKE |
Deskripsi |
---|---|
WHERE nama LIKE "a*" |
cari nilai kolom nama yang dimulai dengan huruf a |
WHERE nama LIKE "*a" |
cari nilai kolom nama yang diakhiri dengan huruf a |
WHERE nama LIKE "*an*" |
cari nilai kolom nama yang mengandung kata an |
WHERE nama LIKE "?o*" |
cari nilai kolom nama yang mengandung huruf o pada urutan kedua |
WHERE nama LIKE "a?*?*" |
cari nilai kolom nama yang yang mengandung karakter a sebanyak 3 kali berurutan |
WHERE nama LIKE "a*o" |
cari nilai kolom nama yang diawali dengan a dan diakhiri denga o |
4.3.4 Filter NULL Values
Nilai NULL
merupakan sel pada kolom yang dibiarkan kosong pada proses pencatatan. Terdapat dua buah klausa yang digunakan untuk melakukan filter nilai NULL
, yaitu: IS NOT NULL
(filter baris yang tidak mengandung nilai NULL
) dan IS NULL
(filter baris yang mengandung nilai NULL
). Berikut adalah contoh penerapan menggunakan klausa WHERE
:
WHERE email IS NOT NULL
: lakukan filter pada kolom email untuk memperoleh observasi bukanNULL
.WHERE email IS NULL
: lakukan filter pada kolom email untuk memperoleh observasi bernilaiNULL
.
4.3.5 Operator IN
Operator IN
memungkinkan kita untuk melakukan filter terhadap beberapa nilai. Format umum sintaks yang digunakan ditampilkan pada Gambar 4.5.
query:
output:
Total |
---|
82257 |
4.3.6 Operator BETWEEN
Operator BETWEEN
digunakan untuk melakukan filter pada rentang nilai. Format umum sintaks ditampilkan pada Gambar 4.6.
query:
output:
Total |
---|
12536 |
4.4 Melakukan Operasi Untuk Membentuk Kolom Baru
Untuk membentuk kolom baru pada data, operasi matematis (penjumlahan, pengurangan, transformsi, dll) dapat dilakukan pada SQL melalui baris fungsi SELECT. Kolom baru yang terbentuk selanjutnya dapat diberikan nama baru sesuai dengan kemauan pembaca menggunakan fungsi AS. Format operasi tersebut ditampilkan pada Gambar 4.7.
4.4.1 Operator Matematika
Operator matematika yang digunakan dalam SQL antara lain:
- “+” : opertor penjumlahan
- “-” : operator pengurangan
- "*" : operator perkalian
- “/”" : operator pembagian
- “%” : mencari sisa hasil bagi bilangan pertama terhadap bilangan kedua
- “^” : operator pangkat
id_barang
, nama
, varian
dan lakukan pehitungan keuntungan dengan melakukan operasi pengurangan antara harga_jual-harga_beli
dan beri nama keuntungan
pada kolom baru tersebut!
query:
output:
id_barang | nama | varian | keuntungan |
---|---|---|---|
Ma0 | Makaroni rasa-rasa | original | 2000 |
Ma1 | Makaroni rasa-rasa | pedasa | 2000 |
dst… |
4.4.2 Fungsi
Fungsi-fungsi yang dapat digunakan dapat dilihat pada halaman <https://www.w3schools.com/sql/sql_ref_msaccess.asp >
query:
SELECT id_pesanan, id_pelanggan,id_barang,
DATEPART(m, tgl_pesan) AS bulan,
DATEPART(yyyy, tgl_pesan) AS tahun
FROM Pesanan;
output:
id_pesanan | id_pelanggan | id_barang | bulan | tahun |
---|---|---|---|---|
1 | SBY37507 | Ma2 | 1 | 2019 |
2 | SBY37507 | Ma2 | 1 | 2019 |
dst… |
4.5 Menghitung Nilai Aggregat Suatu Variabel dan Mengurutkan Nilainya
Pehitungan nilai aggregat berguna jika kita ingin mengetahui nilai statistik dari sejumlah kelompok data, seperti: menghitung jumlah transaksi yang dilakukan masing-masing pelanggan. Agar dapat melakukannya data perlu dikelompokkan terlebih dahulu berdasarkan variabel pengelompok. Fungsi yang digunakan untuk melakukannya adalah fungsi GROUP BY. Hasil yang diperoleh selanjutnya dapat diurutkan nilainnya menggunakan fungsi ORDER BY. Format perhitungan nilai aggregat data ditampilkan pada Gambar 4.8
Fungsi-fungsi yang dapat digunakan untuk memperoleh aggregat nilai antara lain:
COUNT()
: menghitung jumlah observasiSUM()
: menghitung total nilai suatu kolomAVG()
: mencari nilai rata-rata suatu kolomMIN()
danMAX()
: mencari nilai minimum dan maksimum suatu kolom
query:
SELECT id_pembeli, id_barang, SUM(qty) AS jumlah_pembelian
FROM Pesanan
WHERE id_barang = "Ma0"
GROUP BY id_pembeli, id_barang
ORDER BY SUM(qty) DESC;
output:
id_pembeli | id_barang | jumlah_pembelian |
---|---|---|
MDN36326 | Ma0 | 738 |
SBY99754 | Ma0 | 715 |
dst.. |
4.6 Menggabungkan Dua Buah Tabel Data
Menggabungkan dua buah tabel data berdasarkan kolom primary key pada tabel pertama dan kolom foreign key pada tabel kedua merupakan operasi yang sering dilakukan pada database. SUatu tabel sering-kali membutuhkan informasi lain untuk memudahkan kita membacanya (contoh: mengabungkan tabel 1 dan tabel 2 untuk memperoleh informasi nama produk yang ada pada tabel 2 menggunakan kolom kunci yang ada pada kedua tabel). Format umum proses penggabungan tabel ditampilkan pada gambar berikut:
Terdapat beberapa jenis join yang ada pada SQL, antara lain:
INNER JOIN
: melakukan join hanya pada observasi dengan elemen kunci yang sama-sama ada pada kedua tabel.LEFT JOIN
: menggabungkan seluruh baris pada tabel kiri dan sebagian baris pada tabel kanan yang elemen kuncinya cocok dengan tabel kiriRIGHT JOIN
: kebalikan dariLEFT JOIN
FULL JOIN
: menggabungkan seluruh observasi pada kedua tabel melalui kolom elemen kunci.
Visualisasi proses join dapat dilihat pada gambar berikut:
id_barang
dan pada hasil join hanya tampilkan kolom id_barang
, nama
, varian
, dan tgl_pesan
!
query:
SELECT Barang.id_barang, Barang.nama,
Barang.varian, Pesanan.tgl_pesan
FROM Barang
INNER JOIN Pesanan
ON Pesanan.id_barang = Barang.id_barang;
output:
id_barang | nama | varian |
---|---|---|
Ma0 | Makaroni rasa-rasa | original |
Ma0 | Makaroni rasa-rasa | original |
dst.. |
4.7 Query Lainnya
4.7.1 Menghitung Usia Konsumen
Buatlah sebuah query untuk menghitung usia konsumen! (gunakan fungsi DATE()
untuk memperoleh tanggal hari ini dan fungsi DATEDIFF()
untuk menghitung selisih tanggal)
query:
SELECT Pembeli.id_pembeli, Pembeli.nama,
Min(Pesanan.tgl_pesan) AS tgl_beli_pertama,
Max(Pesanan.tgl_pesan) AS tgl_beli_terakhir
FROM Pembeli
INNER JOIN Pesanan
ON Pembeli.id_pembeli = Pesanan.id_pembeli
GROUP BY Pembeli.id_pembeli, Pembeli.nama;
output:
id_pembeli | nama | jns_kelamin | kota | usia |
---|---|---|---|---|
BDG15240 | jesika | P | Bandung | 27 |
BDG16736 | desi | P | Bandung | 38 |
dst.. |
4.7.2 Mencari Tanggal Pembelian Pertama dan Terakhir Konsumen
Buatlah sebuah query yang dapat digunakan untuk menentukan tanggal transaksi pertama dan terakhir konsumen!
query:
SELECT Pembeli.id_pembeli, Pembeli.nama,
Min(Pesanan.tgl_pesan) AS tgl_beli_pertama,
Max(Pesanan.tgl_pesan) AS tgl_beli_terakhir
FROM Pembeli
INNER JOIN Pesanan
ON Pembeli.id_pembeli = Pesanan.id_pembeli
GROUP BY Pembeli.id_pembeli, Pembeli.nama;
output:
id_pembei | nama | tgl_beli_pertama | tgl_beli_terakhir |
---|---|---|---|
BDG15240 | jesica | 1/1/2019 | 12/31/2019 |
BDG16736 | desi | 1/1/2019 | 12/31/2019 |
dst.. |
4.7.3 Menghitung Penjualan Bulanan Masing-Masing Produk
Buatlah sebuah query untuk menghitung total penjualan masing-masing produk tiap bulan! (gunakan fungsi DATEPART() untuk memisahkan hari, bulan, dan tahun)
query:
SELECT DATEPART(m, Pesanan.tgl_pesan) AS bulan,
DATEPART(yyyy, Pesanan.tgl_pesan) AS tahun,
Pesanan.id_barang, Barang.nama, Barang.varian,
Sum(Pesanan.qty) AS penjualan
FROM Barang
INNER JOIN Pesanan
ON Barang.id_barang = Pesanan.id_barang
GROUP BY Pesanan.id_barang, Barang.nama,
Barang.varian, DATEPART(m, Pesanan.tgl_pesan),
DATEPART(yyyy, Pesanan.tgl_pesan)
ORDER BY DATEPART(yyyy, Pesanan.tgl_pesan) DESC ,
DATEPART(m, Pesanan.tgl_pesan);
output:
bulan | tahun | id_barang | nama | varian | penjualan |
---|---|---|---|---|---|
1 | 2019 | Ma0 | Makaroni rasa-rasa | original | 2728 |
1 | 2019 | Ma1 | Makaroni rasa-rasa | pedas | 2763 |
dst.. |
4.7.4 Menghitung Jumlah Transaksi Setiap Konsumen
Buatlah sebuah query untuk menghitung jumlah transaksi masing-masing konsumen! (gunakan fungsi DISTICT
untuk memperoleh elemen unik pada tiap tgl_pesan
)
query:
SELECT Pesanan.id_pembeli, Pembeli.nama,
COUNT(Pesanan.tgl_pesan) AS jumlah_transaksi
FROM (SELECT DISTINCT tgl_pesan,id_pelanggan
FROM Pesanan)
INNER JOIN Pembeli
ON Pembeli.id_pembeli = Pesanan.id_pelanggan
GROUP BY Pesanan.id_pelanggan, Pembeli.nama
ORDER BY COUNT(Pesanan.tgl_pesan) DESC;
output:
id_pelanggan | nama | jumlah_transaksi |
---|---|---|
DPS55607 | handoko | 320 |
JKT92062 | rosidi | 319 |
dst.. |