πŸ—„οΈ

πŸ—„οΈ Tutorial Database Lengkap

Belajar Database dari dasar hingga mahir - MySQL, PostgreSQL, SQLite, dan MongoDB!

Database Dasar SQL NoSQL

Iklan 728x90 - Pasang Kode AdSense Anda Di Sini

πŸ“š Bagian 1: Pengenalan Database

Apa itu Database?

Database (basis data) adalah kumpulan data yang terorganisir dan dapat diakses secara elektronik. Database digunakan untuk menyimpan, mengelola, dan mengambil informasi dengan efisien.

Sejarah Database

Jenis-Jenis Database

πŸ“Š Relational (SQL)

MySQL, PostgreSQL, Oracle

πŸ”— NoSQL

MongoDB, Cassandra, Redis

🌲 Hierarchical

IBM IMS

πŸ•ΈοΈ Network

IDMS, CODASYL

SQL vs NoSQL

Aspek SQL (Relational) NoSQL
Struktur Table dengan baris & kolom Dokumen, Key-Value, Graph
Schema Fixed/Strict Flexible/Dynamic
Skalabilitas Vertical Horizontal
Contoh MySQL, PostgreSQL MongoDB, Redis

DBMS (Database Management System)

DBMS adalah software untuk membuat dan mengelola database:

πŸ“Ή Video Tutorial Bagian 1:

🐬 Bagian 2: MySQL Dasar

Apa itu MySQL?

MySQL adalah sistem manajemen database relasional (RDBMS) open-source yang paling populer di dunia. MySQL digunakan oleh jutaan website termasuk WordPress, Facebook, dan YouTube.

Cara Install MySQL

# Cara 1: XAMPP (Direkomendasikan untuk pemula) # 1. Download XAMPP dari https://www.apachefriends.org # 2. Install dan jalankan Apache & MySQL # 3. Buka http://localhost/phpmyadmin # Cara 2: MySQL Installer # 1. Download dari https://dev.mysql.com/downloads/installer/ # 2. Install MySQL Server # 3. Buka MySQL Workbench # Cara 3: Command Line mysql -u root -p

Membuat Database

-- Melihat semua database SHOW DATABASES; -- Membuat database baru CREATE DATABASE sekolah; -- Menggunakan database USE sekolah; -- Menghapus database DROP DATABASE sekolah;

Membuat Tabel

-- Membuat tabel siswa CREATE TABLE siswa ( id INT PRIMARY KEY AUTO_INCREMENT, nama VARCHAR(100) NOT NULL, nis VARCHAR(20) UNIQUE, tanggal_lahir DATE, alamat TEXT, nilai_rata DECIMAL(4,2), status_aktif BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Melihat struktur tabel DESCRIBE siswa; -- Melihat semua tabel SHOW TABLES;

CRUD - Insert Data

-- Insert satu data INSERT INTO siswa (nama, nis, tanggal_lahir, alamat, nilai_rata) VALUES ('Budi Santoso', '12345', '2008-05-15', 'Jakarta', 85.50); -- Insert multiple data INSERT INTO siswa (nama, nis, tanggal_lahir, alamat, nilai_rata) VALUES ('Ani Wijaya', '12346', '2008-08-20', 'Bandung', 90.00), ('Citra Dewi', '12347', '2008-03-10', 'Surabaya', 88.75), ('Dodi Firmanto', '12348', '2008-12-05', 'Medan', 92.25); -- Insert dengan DEFAULT INSERT INTO siswa (nama, nis, nilai_rata) VALUES ('Eko Prasetyo', '12349', 80.00);

CRUD - Select Data

-- Select semua data SELECT * FROM siswa; -- Select kolom tertentu SELECT nama, nilai_rata FROM siswa; -- Select dengan WHERE (kondisi) SELECT * FROM siswa WHERE nilai_rata > 85; -- Select dengan operator SELECT * FROM siswa WHERE status_aktif = TRUE; SELECT * FROM siswa WHERE nama LIKE 'B%'; SELECT * FROM siswa WHERE nilai_rata BETWEEN 80 AND 90; -- Select dengan ORDER BY SELECT * FROM siswa ORDER BY nilai_rata DESC; SELECT * FROM siswa ORDER BY nama ASC; -- Select dengan LIMIT SELECT * FROM siswa ORDER BY nilai_rata DESC LIMIT 3;

CRUD - Update Data

-- Update satu field UPDATE siswa SET nilai_rata = 88.00 WHERE id = 1; -- Update multiple field UPDATE siswa SET nama = 'Budi Santoso', alamat = 'Jakarta Selatan' WHERE id = 1; -- Update semua data (hati-hati!) UPDATE siswa SET nilai_rata = nilai_rata + 5;

CRUD - Delete Data

-- Delete dengan kondisi DELETE FROM siswa WHERE id = 5; -- Delete semua data (hati-hati!) DELETE FROM siswa; -- Mengosongkan tabel TRUNCATE TABLE siswa;

πŸ“Ή Video Tutorial Bagian 2:

πŸ” Bagian 3: Query SQL Lanjutan

Fungsi Agregat

-- COUNT - Menghitung jumlah data SELECT COUNT(*) FROM siswa; SELECT COUNT(*) FROM siswa WHERE nilai_rata > 85; -- SUM - Menjumlahkan nilai SELECT SUM(nilai_rata) FROM siswa; -- AVG - Menghitung rata-rata SELECT AVG(nilai_rata) FROM siswa; -- MAX - Nilai terbesar SELECT MAX(nilai_rata) FROM siswa; -- MIN - Nilai terkecil SELECT MIN(nilai_rata) FROM siswa; -- GROUP BY - Mengelompokkan data SELECT status_aktif, COUNT(*) as total FROM siswa GROUP BY status_aktif;

JOIN - Menggabungkan Tabel

-- Membuat tabel tambahan CREATE TABLE kelas ( id INT PRIMARY KEY AUTO_INCREMENT, nama_kelas VARCHAR(20) NOT NULL, walikelas VARCHAR(100) ); INSERT INTO kelas (nama_kelas, walikelas) VALUES ('X IPA 1', 'Pak Ahmad'), ('X IPA 2', 'Bu Siti'), ('X IPS 1', 'Pak Budi'); ALTER TABLE siswa ADD COLUMN kelas_id INT; UPDATE siswa SET kelas_id = 1 WHERE id IN (1,2); UPDATE siswa SET kelas_id = 2 WHERE id = 3; -- INNER JOIN SELECT siswa.nama, kelas.nama_kelas FROM siswa INNER JOIN kelas ON siswa.kelas_id = kelas.id; -- LEFT JOIN SELECT siswa.nama, kelas.nama_kelas FROM siswa LEFT JOIN kelas ON siswa.kelas_id = kelas.id; -- RIGHT JOIN SELECT siswa.nama, kelas.nama_kelas FROM siswa RIGHT JOIN kelas ON siswa.kelas_id = kelas.id;

Subquery

-- Subquery di WHERE SELECT * FROM siswa WHERE nilai_rata > (SELECT AVG(nilai_rata) FROM siswa); -- Subquery dengan IN SELECT * FROM siswa WHERE kelas_id IN (SELECT id FROM kelas WHERE nama_kelas LIKE 'X IPA%'); -- Subquery di FROM SELECT nama, nilai_rata, (SELECT AVG(nilai_rata) FROM siswa) as rata_kelas FROM siswa;

UNION

-- UNION - Menggabungkan hasil SELECT nama FROM siswa WHERE nilai_rata > 85 UNION SELECT nama FROM siswa WHERE status_aktif = FALSE; -- UNION ALL (termasuk duplikat) SELECT nama FROM siswa WHERE nilai_rata > 85 UNION ALL SELECT nama FROM siswa WHERE nilai_rata > 85;

Alias dan Column Calculation

-- Alias untuk kolom SELECT nama AS 'Nama Siswa', nilai_rata AS 'Nilai' FROM siswa; -- Alias untuk tabel SELECT s.nama, k.nama_kelas FROM siswa AS s JOIN kelas AS k ON s.kelas_id = k.id; -- Perhitungan kolom SELECT nama, nilai_rata, nilai_rata * 10 AS 'Nilai Akhir' FROM siswa; -- Kondisi dengan CASE SELECT nama, nilai_rata, CASE WHEN nilai_rata >= 90 THEN 'A - Sempurna' WHEN nilai_rata >= 80 THEN 'B - Baik' WHEN nilai_rata >= 70 THEN 'C - Cukup' ELSE 'D - Perlu Perbaikan' END AS predikat FROM siswa;

πŸ“Ή Video Tutorial Bagian 3:

πŸ“ Bagian 4: Database Design & ERD

Apa itu ERD?

ERD (Entity Relationship Diagram) adalah diagram yang menunjukkan hubungan antar entitas dalam database.

Komponen ERD

Jenis Relasi

-- One-to-One (1:1) -- Contoh: Satu siswa punya satu KK -- siswa.id = kartu_keluarga.siswa_id -- One-to-Many (1:N) atau Many-to-One (N:1) -- Contoh: Satu kelas punya banyak siswa -- kelas.id = siswa.kelas_id -- Many-to-Many (N:N) -- Contoh: Siswa mengambil banyak mata pelajaran -- Butuh tabel penghubung: siswa_mata_pelajaran

Normalisasi Database

Normalisasi adalah proses mengorganisasi data untuk mengurangi redundansi:

Normal Form 1 (1NF)

Normal Form 2 (2NF)

Normal Form 3 (3NF)

Contoh Desain Database Sekolah

-- Tabel: siswa CREATE TABLE siswa ( id INT PRIMARY KEY AUTO_INCREMENT, nis VARCHAR(20) UNIQUE, nama VARCHAR(100), kelas_id INT, FOREIGN KEY (kelas_id) REFERENCES kelas(id) ); -- Tabel: kelas CREATE TABLE kelas ( id INT PRIMARY KEY AUTO_INCREMENT, nama_kelas VARCHAR(20), walikelas_id INT, FOREIGN KEY (walikelas_id) REFERENCES guru(id) ); -- Tabel: mata_pelajaran CREATE TABLE mata_pelajaran ( id INT PRIMARY KEY AUTO_INCREMENT, nama_mapel VARCHAR(50), guru_id INT, FOREIGN KEY (guru_id) REFERENCES guru(id) ); -- Tabel: nilai (tabel penghubung N:N) CREATE TABLE nilai ( id INT PRIMARY KEY AUTO_INCREMENT, siswa_id INT, mapel_id INT, nilai DECIMAL(4,2), FOREIGN KEY (siswa_id) REFERENCES siswa(id), FOREIGN KEY (mapel_id) REFERENCES mata_pelajaran(id) );

πŸ“Ή Video Tutorial Bagian 4:

🐘 Bagian 5: PostgreSQL

Apa itu PostgreSQL?

PostgreSQL adalah sistem database relasional object (ORDBMS) open-source yang sangat powerful. PostgreSQL dikenal dengan fitur-fiturnya yang lengkap dan compliant dengan standar SQL.

Keunggulan PostgreSQL

Install PostgreSQL

# Cara 1: Download dari website resmi # https://www.postgresql.org/download/ # Cara 2: Menggunakan pgAdmin (GUI) # Cara 3: Command Line (Linux) sudo apt update sudo apt install postgresql postgresql-contrib # Masuk ke PostgreSQL sudo -u postgres psql

Perbedaan MySQL vs PostgreSQL

Fitur MySQL PostgreSQL
JSON JSON & JSONB JSON, JSONB, Array
Inheritance Tidak ada Ya
CTE Dari v8.4 Ya
Full-Text Search Plugin Bawaan

PostgreSQL Specific Features

-- Array Type CREATE TABLE test ( id SERIAL PRIMARY KEY, nama VARCHAR(50), nilai INTEGER[] ); INSERT INTO test (nama, nilai) VALUES ('Budi', ARRAY[80, 85, 90]); -- JSON Type CREATE TABLE produk ( id SERIAL PRIMARY KEY, nama VARCHAR(100), spesifikasi JSON ); INSERT INTO produk (nama, spesifikasi) VALUES ('Laptop', '{"prosesor": "Intel i7", "RAM": "16GB"}'::json); -- Common Table Expression (CTE) WITH high_scorers AS ( SELECT nama, nilai_rata FROM siswa WHERE nilai_rata > 85 ) SELECT * FROM high_scorers ORDER BY nilai_rata DESC; -- Window Functions SELECT nama, nilai_rata, AVG(nilai_rata) OVER() as rata_kelas, RANK() OVER(ORDER BY nilai_rata DESC) as ranking FROM siswa;

πŸ“Ή Video Tutorial Bagian 5:

πŸƒ Bagian 6: SQLite

Apa itu SQLite?

SQLite adalah database engine yang tertanam (embedded). SQLite tidak memerlukan server terpisah - seluruh database disimpan dalam satu file. Sangat ringan dan cocok untuk aplikasi mobile dan desktop.

Keunggulan SQLite

Penggunaan SQLite

# Install SQLite (jika belum ada) # Linux sudo apt install sqlite3 # Membuat database sqlite3 sekolah.db # Di dalam SQLite shell sqlite> .tables sqlite> .schema siswa sqlite> SELECT * FROM siswa; sqlite> .exit

Python + SQLite

# Mengakses SQLite dengan Python import sqlite3 # Membuat koneksi (file otomatis dibuat) conn = sqlite3.connect('sekolah.db') cursor = conn.cursor() # Membuat tabel cursor.execute(''' CREATE TABLE IF NOT EXISTS siswa ( id INTEGER PRIMARY KEY AUTOINCREMENT, nama TEXT NOT NULL, nilai REAL ) ''') # Insert data cursor.execute('INSERT INTO siswa (nama, nilai) VALUES (?, ?)', ('Budi', 85.5)) conn.commit() # Select data cursor.execute('SELECT * FROM siswa') for row in cursor.fetchall(): print(row) # Tutup koneksi conn.close()

PHP + SQLite

// PHP dengan SQLite3 // Membuat koneksi $db = new SQLite3('sekolah.db'); // Membuat tabel $db->exec('CREATE TABLE IF NOT EXISTS siswa ( id INTEGER PRIMARY KEY AUTOINCREMENT, nama TEXT, nilai REAL )'); // Insert data $stmt = $db->prepare('INSERT INTO siswa (nama, nilai) VALUES (:nama, :nilai)'); $stmt->bindValue(':nama', 'Ani', SQLITE3_TEXT); $stmt->bindValue(':nilai', 90.5, SQLITE3_FLOAT); $stmt->execute(); // Select data $result = $db->query('SELECT * FROM siswa'); while ($row = $result->fetchArray()) { echo $row['nama'] . "
"; } // Tutup koneksi $db->close(); ?>

Kapan Menggunakan SQLite?

βœ… Gunakan SQLite untuk:
  • Aplikasi Android/iOS
  • Aplikasi Desktop
  • Prototyping/Development
  • Website dengan traffic rendah-sedang
  • Cache/penyimpanan lokal
⚠️ Hindari SQLite untuk:
  • Website dengan traffic tinggi
  • Aplikasi yang butuh banyak user bersamaan
  • Data yang sangat besar (>1TB)

πŸ“Ή Video Tutorial Bagian 6:

πŸƒ Bagian 7: MongoDB (NoSQL)

Apa itu MongoDB?

MongoDB adalah database dokumen NoSQL yang paling populer. Data disimpan dalam format JSON-like (BSON), sangat fleksibel dan mudah di-scale.

Konsep MongoDB

Install MongoDB

# Cara 1: MongoDB Atlas (Cloud - Free Tier) # 1. Daftar di https://www.mongodb.com/cloud/atlas # 2. Buat cluster gratis # 3. Ambil connection string # Cara 2: Local Installation (Linux) wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list sudo apt update sudo apt install mongodb-org sudo systemctl start mongod # Cara 3: MongoDB Compass (GUI) # Download dari https://www.mongodb.com/products/compass

ζ“δ½œ CRUD MongoDB

// Di MongoDB Shell (mongosh) // Switch/create database use sekolah_db // Insert - Create db.siswa.insertOne({ nama: "Budi Santoso", nis: "12345", tanggal_lahir: new Date("2008-05-15"), alamat: { kota: "Jakarta", provinsi: "DKI Jakarta" }, nilai: [85, 90, 88], status_aktif: true }) // Insert multiple db.siswa.insertMany([ {nama: "Ani Wijaya", nilai: 90}, {nama: "Citra Dewi", nilai: 88} ]) // Select - Read db.siswa.find() db.siswa.find({nama: "Budi Santoso"}) db.siswa.find({nilai: {$gt: 85}}) db.siswa.findOne({_id: ObjectId("...")}) // Update db.siswa.updateOne( {nama: "Budi Santoso"}, {$set: {nilai: 88}} ) db.siswa.updateMany( {status_aktif: true}, {$set: {status_aktif: false}} ) // Delete db.siswa.deleteOne({nama: "Budi"}) db.siswa.deleteMany({status_aktif: false})

Query Operators

// Comparison Operators db.siswa.find({nilai: {$gt: 80}}) db.siswa.find({nilai: {$gte: 80}}) db.siswa.find({nilai: {$lt: 90}}) db.siswa.find({nilai: {$lte: 90}}) db.siswa.find({nama: {$eq: "Budi"}}) db.siswa.find({nama: {$ne: "Ani"}}) // Logical Operators db.siswa.find({ $and: [ {nilai: {$gt: 80}}, {nilai: {$lt: 90}} ] }) db.siswa.find({ $or: [ {nama: "Budi"}, {nama: "Ani"} ] }) // Array Operators db.siswa.find({nilai: {$in: [85, 90, 88]}}) db.siswa.find({nilai: {$all: [85, 90]}}) db.siswa.find({nilai: {$size: 3}}) // Element Operators db.siswa.find({alamat: {$exists: true}}) db.siswa.find({nama: {$type: "string"}})

Python + MongoDB

# Install pymongo pip install pymongo # Python dengan MongoDB from pymongo import MongoClient # Koneksi ke MongoDB Atlas client = MongoClient( "mongodb+srv://username:password@cluster.mongodb.net/?retryWrites=true&w=majority" ) # Pilih database dan collection db = client['sekolah_db'] collection = db['siswa'] # Insert data siswa_baru = { "nama": "Budi Santoso", "nilai": [85, 90, 88] } result = collection.insert_one(siswa_baru) print(f"ID: {result.inserted_id}") # Find data for siswa in collection.find(): print(siswa) # Find dengan filter for siswa in collection.find({"nama": "Budi"}): print(siswa)

πŸ“Ή Video Tutorial Bagian 7:

πŸš€ Bagian 8: Proyek Database

πŸ’‘ Ide Proyek Database

Contoh: Sistem Informasi Siswa Sederhana

-- Create Database CREATE DATABASE sistem_sekolah; USE sistem_sekolah; -- Tabel Siswa CREATE TABLE siswa ( id INT PRIMARY KEY AUTO_INCREMENT, nis VARCHAR(20) UNIQUE NOT NULL, nama VARCHAR(100) NOT NULL, gender ENUM('L', 'P'), tanggal_lahir DATE, alamat TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Tabel Guru CREATE TABLE guru ( id INT PRIMARY KEY AUTO_INCREMENT, nip VARCHAR(20) UNIQUE NOT NULL, nama VARCHAR(100) NOT NULL, mapel VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Tabel Mata Pelajaran CREATE TABLE mata_pelajaran ( id INT PRIMARY KEY AUTO_INCREMENT, kode_mapel VARCHAR(10) UNIQUE, nama_mapel VARCHAR(50), guru_id INT, FOREIGN KEY (guru_id) REFERENCES guru(id) ); -- Tabel Kelas CREATE TABLE kelas ( id INT PRIMARY KEY AUTO_INCREMENT, nama_kelas VARCHAR(20) UNIQUE, walikelas_id INT, FOREIGN KEY (walikelas_id) REFERENCES guru(id) ); -- Tabel Nilai CREATE TABLE nilai ( id INT PRIMARY KEY AUTO_INCREMENT, siswa_id INT, mapel_id INT, nilai DECIMAL(4,2), semester VARCHAR(10), tahun_ajaran VARCHAR(20), FOREIGN KEY (siswa_id) REFERENCES siswa(id), FOREIGN KEY (mapel_id) REFERENCES mata_pelajaran(id) ); -- View: Rapor Siswa CREATE VIEW rapor_siswa AS SELECT s.nama as nama_siswa, k.nama_kelas, mp.nama_mapel, n.nilai, n.semester FROM nilai n JOIN siswa s ON n.siswa_id = s.id JOIN kelas k ON s.kelas_id = k.id JOIN mata_pelajaran mp ON n.mapel_id = mp.id; -- Query: Rata-rata nilai per siswa SELECT s.nama, AVG(n.nilai) as rata_rata, MIN(n.nilai) as nilai_terendah, MAX(n.nilai) as nilai_tertinggi FROM siswa s JOIN nilai n ON s.id = n.siswa_id GROUP BY s.id, s.nama ORDER BY rata_rata DESC;

Iklan 728x90 - Pasang Kode AdSense Anda Di Sini

Iklan 728x90 - Pasang Kode AdSense Anda Di Sini

Quiz Database