Panduan lengkap dan praktis untuk menguasai SQL dalam bahasa Indonesia
DDL digunakan untuk mendefinisikan dan mengelola struktur database seperti tabel, indeks, dan skema. Perintah ini bersifat permanen dan sering digunakan saat merancang database.
| Perintah | Sintaks | Deskripsi |
|---|---|---|
| CREATE DATABASE | CREATE DATABASE nama_database; |
Membuat database baru. |
| CREATE TABLE | CREATE TABLE nama_tabel (kolom1 tipe_data CONSTRAINT, ...); |
Membuat tabel dengan kolom dan batasan tertentu. |
| ALTER TABLE | ALTER TABLE nama_tabel ADD/MODIFY/DROP kolom tipe_data; |
Mengubah struktur tabel (menambah, mengubah, atau menghapus kolom). |
| DROP TABLE | DROP TABLE nama_tabel [CASCADE]; |
Menghapus tabel beserta data dan ketergantungannya jika CASCADE digunakan. |
| CREATE INDEX | CREATE INDEX nama_indeks ON nama_tabel (kolom); |
Meningkatkan performa pencarian dengan indeks. |
-- Membuat tabel
CREATE TABLE karyawan (
id_karyawan INT PRIMARY KEY AUTO_INCREMENT,
nama VARCHAR(100) NOT NULL,
gaji DECIMAL(10,2),
tanggal_masuk DATE
);
-- Menambahkan kolom baru
ALTER TABLE karyawan ADD jabatan VARCHAR(50);
-- Menghapus tabel
DROP TABLE karyawan;
Contoh ini menunjukkan pembuatan tabel "karyawan", penambahan kolom "jabatan", dan penghapusan tabel.
NOT NULL saat membuat kolom.CASCADE.VARCHAR(10) untuk teks panjang).DML digunakan untuk memanipulasi data dalam tabel. Perintah ini bersifat sementara sampai di-COMMIT dan dapat dibatalkan dengan ROLLBACK.
| Perintah | Sintaks | Deskripsi |
|---|---|---|
| SELECT | SELECT kolom FROM tabel [WHERE kondisi] [ORDER BY kolom]; |
Mengambil data dengan filter dan pengurutan opsional. |
| INSERT | INSERT INTO tabel (kolom1, ...) VALUES (nilai1, ...); |
Menambahkan data baru. |
| UPDATE | UPDATE tabel SET kolom = nilai [WHERE kondisi]; |
Mengubah data yang ada. |
| DELETE | DELETE FROM tabel [WHERE kondisi]; |
Menghapus data tertentu. |
-- Menambahkan data
INSERT INTO karyawan (nama, gaji, tanggal_masuk)
VALUES ('Budi', 5000000.00, '2023-01-15');
-- Mengambil data
SELECT nama, gaji FROM karyawan WHERE gaji > 4000000 ORDER BY gaji DESC;
-- Mengubah data
UPDATE karyawan SET gaji = 5500000.00 WHERE nama = 'Budi';
-- Menghapus data
DELETE FROM karyawan WHERE tanggal_masuk < '2023-01-01';
Contoh ini mencakup penambahan, pengambilan, pengubahan, dan penghapusan data karyawan.
WHERE pada UPDATE atau DELETE, menyebabkan perubahan pada semua baris.INT).ORDER BY saat urutan hasil penting.NOT NULL saat INSERT.Fungsi agregat mengolah sekumpulan data untuk menghasilkan satu nilai ringkasan, sering digunakan dengan GROUP BY dan HAVING.
| Fungsi | Sintaks | Deskripsi |
|---|---|---|
| COUNT | COUNT(kolom | *) |
Menghitung jumlah baris atau nilai non-NULL. |
| SUM | SUM(kolom) |
Menjumlahkan nilai numerik. |
| AVG | AVG(kolom) |
Menghitung rata-rata. |
| MIN | MIN(kolom) |
Mencari nilai terkecil. |
| MAX | MAX(kolom) |
Mencari nilai terbesar. |
SELECT
jabatan,
COUNT(*) AS jumlah_karyawan,
AVG(gaji) AS rata_rata_gaji,
MAX(gaji) AS gaji_tertinggi
FROM karyawan
GROUP BY jabatan
HAVING COUNT(*) > 5;
Query ini menghitung jumlah karyawan, rata-rata gaji, dan gaji tertinggi per jabatan, hanya menampilkan jabatan dengan lebih dari 5 karyawan.
GROUP BY saat mengelompokkan data diperlukan.SUM atau AVG pada kolom non-numerik.HAVING untuk memfilter hasil agregat (tidak bisa pakai WHERE).NULL yang dapat memengaruhi hasil.JOIN menggabungkan data dari beberapa tabel berdasarkan kolom terkait, penting untuk analisis relasional.
| Tipe JOIN | Sintaks | Deskripsi |
|---|---|---|
| INNER JOIN | tabel1 INNER JOIN tabel2 ON kondisi |
Data yang cocok di kedua tabel. |
| LEFT JOIN | tabel1 LEFT JOIN tabel2 ON kondisi |
Semua data dari tabel kiri, cocok atau NULL dari kanan. |
| RIGHT JOIN | tabel1 RIGHT JOIN tabel2 ON kondisi |
Semua data dari tabel kanan, cocok atau NULL dari kiri. |
| FULL JOIN | tabel1 FULL JOIN tabel2 ON kondisi |
Semua data dari kedua tabel, cocok atau NULL. |
SELECT k.nama, d.nama_departemen
FROM karyawan k
LEFT JOIN departemen d ON k.id_departemen = d.id_departemen;
Query ini mengambil nama karyawan dan nama departemennya, termasuk karyawan tanpa departemen.
ON, menyebabkan hasil gabungan yang tidak diinginkan (Cartesian product).INNER saat LEFT dibutuhkan.VIEW adalah tabel virtual yang menyimpan hasil query, berguna untuk keamanan, efisiensi, dan penyederhanaan.
| Perintah | Sintaks | Deskripsi |
|---|---|---|
| CREATE VIEW | CREATE [OR REPLACE] VIEW nama AS SELECT ...; |
Membuat atau mengganti view. |
| DROP VIEW | DROP VIEW nama [IF EXISTS]; |
Menghapus view dengan opsi keamanan. |
| SELECT dari VIEW | SELECT * FROM nama_view; |
Menggunakan view seperti tabel. |
CREATE VIEW v_karyawan_gaji AS
SELECT nama, gaji, jabatan
FROM karyawan
WHERE gaji > 5000000;
-- Mengambil data dari VIEW
SELECT * FROM v_karyawan_gaji WHERE jabatan = 'Manajer';
VIEW ini menyimpan data karyawan dengan gaji di atas 5 juta, kemudian digunakan untuk filter lebih lanjut.
INSERT/UPDATE pada VIEW yang tidak mendukungnya (misalnya, dengan JOIN).OR REPLACE saat ingin memperbarui VIEW yang sudah ada.