Soal 1Manakah berikut yang merupakan hasil benar dari SELECT 10 % 3;?
Fungsi ① — Aritmetika, Penggabungan String, dan Fungsi Tanggal
Artikel pertama dari tiga artikel fungsi SQL. Mencakup operator aritmetika + - * / %, penggabungan string dengan || dan CONCAT, serta fungsi tanggal seperti timestamp saat ini dan ekstraksi tahun / bulan — semua pada dataset staff yang dimuat dari CSV.
Data yang digunakan di artikel ini — tabel staff
Mulai dari artikel ini, tiga artikel berikutnya membahas fungsi yang sudah terpasang di SQL. Yang pertama fokus pada tiga kategori: operasi aritmetika, penggabungan string, dan fungsi tanggal — semuanya adalah ekspresi yang biasanya kamu letakkan di daftar kolom SELECT.
Dataset adalah tabel staff (10 baris: id / name / birthday / city / salary), dimuat otomatis dari CSV. Melalui empat latihan praktik, kamu akan melakukan perhitungan uang dengan salary, membuat label dari name dan city, dan memformat tanggal dari birthday.
Operator aritmetika — +, -, *, /, %
Untuk perhitungan pada kolom numerik, kamu punya 5 operator aritmetika + - * / %. SQL memungkinkan kamu menulis ekspresi langsung di daftar kolom SELECT, jadi kamu bisa mengambil nilai dari tabel dan mengembalikan hasil perhitungannya sebagai kolom terpisah. Menambahkan AS alias memberi nama untuk kolom hasil, yang memudahkan tampilan atau konsumsi di kode berikutnya.
Pembagian / berperilaku beda antar database: pada pembagian antara dua integer, beberapa database (PostgreSQL / SQL Server) mengembalikan hasil integer, sementara yang lain (MySQL / console kursus ini = SQLite) otomatis mengembalikan desimal.
-- 1) Perhitungan sederhana tanpa tabel
SELECT 1 + 1; -- 2
SELECT 10 - 3; -- 7
SELECT 3 * 4; -- 12
SELECT 10.0 / 3; -- 3.333...
SELECT 10 % 3; -- 1
-- 2) Perhitungan menggunakan kolom (gaji tahunan setelah kenaikan 10%)
SELECT name, salary, salary * 1.1 AS next_year_salary
FROM staff;
-- 3) Hitung gaji bulanan (tahunan / 12)
SELECT name, salary / 12 AS monthly_salary FROM staff;
+ - * / % memiliki arti yang sama seperti di kebanyakan bahasa pemrograman.Penggabungan string — `||` dan `CONCAT()`
Menggabungkan beberapa string menjadi satu disebut concatenation (penggabungan). Ada dua cara menulisnya: console kursus ini (SQLite), PostgreSQL, Oracle, dan SQL Server memakai operator `||` (dua garis vertikal), sementara MySQL memakai fungsi `CONCAT()`. SQLite sebenarnya mendukung keduanya || dan CONCAT(), jadi artikel ini bersandar pada CONCAT() yang lebih portable.
Dengan menyisipkan separator (': ' atau ' / ') di antara nilai-nilai, kamu bisa menggabungkan name dan city menjadi satu kolom yang mudah dibaca seperti «Alice Tanaka / Tokyo». Ini adalah alat andalan untuk laporan dan ekspor CSV ketika kamu menginginkan «beberapa kolom digabung jadi satu».
-- 1) Operator || (SQLite / PostgreSQL / Oracle)
SELECT name || ' (' || city || ')' AS label FROM staff;
-- 2) Fungsi CONCAT (MySQL / SQLite 3.40+ / PostgreSQL)
SELECT CONCAT(name, ' (', city, ')') AS label FROM staff;
-- Keduanya mengembalikan hasil sama
-- → Alice Tanaka (Tokyo) / Bob Suzuki (Osaka) / ...
`||` vs. `CONCAT()` — pilih yang mana
Untuk portabilitas, `CONCAT()` adalah pilihan yang lebih aman. Berjalan di SQLite, MySQL, PostgreSQL, SQL Server (2012+), dan Oracle. || adalah standar SQL, tapi di MySQL default-nya berarti OR logis, jadi jika produksi mungkin MySQL, memilih CONCAT() berarti kamu tidak perlu menulis ulang apa pun.
Penanganan NULL juga berbeda: NULL || 'A' mengembalikan NULL dengan operator ||. CONCAT(NULL, 'A') mengembalikan string kosong di MySQL tapi NULL di PostgreSQL — perilakunya bervariasi. Ketika NULL mungkin menyelinap ke input kamu, bungkus dengan COALESCE(kolom, '') untuk mengubah NULL jadi string kosong sebelum penggabungan (COALESCE dibahas di artikel ketiga seri ini).
Fungsi tanggal — timestamp saat ini dan pemformatan
Untuk hal-hal seperti «stempel waktu saat ini pada record baru» atau «ambil hanya tahun dari ulang tahun», kamu pakai fungsi tanggal. Fungsi tanggal adalah salah satu kategori di mana nama fungsi dan sintaks paling banyak berbeda antar database — console kursus ini (SQLite) dan MySQL memanggilnya cukup berbeda.
Kursus ini memakai datetime('now') / date('now') / strftime('format', nilai) dari SQLite untuk latihan, dengan NOW() / CURDATE() / DATE_FORMAT(nilai, 'format') dari MySQL ditampilkan berdampingan di tabel perbandingan di bawah. String format ('%Y' untuk tahun, '%m' untuk bulan, '%d' untuk hari, dll.) sama di kedua database, jadi setidaknya spesifikasi formatnya bisa langsung dipindahkan.
-- Cara menulisnya di console kursus ini (SQLite)
-- 1) Timestamp saat ini / tanggal saat ini
SELECT datetime('now') AS current_dt, date('now') AS current_d;
-- 2) Spesifikasi format (hanya tahun / hanya tahun-bulan)
SELECT strftime('%Y', '1990-04-15') AS year_only; -- '1990'
SELECT strftime('%Y-%m', '1990-04-15') AS year_month; -- '1990-04'
-- 3) Format diterapkan ke kolom
SELECT name, strftime('%Y', birthday) AS birth_year FROM staff;
-- Referensi: hal yang sama di MySQL
-- SELECT NOW(), CURDATE();
-- SELECT DATE_FORMAT(birthday, '%Y') FROM staff;
| Tujuan | Console kursus ini (SQLite) | MySQL |
|---|---|---|
| Timestamp saat ini | datetime('now') | NOW() |
| Tanggal saat ini | date('now') | CURDATE() |
| Ambil hanya tahun | strftime('%Y', d) | DATE_FORMAT(d, '%Y') |
| Format kustom | strftime('%Y-%m-%d', d) | DATE_FORMAT(d, '%Y-%m-%d') |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Di console kursus ini, mana cara yang benar untuk menggabungkan name dan city jadi satu kolom seperti Alice Tanaka (Tokyo)?
Soal 3Di console kursus ini (SQLite), mana cara yang benar untuk mengambil hanya tahun 4 digit dari kolom birthday?