Yap, SQL atau Structured Query Language adalah bahasa yang digunakan untuk membuat, mengakses, dan memodifikasi data dalam sebuah database, khususnya pada relational database.1 Apa itu relational database?. Perlu diketahui terlebih dahulu bahwa database atau basis data adalah sebuah sistem untuk menyimpan data dengan rapih. Database dapat diibaratkan sebagai lemari yang menyimpan berbagai macam pakaian.2 Dengan adanya lemari, pakaian kita tersusun, tersimpan, dan tertata dengan rapih sehingga mudah untuk dicari nanti ketika dibutuhkan. Begitupula dengan data, data yang disimpan dalam sebuah database akan memudahkan pengguna data untuk mengaksesnya nanti ketika diperlukan. Data dalam database disimpan dalam bentuk tabel yang memiliki baris dan kolom.
Ilustrasi: Database dan tabel dapat diibaratkan juga seperti menyimpan file-file di dalam folder, dimana database adalah foldernya dan tabel-tabelnya adalah file-filenya.
Tabel database
Nah, sekarang, kita kembali lagi, apa itu relational database? Sebetulnya, relational database adalah kumpulan tabel yang dapat saling terhubung satu sama lain melalui kunci (keys), yaitu primary key dan foreign key. Primary key adalah nilai unik yang dimiliki suatu data. Contoh primary key adalah nomor KTP karena nomor KTP setiap orang tidak akan sama, meskipun diantara dua anak kembar sekalipun. Atau pada contoh gambar tabel saya di atas adalah NIM (Nomor Induk Mahasiswa). Sedangkan foreign key adalah adalah nilai yang mereferensikan data dari tabel lain.
Mungkin kita bisa beranggapan bahwa jika database hanya terdiri dari kumpulan tabel-tabel saja, mengapa tidak menggunakan aplikasi yang lebih familiar seperti Excel saja? Betul, aplikasi seperti excel selain lebih familiar juga lebih user-friendly jika digunakan untuk mengelola data-data berskala kecil. Jika database yang dikelola berjumlah puluhan-ratusan ribu atau bahkan hingga jutaan, maka aplikasi berbasis GUI (Grapical User Interface) akan kewalahan jika diminta untuk mengelola data-data tersebut. Oleh karena itu, SQL yang berbasis CLI (Command Line Interface) diciptakan untuk meng-handle data-data yang lebih besar. Salah satu aplikasi berbasis SQL yang populer adalah MySQL, yang perintah-perintah dasarnya akan kita pelajari pada artikel ini.
Selain alasan di atas, SQL dan MySQL menjadi populer karena beberapa alasan lain, misalnya alasan keamanan data, bersifat open source (gratis), dan memiliki performa yang relatif cukup baik3. Alasan keamanan data artinya, MySQL memberikan sistem manajemen database yang paling aman dan andal sehingga banyak digunakan oleh perusahaan-perusahaan ternama seperti Wordpress, Facebook, Twitter alias X, dan Joomla. MySQL juga bersifat open source karena memiliki lisensi Free Software dan Shareware serta memiliki banyak komunitas dan dokumentasinya. Terkait performa, MySQL memang dirancang untuk aplikasi yang butuh kecepatan sangat tinggi dan memanfaatkan penyimpanan data di memori agar performa aplikasi semakin baik.
Setidaknya, terdapat 3 fungsi dasar MySQL sebagai aplikasi pengelola database. Ketiga fungsi tersebut terkait dengan membuat, memanipulasi, dan mengontrol database. Berikut adalah 3 fungsi MySQL3:
1. DDL (Data Definition Language)
DDL adalah metode query yang digunakan untuk mendefinisikan objek-objek database seperti:
CREATE DATABASE: membuat database baru.
CREATE TABLE: membuat tabel baru dalam database.
ALTER TABLE: mengubah struktur tabel yang sudah ada, misalnya menambah atau menghapus kolom.
DROP DATABASE: menghapus seluruh database beserta seluruh isinya.
DROP TABLE: menghapus tabel beserta data yang ada di dalamnya.
CREATE INDEX: membuat indeks untuk meningkatkan kecepatan pencarian data.
DROP INDEX: menghapus indeks yang sudah ada.
2. DML (Data Manipulation Language)
DML adalah metode query yang digunakan untuk memanipulasi (menambah, mengubah, dan menghapus) data di dalam tabel , seperti:
SELECT: mengambil data dari satu atau lebih tabel.
INSERT INTO: menambahkan data baru ke dalam tabel.
UPDATE: mengubah data yang sudah ada dalam tabel.
DELETE: menghapus data dari tabel.
3. DCL (Data Control Language)
DCL adalah metode query yang digunakan untuk mengatur hak akses dan kontrol terhadap data dalam database , seperti :
GRANT: memberikan hak akses tertentu kepada pengguna atau grup pengguna.
REVOKE: mencabut hak akses yang sudah diberikan kepada pengguna.
Sebelum mulai instalasi, perlu diketahui beberapa tipe data di MySQL. Secara garis besar, tipe data di MySQL dapat dibagi menjadi 4 kategori, yaitu teks & karakter, angka, tanggal & jam/waktu, serta jenis data khusus4:
1. Teks & Karakter (String)
Tipe data paling umum digunakan yang terkait dengan teks & karakter (string) adalah:
VAR: menyimpan teks atau karakter dengan panjang tetap (0-255).
VARCHAR: menyimpan teks atau karakter yang lebih panjang (0-65535).
TEXT: menyimpan string dengan maksimum panjang 65535 bytes.
LONGTEXT: menyimpan string dengan maksium panjang 4,294,967,295 karakter.
2. Angka (Numeric)
Tipe data numeric yang biasa digunakan antara lain:
SMALLINT: menyimpan / mendefinisikan bilangan bulat kecil, berkisar dari -32768 hingga 32767
INT: menyimpan / mendefinisikan data berupa bilangan bulat, antara -2147483648 hingga 2147483647.
BIGINT: menyimpan / mendefinisikan bilangan bulat yang lebih besar, antara -9223372036854775808 hingga 9223372036854775807.
FLOAT: menyimpan / mendefinisikan data berupa angka desimal dengan presisi rendah.
DOUBLE: menyimpan / mendefinisikan data berupa angka desimal dengan presisi tinggi.
3. Tanggal & Jam (Date and Time)
Tipe data tanggal & jam diantaranya yaitu:
DATE: untuk tanggal.
TIME: untuk jam / waktu.
DATETIME: untuk kombinasi tanggal dan jam / waktu.
YEAR: untuk tahun dalam format 4 digit.
4. Jenis Data Khusus
Jenis data khusus ini terbagi menjadi 2, yaitu:
BOOL: untuk menyimpan / mendefinisikan data boolean, 0 dianggap sebagai false dan selain 0 dianggap true.
ENUM: untuk menyimpan / mendefinisikan data berupa nilai yang sudah ditentukan sebelumnya.
Selengkapnya Tentang Tipe Data MySQL
Sebetulnya, masih banyak lagi tipe data yang dapat digunakan di MySQL, namun semuanya mengacu pada 3 kategori besar, yaitu tipe data string, numeric, dan time & date. Selengkapnya mengenai tipe data MySQL dapat dibaca di tautan berikut:
Catatan: Instalasi SQL di Debian via repository official hanya dapat dilakukan di Debian sid (unstable). Jadi, kita akan melakukan instalasi SQL manual menggunakan file .deb resmi dari SQL-nya.
Pertama, kita unduh terlebih dahulu file-nya dari website MySQL (https://dev.mysql.com/downloads/repo/apt/). Kita juga bisa mengunduh filenya via terminal dengan mengetikkan perintah berikut:
Kemudian, kita akan melakukan instalasi repo MySQL dengan mengetikkan perintah berikut:
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
Nanti akan muncul interface berwarna biru (seperti gambar di bawah ini), dimana kita bisa memilih versi SQL yang ingin di-install dan statu connector-nya. Saya biarkan default seperti ini:
Klik Tab di keyboard untuk memindahkan kursor ke Ok di bawah, lalu tekan Enter.
Berikutnya, kita perlu melakukan update repository dan melakukan instalasi mysql server:
sudo apt update
sudo apt install mysql-server
Jika diminta password, silakan buat password untuk root akses ke server MySQL nanti:
Biarkan proses instalasinya berjalan hingga selesai.
Untuk memastikan mysql sudah ter-install, gunakan perintah:
mysql --version
Untuk memastikan mysql sudah berjalan, jalankan perintah:
Syntax dan query yang akan saya bahas di artikel ini adalah syntax dan query yang terkait dengan ketiga fungsi MySQL, yaitu DDL (Data Definition Language), DML (Data Manipulation Language), dan DCL (Data Control Language):
Kita berhasil mengubah nama kolom fed menjadi federation, menghapus kolom birth, dan menambahkan kolom baru yaitu kolom birthday. Namun, seperti terlihat, kedua kolom “federation” dan “birthday” status NULL-nya adalah “YES”, padahal, seharusnya kedua kolom tersebut status NULL-nya “NO” sehingga artinya kolom tersebut tidak boleh kosong. Jadi, mari kita ubah status NULL kedua kolom tersebut.
Kita bisa mengubahnya satu persatu dengan perintah berikut:
Saya memiliki satu database lain, yaitu database “cobachess” yang memiliki tabel “chess grandmaster”. Misalnya, saya ingin menghapus tabel “chess grandmaster” tersebut, maka perintahnya adalah:
Sekarang, kita akan memasukkan data-data Grandmaster Catur ke dalam tabel “Chess Grandmaster” yang ada di dalam database “chessgm”. Misalnya, saya hanya akan memasukkan top 10 elo rating GM berdasarkan rangking FIDE per artikel ini dibuat.
Kita bisa memasukkan data setiap Grandmaster tersebut satu persatu ke dalam tabel dengan perintah:
Hasilnya sama saja. Kita bisa melihat data-data yang baru saja di-input-kan ke dalam tabel “Chess Grandmaster” tersebut dengan perintah:
SELECT*FROM`ChessGrandmaster`;
Menambahkan data ke dalam tabel
Notes: Perhatikan bahwa saya tidak memasukkan nomor urut di kolom id, tapi nomor langsung di-generate karena di awal pembuatan tabel, kita sudah mendefinisikan kolom id sebagai data integer yang “AUTO INCREMENT” dan juga berfungsi sebagai PRIMARY KEY.
Pengambilan data dari tabel dapat dilakukan dengan berbagai cara, menyesuaikan dengan kebutuhan data yang ingin kita ambil. Beberapa cara pengambilan data dari tabel yang akan saya bahas di artikel ini dapat dilakukan dengan 5 cara: |
Menampilkan seluruh data
Untuk menampilkan seluruh data pada kolom yang terdapat di dalam tabel, perintahnya:
SELECT*FROM`ChessGrandmaster`;
Menampilkan seluruh tabel
Menampilkan kolom tertentu
Jika misalnya saya hanya ingin menampilkan kolom “nama” dan “elo” saja, maka perintahnya:
SELECTnama,eloFROM`ChessGrandmaster`;
Menampilkan kolom nama dan elo saja
Menggunakan kondisi untuk memfilter data
Misalnya, saya hanya ingin menampilkan Grandmaster yang memiliki elo di atas 2770 saja, perintahnya:
SELECT*FROM`ChessGrandmaster`WHEREelo>2770;
Memfilter data yang tampil dengan kondisi elo > 2770
Mengurutkan hasil Query
Kita bisa mengurutkan data yang akan ditampilkan, baik mengurutkan secara ASC (ascending / rendah ke tinggi) maupun DESC (descending / tinggi ke rendah). Misalnya saya ingin mengurutkan data Grandmaster dari elo terendah, perintahnya:
SELECT*FROM`ChessGrandmaster`ORDERBYeloASC;
Mengurutkan hasil query secara ASC
Membatasi data yang tampil
Jika kita hanya ingin menampilkan beberapa data, kita bisa melakukannya dengan menggunakan perintah:
Kita sudah membuat database chessgm yang memiliki sebuah tabel, Chess Grandmaster.
Sekarang, kita akan menjawab beberapa pertanyaan menggunakan perintah-perintah SQL yang sudah dibahas sebelumnya. Pertanyaan atau soal-soal yang akan dijawab akan merujuk pada tabel dan database yang sudah kita dibuat tersebut. Berikut adalah pertanyaan-pertanyaan yang perlu dijawab:
Siapakah GM yang paling tinggi & paling rendah ELO rating-nya?
Siapakah GM yang paling tua dan paling muda umurnya?
Berapakah jumlah GM yang berasal dari (federasi) Amerika dan China?
Mari kita jawab…
1. Siapakah GM yang paling tinggi & paling rendah ELO rating-nya?#
Untuk mencari GM dengan ELO rating paling tinggi, kita bisa menggunakan query berikut:
Outputnya akan menunjukkan Magnus Carlsen sebagai GM dengan ELO rating tertinggi:
Untuk mencari GM dengan ELO rating paling rendah, kita bisa menggunakan query berikut:
SELECT*FROM`ChessGrandmaster`ORDERBYeloASCLIMIT1;
Outputnya akan menunjukkan Wesley So sebagai GM dengan ELO rating terendah:
Catatan
Query tersebut tentu memiliki batasan, yaitu kita hanya bisa mendapatkan satu nama saja, meskipun misalnya GM di dalam database yang memiliki ELO terendah ada lebih dari 1 orang. Tapi, tujuan dari soal-soal ini adalah untuk mempraktikkan kembali pelajaran-pelajaran tentang query dasar SQL yang sudah saya jelaskan sebelumnya. Jadi, untuk hasil yang lebih presisi, tentu ada perintah atau query SQL yang lebih sesuai yang akan kita pelajar next time …
2. Siapakah GM yang paling tua dan paling muda umurnya?#
Untuk mencari GM yang paling senior, kita bisa menggunakan perintah berikut: