Contoh Query Database SQL Tingkat Lanjut atau Expert

Contoh Query Database SQL Tingkat Lanjut atau Expert – Hai sobat dewan komputer ketemulagi dengan saya dan pada kesempatan kali ini saya ingin memposting tentang contoh query database tingkat lanjut atau expert. Query ini sudah saya coba pada database MySQL dan dimana-mana juga sebagian besar query work pada database lainnya seperti SQL Server, Oracle, dll. Query database berfungsi untuk manulis sebuah perintah pada database. Pada contoh-contoh kali ini bukanlah query dasar yang biasa digunakan melainkan query yang sudah sulit atau penggabungan dari query-query tersebut oleh karena itu bisa saya sebut tingkat expert.

Langsung saja saya contohkan querynya dibawah ini :

1. PERINTAH SELECT :

   a. IN

Contoh:

– SELECT * FROM tbl_mahasiswa WHERE kode_prodi IN (’si, ‘ti’);

Perintah SQL di atas sama dengan:

– SELECT * FROM tbl_mahasiswa WHERE kode_prodi = ‘si’ OR kode_cabang = ‘ti’;

[Tidak ada batas banyaknya nilai yang bisa ada di dalam IN (…)]

Query ini berfungsi jika sobat ingin memfilter suatu data namun data yang difilter lebih dari satu. Query ini bisa mempersingkat query sobat dibandingkan sobat menggunakan OR. Pada contoh diatas berarti perintahnya menampilkan data yang ada pada tabel mahasiswa yang mempunyai kode_prodi ‘si‘ dan ‘ti’.

   b. NOT IN

Contoh:

– SELECT * FROM tbl_mahasiswa WHERE kode_prodi NOT IN (’si’, ‘ti’);

Perintah SQL di atas sama dengan:

– SELECT * FROM tbl_mahasiswa WHERE kode_prodi <> ‘si’ AND kode_cabang <> ‘ti’;

Query ini kebalikan dari IN. Query ini juga sangat berguna untuk mempersingkat query pada aplikasi yang sobat buat. Nilai NULL tidak akan tampil dalam IN dan NOT IN. Perhatikan perbedaan penggunaan OR dan AND dalam IN dan NOT IN. Pada contoh diatas artinya menampilkan data yang ada pada tabel mahasiswa yang mempunyai nilai kode_prodi selain ‘si‘ dan ‘ti’

2. PERINTAH BETWEEN

   a. BETWEEN

Contoh:

– SELECT * FROM tbl_rekening WHERE saldo BETWEEN 500000 AND 1000000;

Perintah SQL di atas sama dengan:

– SELECT * FROM tbl_rekening WHERE saldo >= 500000 AND saldo <= 1000000;

Nilai yang pertama dalam BETWEEN harus lebih kecil dari nilai yang kedua. Pada contoh diatas artinya menampilkan data yang ada pada tabel rekening dan mempunyai nilai saldo antara 500000  dan 1000000.

   b. NOT BETWEEN

Contoh:

– SELECT * FROM tbl_rekening WHERE saldo NOT BETWEEN 500000 AND 1000000;

Perintah SQL di atas sama dengan:

– SELECT * FROM tbl_rekening WHERE saldo < 500000 OR saldo > 1000000;

Fungsi NOT BETWEEN merupakan kebalikan dari fungsi BETWEEN. Perhatikan perbedaan penggunaan AND dan OR dalam BETWEEN dan NOT BETWEEN. Pada query diatas artinya menampilkan semua data yang ada pada tabel rekening yang mempunyai nilai saldo selain 500000 1000000 atau dengan kata lain di bawah 500000 dan diatas 1000000.

 

3. FUNGSI AGGREGATE

Query dengan fungsi Aggredat antara lain MIN ( ), MAX ( ), COUNT( ), SUM ( ), AVG ( ).

a) MIN ( )

Contoh:

SELECT MIN(saldo) FROM tbl_rekening;

Bisa dibatasi dengan WHERE clause sehingga hanya record(-record) tertentu yang ditelusuri:

SELECT MIN(saldo) FROM tbl_rekening WHERE kode_cabang = ‘clp’;

Digunakan untuk mencari nilai terkecil dari sekumpulan record. Pada contoh pertama artinya tampilkan saldo paling kecil pada tabel rekening. Pada contoh kedua artinya tampilkan saldo paling kecil pada tabel rekening yang mempunyai nilai ‘clp‘ pada kolom kode_cabang.

b) MAX ( )

Contoh:

SELECT MAX(saldo) FROM tbl_rekening;

Juga bisa dibatasi dengan WHERE clause:

SELECT MAX(saldo) FROM tbl_rekening WHERE kode_cabang = ‘clp’;

Digunakan untuk mencari nilai terbesar dari sekumpulan record. Pada contoh pertama artinya tampilkan saldo paling besar pada tabel rekening. Pada contoh kedua artinya tampilkan saldo paling besar pada tabel rekening yang mempunyai nilai ‘clp‘ pada kolom kode_cabang.

c) COUNT ( )

Contoh:

a. SELECT COUNT(*) FROM tbl_mahasiswa;
b. SELECT COUNT(nama_mahasiswaFROM tbl_mahasiswa;
c. SELECT COUNT(alamat_mahasiswa) FROM tbl_mahasiswa;

Juga bisa dibatasi dengan WHERE clause.

SELECT COUNT(sks) as jmlsks from tbl_matkul where sks=4;

Jika kita ingin menghitung banyaknya record yang unik (tidak ada pengulangan), gunakan DISTINCT:

SELECT COUNT(DISTINCT nama_mahasiswa) FROM tbl_mahasiswa;

Digunakan untuk menghitung banyaknya record.

1. Pada contoh paling atas a,b,c artinya sama yaitu menampilkan jumlah baris pada tabel mahasiswa.

2. Pada contoh kedua yang menggunakan WHERE artinya menampilkan jumlah baris yang diberi nama ‘jmlsks’  dari tabel matkul yang mempunyai nilai 4 pada kolom ‘sks’, gunanya diberi nama ‘jmlsks’ adalah jika sobat ingin menampilkan data pada website tentunya memanggil nama kolomnya/headernya. Jika menggunakan fungsi ini headernya dideklarasikan sebagai jmlsks.

3. Pada contoh paling bawah yang menggunakan DISTINC artinya menampilkan jumlah yang pada kolom nama_mahasiswa tidak sama yang ada pada tabel mahasiswa.

d) SUM ( )

Contoh:

SELECT SUM(saldo) FROM tbl_rekening;

Bisa dibatasi dengan WHERE clause:

SELECT SUM(saldo) FROM tbl_rekening WHERE kode_cabang = ‘CLP’;

Digunakan untuk menjumlahkan nilai-nilai dari sekumpulan record.

1. Pada contoh pertama artinya menampilkan hasil penjumlahan semua saldo yang ada pada tabel rekening.

2. Pada contoh kedua artinya menampilkan hasil penjumlahan semua saldo yang ada pada tabel rekening yang mempunyai kode_cabangCLP‘.

e) AVG ( )

Contoh:

1. SELECT AVG(saldo) FROM tbl_rekening;

Bisa dibatasi dengan WHERE clause:

2. SELECT AVG(saldo) FROM tbl_rekening WHERE kode_cabang = ‘CLP’;

Beberapa aggregate functions bisa digabungkan dalam satu perintah SQL:

3. SELECT MIN(saldo), MAX(saldo), AVG(saldo) FROM tbl_rekening;

Bisa menambahkan ekspresi aritmetika:

4. SELECT SUM(saldo + 1000) FROM tbl_rekening;
5. SELECT SUM(saldo) + 1000 FROM tbl_rekening;
6. SELECT MAX(saldo) – MIN(saldo) FROM tbl_rekening;

Digunakan untuk menghitung rata-rata nilai dari sekumpulan record.

1. Artinya menampilkan jumlah rata-rata saldo yang ada pada tabel rekening.

2. Artinya menampilkan jumlah rata-rata saldo yang ada pada tabel rekening yang mempunyai nilai ‘CLP’ pada kolom kode_cabang.

3. Artinya menampilkan saldo terkecil, saldo terbesar, rata-rata saldo pada tabel rekening.

4. Artinya menampilkan jumlah saldo yang sebelumnya ditambahkan 1000, misalkan ada 3 record yaitu mempunyai nilai 5000, 6000 dan 7000, maka rumusnya akan menjadi (5000+1000)+(6000+1000)+(7000+1000)=21000.

5. Artinya menampilkan jumlah saldo keseluruhan ditambah 1000, misalkan ada 3 record yaitu mempunyai nilai 5000, 6000 dan 7000, maka rumusnya akan menjadi (5000+6000+7000)+1000=19000.

6. Artinya rumus pengurangan yaitu saldo paling besar dikurangi saldo paling kecil yang ada pada tabel rekening.

 

4. GROUP BY

Digunakan untuk mengelompokkan sekumpulan record berdasarkan kolom(-kolom) tertentu.

Contoh:

• SELECT jenis_transaksi FROM tbl_transaksi GROUP BY jenis_transaksi;
• SELECT jenis_transaksi, tanggal FROM tbl_transaksi GROUP BY jenis_transaksi, tanggal;

Hasil yang sama bisa didapatkan dengan menggunakan DISTINCT:

• SELECT DISTINCT jenis_transaksi, tanggal FROM tbl_transaksi;

Yang harus diperhatikan ketika menggunakan GROUP BY. Jika menggunakan GROUP BY, semua field yang ingin ditampilkan dalam SELECT harus tercantum di GROUP BY.

Contoh yang salah:

– SELECT jenis_transaksi, tanggal FROM tbl_transaksi GROUP BY jenis_transaksi;
– SELECT jenis_transaksi, tanggal FROM tbl_transaksi GROUP BY tanggal;

Contoh yang benar:

– SELECT jenis_transaksi, tanggal FROM tbl_transaksi GROUP BY jenis_transaksi, tanggal;

 

5. HAVING

Merupakan pasangan dari GROUP BY, digunakan untuk membatasi kelompok yang ditampilkan:

Contoh :

SELECT jenis_transaksi, tanggal FROM tbl_transaksi
GROUP BY jenis_transaksi, tanggal
HAVING jenis_transaksi = ‘kredit’;

Hasil yang sama bisa didapatkan dengan:

SELECT jenis_transaksi, tanggal FROM tbl_transaksi
WHERE jenis_transaksi = ‘kredit’
GROUP BY jenis_transaksi, tanggal;

Yang harus diperhatikan :

• Jika menggunakan HAVING, maka pembatasan dilakukan setelah hasil dikelompokkan dalam GROUP BY.

• Jika menggunakan WHERE, maka pembatasan dilakukan sebelum hasil dikelompokkan dalam GROUP BY.

• Field(-field) yang disebut di HAVING harus ada di GROUP BY, atau berupa aggregate functions.

Contoh yang salah:

SELECT jenis_transaksi, tanggal FROM tbl_transaksi
GROUP BY jenis_transaksi, tanggal
HAVING jumlah = 50000;

Contoh yang benar:

SELECT jenis_transaksi, tanggal FROM tbl_transaksi
WHERE jumlah = 50000
GROUP BY jenis_transaksi, tanggal;

Penggabungan GROUP BY dengan Aggregate

GROUP BY sangat cocok untuk aggregate functions. Dengan menggunakan GROUP BY, kita bisa mengelompokkan record-record dan menghitung min, max, count, sum, dan avg untuk masing-masing kelompok.

Contoh:

SELECT kode_cabang, MIN(saldo), MAX(saldo), COUNT(*), SUM(saldo), AVG(saldo)
FROM tbl_rekening
GROUP BY kode_cabang;

Bisa digabungkan dengan tabel join dan ORDER BY:

SELECT nama_cabang, SUM(saldo)
FROM tbl_rekening NATURAL JOIN cabang_bank
GROUP BY nama_cabang
ORDER BY nama_cabang;

Hasil di atas menampilkan total saldo untuk masing-masing cabang_bank.

Perintah SQL di bawah menampilkan banyaknya nasabah yang dilayani oleh masing-masing cabang bank:

SELECT nama_cabang, COUNT(DISTINCT id_nasabah)
FROM cabang_bank NATURAL JOIN rekening NATURAL JOIN nasabah_has_rekening
GROUP BY nama_cabang
ORDER BY nama_cabang;

Contoh dengan HAVING:

SELECT kode_cabang, SUM(saldo), COUNT(*)
FROM rekening
GROUP BY kode_cabang
HAVING SUM(saldo) >= 5000000
ORDER BY kode_cabang;

Karena SUM(saldo) hanya bisa dihitung setelah hasil dikelompokkan dengan GROUP BY, maka kita harus menggunakan HAVING untuk membatasi hasil berdasarkan SUM(saldo) >= 5000000. Kita tidak bisa menggunakan WHERE.

 

Query diatas merupakan query yang wajib sobat pelajari karena jika sobat membuat aplikasi apalagi untuk sebuah perusahaan, sobat tidak bisa hanya dengan query itu-itu saja yang standar karena nanti akan menyebabkan aplikasi tidak berkalan dengan maksimal. Sekian postingan saya tentang Contoh Query Database SQL Tingkat Lanjut atau Expert. Jika ada salah-salah mohon dikoreksi, jika sobat mempunyai fungsi yang sulit namun belum ada pada postingan diatas mohon bisa diberitahu karena saya juga masih belajar dan kita tidak bisa puas dengan ilmu yang kita miliki karena dunia pemrograman akan berkembang sepanjang waktu. Sekian dan terimakasih.

Sampai bertemu pada postingan saya selanjutnya..

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × 4 =