SQL dari Nol

SQL dari Nol

SQL (Structured Query Language) mengatur basis data relasional. Baik Anda memakai SQLite, PostgreSQL, MySQL, atau SQL Server, sebagian besar perintah dasarnya sama. Artikel ini membuat tabel, menambah data, mencari, menggabungkan tabel, mengelompokkan hasil, dan mengubah data, memakai SQLite sehingga tidak perlu server.

Setiap perintah di sini sudah dijalankan dengan SQLite 3.50 dan keluarannya adalah keluaran nyata.

Yang Anda butuhkan

Bagaimana tabel saling berhubungan

Diagram tabel students, classes, dan scores yang dihubungkan dengan kunci
Diagram tabel students, classes, dan scores yang dihubungkan dengan kunci

Membuat tabel dan menambah data

CREATE TABLE students (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  class_id INTEGER
);
CREATE TABLE classes (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL
);
CREATE TABLE scores (
  student_id INTEGER REFERENCES students(id),
  subject TEXT,
  score INTEGER
);
INSERT INTO classes VALUES (1, 'X-1'), (2, 'X-2');
INSERT INTO students VALUES (1, 'Budi', 1), (2, 'Siti', 1), (3, 'Andi', 2);
INSERT INTO scores VALUES (1, 'Matematika', 85), (1, 'Bahasa Inggris', 70), (2, 'Matematika', 72), (3, 'Matematika', 45), (3, 'Bahasa Inggris', 60);

Mencari dengan SELECT dan WHERE

SELECT name FROM students WHERE class_id = 1;

Menggabungkan tabel dengan JOIN

SELECT s.name, c.title FROM students s JOIN classes c ON c.id = s.class_id ORDER BY s.name;

`JOIN` menggabungkan baris dari dua tabel ketika kuncinya cocok. `s` dan `c` adalah nama pendek untuk tabel.

Mengelompokkan dengan GROUP BY

SELECT subject, AVG(score) AS avg_score, COUNT(*) AS n FROM scores GROUP BY subject ORDER BY subject;

Fungsi agregat seperti `AVG`, `COUNT`, dan `SUM` bekerja pada setiap kelompok. Gunakan `HAVING` untuk memfilter setelah pengelompokan:

SELECT student_id, SUM(score) AS total FROM scores GROUP BY student_id HAVING SUM(score) >= 100;

Mengubah dan menghapus data

UPDATE scores SET score = score + 5 WHERE student_id = 3 AND subject = 'Matematika';
DELETE FROM scores WHERE score < 50;
SELECT student_id, subject, score FROM scores ORDER BY student_id, subject;

`UPDATE` menaikkan 45 menjadi 50, sehingga `DELETE` tidak menghapus apa pun. Perhatikan bahwa hasilnya benar untuk urutan pernyataan dijalankan.

Hasil nyata

name
------
Budi
Siti

name   title
-----  -----
Budi   X-1
Andi   X-2
Siti   X-1

subject         avg_score         n
--------------  ----------------  -
Bahasa Inggris  65.0              2
Matematika      67.3333333333333  3

student_id  total
----------  -----
1           155
3           105

student_id  subject         score
----------  --------------  -----
1           Bahasa Inggris  70
1           Matematika      85
2           Matematika      72
3           Bahasa Inggris  60
3           Matematika      50

Kesalahan umum

Langkah berikutnya

Rancang tabel Anda sendiri, misalnya produk dan pesanan, dan tulis `JOIN` yang menjumlahkan penjualan per produk. Lalu pelajari indeks dan transaksi, yang penting saat data bertambah banyak.

Ringkasan

SQL mendefinisikan struktur dengan `CREATE`, mengelola data dengan `INSERT`, `UPDATE`, dan `DELETE`, dan mencari dengan `SELECT` bersama `WHERE`, `JOIN`, `GROUP BY`, dan `HAVING`. Menguji pada data contoh kecil membuat efek setiap pernyataan jelas.