Belajar dengan membaca secara berurutan

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.

Sebelum mulai latihan, mari cek definisi kolom dan data sampel dari tabel staff.

① Jalankan PRAGMA table_info(staff); untuk melihat nama kolom, tipe, dan primary key.

② Jalankan SELECT * FROM staff LIMIT 5; untuk pratinjau 5 baris pertama.

SQL Editor

Jalankan query untuk melihat hasil

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;
Lembar cepat operator aritmetika
OperatorArtiContoh+Penjumlahansalary + 100000-Pengurangansalary - 100000*Perkaliansalary * 1.1/Pembagiansalary / 12%Modulo(sisa bagi)10 % 3 → 1
Operator aritmetika utama yang sudah terpasang di SQL. 5 operator + - * / % memiliki arti yang sama seperti di kebanyakan bahasa pemrograman.

Bayangkan simulasi gaji: tampilkan «gaji tahunan tiap karyawan jika mereka dapat kenaikan 10%». (Jika kamu menjalankan dengan benar, penjelasan akan muncul.)

① Dari tabel staff, ambil name, salary, dan salary * 1.1 dengan alias next_year_salary — total 3 kolom.

② Urutkan berdasarkan next_year_salary menurun.

③ Verifikasi hasil punya 10 baris dan dimulai dengan Frank Tanaka 7,200,000 / 7,920,000.

SQL Editor

Jalankan query untuk melihat hasil

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).

Bayangkan membuat label untuk kartu karyawan: «nama diikuti spasi dan kota dalam kurung».

① Dari tabel staff, ambil kolom asli name dan city plus `CONCAT(name, ' (', city, ')')` dengan alias `label`.

② Verifikasi hasil punya 10 baris dan kolom label berisi string seperti «Alice Tanaka (Tokyo)» / «Bob Suzuki (Osaka)».

SQL Editor

Jalankan query untuk melihat hasil

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;
TujuanConsole kursus ini (SQLite)MySQL
Timestamp saat inidatetime('now')NOW()
Tanggal saat inidate('now')CURDATE()
Ambil hanya tahunstrftime('%Y', d)DATE_FORMAT(d, '%Y')
Format kustomstrftime('%Y-%m-%d', d)DATE_FORMAT(d, '%Y-%m-%d')

Mari ambil timestamp saat ini dan tanggal saat ini dari console kursus ini. Cukup menjalankannya — tidak ada pemeriksaan kecocokan persis.

① Ambil datetime('now') dengan alias current_dt dan date('now') dengan alias current_d.

② Verifikasi hasil adalah 1 baris × 2 kolom, dengan current_dt menampilkan timestamp saat ini dalam format «YYYY-MM-DD HH:MM:SS» dan current_d menampilkan tanggal saat ini dalam format «YYYY-MM-DD».

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan daftar karyawan yang butuh kolom «tahun kelahiran» terpisah.

① Dari tabel staff, ambil name, birthday, dan `strftime('%Y', birthday)` dengan alias `birth_year` — total 3 kolom.

② Verifikasi hasil punya 10 baris. Untuk Alice Tanaka, kamu akan lihat birthday=1990-04-15 dan birth_year='1990' — hanya tahun yang masuk ke kolom baru.

SQL Editor

Jalankan query untuk melihat hasil

Bayangkan permintaan: «tampilkan karyawan muda (lahir di tahun 1990-an) berdasarkan urutan kelahiran».

① Dari tabel staff, ambil name, birthday, dan strftime('%Y', birthday) AS birth_year.

② Filter ke baris di mana birth_year antara '1990' dan '1999' inklusif (pakai BETWEEN).

③ Urutkan berdasarkan birthday menaik (paling tua dulu) dan simpan hanya 3 baris teratas.

④ Verifikasi hasil adalah 3 baris: Alice 1990-04-15 / Grace 1991-05-25 / Carol 1992-11-03.

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Manakah berikut yang merupakan hasil benar dari SELECT 10 % 3;?

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?