Setelah dua puluh sembilan section Course, sintaks yang benar-benar dipakai harian ternyata kumpulan yang cukup kecil. Chapter ini merangkumnya menjadi referensi cepat: setiap kelompok perintah disajikan dengan bentuk umum sintaksnya dan satu contoh minimal yang bisa langsung disalin, disusun mengikuti urutan penulisan query yang natural. Gunakan halaman ini sebagai pengingat struktur — detail perilaku tiap klausa tetap menjadi wilayah chapter masing-masing di Course ini dan dokumentasi resmi.

Referensi Tabel #

Tabel berikut memetakan kelompok perintah ke chapter Course yang membahasnya secara mendalam:

KelompokPerintah kunciChapter mendalam
DDLCREATE, ALTER, DROPDasar SQL, Table Design
DMLINSERT, SELECT, UPDATE, DELETEManipulasi Data
FilteringWHERE, LIKE, IN, BETWEENFiltering dan Sorting
JoinINNER, LEFT, CROSS, selfJoins
AgregasiCOUNT, SUM, GROUP BY, HAVINGAgregasi Data
Set & CTEUNION, WITHSet Operations dan CTE
WindowOVER, ROW_NUMBER, LAGWindow Functions
TransaksiSTART TRANSACTION, COMMITTransactions

Bentuk Umum SELECT #

Satu perintah SELECT menampung hampir separuh kebutuhan harian. Urutan penulisan klausa berikut wajib dihafal karena MySQL menolak urutan lain — meskipun urutan eksekusi logisnya berbeda:

sql
-- @notest (sketsa urutan klausa — tanda [ ] menandai bagian opsional)
SELECT kolom, ekspresi AS alias
FROM tabel
[JOIN tabel2 ON kondisi]
[WHERE kondisi_baris]
[GROUP BY kolom]
[HAVING kondisi_agregat]
[ORDER BY kolom [ASC|DESC]]
[LIMIT n OFFSET m];

Urutan eksekusi logisnya justru terbalik dari penulisan: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Pemahaman urutan ini menjelaskan dua aturan praktis: alias dari SELECT tidak bisa dipakai di WHERE (belum dievaluasi), tetapi bisa dipakai di ORDER BY (sudah dievaluasi).

Pola DDL dan DML #

Pola pembuatan objek yang paling sering dipakai beserta variasi amannya:

sql
DROP DATABASE IF EXISTS belajar_ref;
CREATE DATABASE belajar_ref;
USE belajar_ref;

-- Tabel dengan constraint inti
CREATE TABLE produk (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(100) NOT NULL,
  harga DECIMAL(10,2) NOT NULL,
  kategori VARCHAR(30) NOT NULL,
  stok INT NOT NULL DEFAULT 0,
  UNIQUE KEY uq_produk_nama (nama)
);

-- Pengisian data aman-idempoten (alias baris MySQL 8):
INSERT INTO produk (nama, harga, kategori) VALUES
  ('Kopi Gayo', 55000.00, 'kopi'),
  ('Teh Melati', 25000.00, 'teh') AS baru
ON DUPLICATE KEY UPDATE harga = baru.harga;

Output yang Dihasilkan:

text
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Perubahan struktur mengikuti dua varian utama — ALTER TABLE produk ADD COLUMN stok INT NOT NULL DEFAULT 0; untuk menambah kolom dan MODIFY COLUMN untuk mengubah tipe — lengkap di chapter Mengubah Struktur Tabel . Perubahan data selalu mengikuti pola dua kunci: UPDATE ... WHERE id = n dan DELETE ... WHERE id = n — tanpa WHERE, keduanya mengenai seluruh tabel. Detail lengkap pola upsert ada di chapter Insert On Duplicate Key Update serta Upsert Patterns .

Pola Filtering dan Join #

Filtering harian terangkum dalam lima bentuk: perbandingan langsung WHERE harga > 50000, keanggotaan WHERE kategori IN ('kopi', 'teh'), rentang WHERE harga BETWEEN 20000 AND 60000, pencocokan pola WHERE nama LIKE 'Kopi%', dan uji keberadaan WHERE telepon IS NULL. Kombinasi kompleks dibangun dari AND/OR dengan tanda kurung sebagai penegas prioritas.

Join harian pada dasarnya dua bentuk: INNER JOIN untuk data yang harus ada di kedua tabel, dan LEFT JOIN memakai IS NULL untuk mencari baris yang justru tidak punya pasangan:

sql
CREATE TABLE pelanggan (
  id INT PRIMARY KEY, nama VARCHAR(50) NOT NULL
);
CREATE TABLE pesanan (
  id INT PRIMARY KEY, pelanggan_id INT NOT NULL
);
CREATE TABLE detail_pesanan (
  pesanan_id INT, qty INT NOT NULL, harga DECIMAL(10,2) NOT NULL,
  PRIMARY KEY (pesanan_id, qty)
);
INSERT INTO pelanggan VALUES (1, 'Budi'), (2, 'Siti'), (3, 'Rina');
INSERT INTO pesanan VALUES (1, 1), (2, 2);
INSERT INTO detail_pesanan VALUES (1, 2, 55000.00), (2, 1, 25000.00);

-- Relasi dengan agregat: total belanja tiap pelanggan
SELECT p.nama, COALESCE(SUM(d.qty * d.harga), 0) AS total
FROM pelanggan p
LEFT JOIN pesanan ps ON ps.pelanggan_id = p.id
LEFT JOIN detail_pesanan d ON d.pesanan_id = ps.id
GROUP BY p.id, p.nama
ORDER BY total DESC;

Output yang Dihasilkan:

text
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

+------+-----------+
| nama | total     |
+------+-----------+
| Budi | 110000.00 |
| Siti |  25000.00 |
| Rina |      0.00 |
+------+-----------+
3 rows in set (0.00 sec)

Pola di atas menjadi harga mati begitu data tersebar di tiga tabel — COALESCE menjaga pelanggan tanpa transaksi tetap tampil dengan angka nol.

Pola Transaksi #

Dua pola transaksi yang menutup referensi ini — alur perubahan multi-tabel yang atomik:

sql
CREATE TABLE rekening (
  id INT PRIMARY KEY, pemilik VARCHAR(50) NOT NULL,
  saldo DECIMAL(12,2) NOT NULL
);
INSERT INTO rekening VALUES (1, 'Budi', 500000.00), (2, 'Siti', 300000.00);

START TRANSACTION;

UPDATE rekening SET saldo = saldo - 100000 WHERE id = 1;
UPDATE rekening SET saldo = saldo + 100000 WHERE id = 2;

COMMIT;

SELECT id, pemilik, saldo FROM rekening ORDER BY id;

Output yang Dihasilkan:

text
Query OK, 0 rows affected (0.00 sec)

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

+----+---------+-----------+
| id | pemilik | saldo     |
+----+---------+-----------+
|  1 | Budi    | 400000.00 |
|  2 | Siti    | 400000.00 |
+----+---------+-----------+
2 rows in set (0.00 sec)

Aturan praktisnya tiga: transaksi sesingkat mungkin, jangan menyisipkan DDL di tengahnya, dan COMMIT hanya setelah seluruh prasyarat bisnis terverifikasi.

Referensi #

Referensi sintaks di tangan, pemeriksaan harian tinggal soal pola: chapter berikutnya merangkum panduan praktik terbaik yang menimbang keputusan desain — dari penamaan sampai backup.