Daftar Isi:
Pernahkah Anda mendengar tentang SQL? Nah, SQL adalah singkatan dari Structured Query Language, sebuah bahasa pemrograman yang dirancang Spesifik Kepada mengelola data dalam database. Bayangkan database sebagai Penyimpanan besar berisi informasi, SQL adalah perantara Kepada Dapat mengakses informasi yang Eksis di dalam Penyimpanan tersebut.
Dengan SQL, Anda Dapat melakukan berbagai hal, seperti:
- Menyimpan data: Menyimpan data baru ke dalam database, seperti data pelanggan, produk, atau transaksi.
- Mengelola data: Mengubah, menghapus, dan memperbarui data yang sudah Eksis di database.
- Mencari data: Menemukan informasi yang Anda butuhkan dengan Segera dan mudah.
- Menganalisis data: Mengolah data Kepada menghasilkan laporan dan visualisasi yang menarik.
SQL adalah bahasa standar yang digunakan dalam berbagai jenis database, seperti Oracle, PostgreSQL, MySQL, dan SQL Server. Jadi, dengan mempelajari SQL, Anda Dapat mengoperasikan berbagai jenis database, tanpa perlu mempelajari bahasa baru.
đź’ˇ Disclaimer: Pada artikel ini, saya menggunakan database tools dbeaver versi community dan postgreSQL server.
Basic SQL Command
Sekarang kita akan belajar tentang perintah-perintah dasar SQL yang sering digunakan.
Apa itu SQL Command?
SQL Command adalah perintah-perintah yang digunakan dalam bahasa SQL Kepada berinteraksi dengan database. Berikut adalah perintah-perintah dasar SQL yang wajib Anda ketahui.
1. Membangun table (CREATE)
CREATE digunakan Bukan hanya Kepada Membangun table, tapi juga Dapat Kepada Membangun database, view, dan object lainnya.
Teladan penggunaan:
-- Membangun tabel
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
SQL Syntax :
CREATE [OBJECT TYPE] [OBJECT NAME] (
[COLUMN NAME] [DATA TYPE] [CONSTRAINTS],
...
);
- [OBJECT TYPE]: Berupa TABLE, VIEW, FUNCTION, PROCEDURE, dll.
- [OBJECT NAME]: Nama dari object tersebut.
- [COLUMN NAME]: Nama column dari object.
- [DATA TYPE]: Tipe data dari kolom tersebut (Teladan : INT, VARCHAR(255), DATE).
- [CONSTRAINTS]: Aturan opsional (Teladan: NOT NULL, PRIMARY KEY, UNIQUE).
2. Mengubah table (ALTER)
ALTER digunakan Kepada mengubah struktur tabel, database, dan object lainnya. Pada ALTER, Anda Dapat menambah column dengan perintah ADD dan menghapus column dengan perintah DROP.
Teladan penggunaan :
-- Mengubah struktur tabel dengan menambahkan column phone_number
ALTER TABLE customers ADD COLUMN phone_number VARCHAR(255);
-- Mengubah struktur tabel dengan menghapus column phone_number
ALTER TABLE customers DROP COLUMN phone_number
SQL Syntax :
ALTER [OBJECT TYPE] [OBJECT NAME] [ACTION] [OPTIONS];
- [OBJECT TYPE]: Berupa TABLE, VIEW, FUNCTION, PROCEDURE, dll.
- [OBJECT NAME]: Nama dari object tersebut.
- [ACTION]: Modifikasi yang Ingin dilakukan (Teladan: ADD COLUMN, MODIFY COLUMN, DROP COLUMN).
- [OPTIONS]: Parameter opsional
3. Menghapus table (DROP)
DROP digunakan Kepada menghapus database, tabel, view, dan object lainnya.
Teladan penggunaan :
-- Menghapus table customers
DROP TABLE customers;
Syntax :
DROP [OBJECT TYPE] [OBJECT NAME];
- [OBJECT TYPE]: Berupa TABLE, VIEW, FUNCTION, PROCEDURE, dll
- [OBJECT NAME]: Nama dari object tersebut.
4. Menghapus Segala data di Table (TRUNCATE)
TRUNCATE digunakan Kepada menghapus Segala data yang Eksis di table tetapi Bukan menghapus table.
Teladan penggunaan :
-- Menghapus data di table customers
TRUNCATE TABLE customers;
Syntax :
TRUNCATE TABLE [TABLE NAME];
- [TABLE NAME]: Nama table yang akan dihapus datanya.
5. Menambahkan data (INSERT)
INSERT digunakan Kepada menambahkan data baru ke dalam table.
Teladan penggunaan :
-- Menambahkan data baru
INSERT INTO customers (name, email) VALUES ('John Doe', '[email protected]');
Syntax :
INSERT INTO [TABLE NAME] (COLUMN_NAME1, COLUMN_NAME2, ...) VALUES (VALUE_1, VALUE_2, ...);
6. Mengubah data (UPDATE)
UPDATE digunakan Kepada mengubah data yang sudah Eksis di dalam table.
Teladan penggunaan :
-- Mengubah data
UPDATE customers SET name = 'Jane Doe' WHERE id = 1;
Syntax :
UPDATE [TABLE NAME] SET COLUMN_NAME1 = VALUE_1, COLUMN_NAME2 = VALUE_2, ... WHERE [CONDITION];
7. Menghapus data (DELETE)
DELETE digunakan Kepada menghapus data dari table.
Teladan penggunaan :
-- Menghapus data
DELETE FROM customers WHERE email = '[email protected]';
Syntax :
DELETE FROM [TABLE NAME] WHERE [CONDITION];
8. Menampilkan data (SELECT)
SELECT digunakan Kepada menampilkan data dari table, Dapat menampilkan Segala column atau beberapa column tertentu.
Teladan penggunaan :
-- Mengambil Segala data dari tabel
SELECT * FROM customers;
-- Mengambil data tertentu dari tabel
SELECT name, email FROM customers WHERE id = 1;
Syntax :
// Menampilkan Segala column
SELECT * FROM [TABLE NAME];
// Menampilkan spesifik column
SELECT [COLUMN_NAME1], [COLUMN_NAME2], ... FROM [TABLE NAME];
9. Memulai transaksi baru (BEGIN)
BEGIN digunakan Kepada memulai transaksi baru. Kepada Teladan penggunaan, Dapat lihat pada Teladan COMMIT dan ROLLBACK
Syntax :
BEGIN TRANSACTION [TRANSACTION_NAME];
10. Menyelesaikan transaksi (COMMIT)
COMMIT digunakan Kepada menyelesaikan transaksi dan menyimpan perubahan.
Teladan penggunaan :
-- Memulai transaksi baru
BEGIN;
-- Menambahkan data baru
INSERT INTO customers (name, email) VALUES ('John Roe', '[email protected]');
-- Menyelesaikan transaksi
COMMIT;
Syntax :
COMMIT TRANSACTION;
11. Membatalkan transaksi (ROLLBACK)
ROLLBACK digunakan Kepada membatalkan transaksi dan mengembalikan database ke keadaan semula. ROLLBACK biasanya digunakan Kepada meng-handle apabila terjadi error dalam transaction, sehingga database Dapat kembali dalam keadaan Bersih.
Teladan pengunaan :
-- Memulai transaksi baru
BEGIN;
-- Mengubah data
UPDATE customers SET name = 'Richard Roe' WHERE id = 2;
-- Contohnya, Demi transaksi ini berlangsung, tiba-tiba terjadi kesalahan jaringan. Oleh karena itu, diperlukan rollback Kepada mencegah database menyimpan data yang Bukan valid / junk data.
-- Membatalkan transaksi
ROLLBACK;
Syntax :
ROLLBACK TRANSACTION;
12. Memberi akses database (GRANT)
GRANT digunakan Kepada memberikan akses kepada pengguna Kepada melakukan operasi tertentu pada database.
Teladan penggunaan :
-- Memberikan izin kepada user1 Kepada membaca tabel
GRANT SELECT ON customers TO 'user1';
Syntax :
GRANT [PRIVILEGE] ON [OBJECT] TO [USER|ROLE];
- [PRIVILEGE]: Privilege yang Ingin diberikan aksesnya (Teladan: SELECT, INSERT, UPDATE, DELETE).
- [OBJECT]: Nama object yang Ingin diberikan aksesnya (Teladan: table, view, procedure).
- [USER|ROLE]: Username atau role name yang Ingin diubah aksesnya.
13. Menghapus akses database (REVOKE)
REVOKE digunakan Kepada menghapus akses yang telah diberikan kepada pengguna.
Teladan penggunaan :
-- Menghapus izin user1 Kepada Dapat Memperhatikan data customers
REVOKE SELECT ON customers FROM 'user1';
Syntax :
REVOKE [PRIVILEGE] ON [OBJECT] FROM [USER|ROLE];
- [PRIVILEGE]: Privilege yang Ingin dihapus aksesnya (Teladan: SELECT, INSERT, UPDATE, DELETE).
- [OBJECT]: Nama object yang Ingin dihapus aksesnya (Teladan: table, view, procedure).
- [USER|ROLE]: Username atau role name yang Ingin diubah aksesnya.
Dari ke-13 perintah dasar ini, sebetulnya Anda Dapat kelompokan menjadi 5 kategori Istimewa Merukapan :
1. DDL – Data Definition Language
DDL digunakan Kepada mendefinisikan struktur database, termasuk Membangun (CREATE), mengubah (ALTER), dan menghapus tabel (DROP / TRUNCATE), database, dan objek lainnya.
2. DML – Data Manipulation Language
DML digunakan Kepada memanipulasi data dalam database, seperti menambahkan (INSERT), menghapus (DELETE), dan mengubah data (UPDATE).
3. DQL – Data Query Language
DQL digunakan Kepada mengambil data dari database. Perintah DQL yang paling Standar adalah SELECT.
4. TCL – Transaction Control Language
TCL digunakan Kepada mengontrol transaksi dalam database, seperti memulai (BEGIN), menyelesaikan (COMMIT), dan membatalkan transaksi (ROLLBACK),
5. DCL – Data Control Language
DCL digunakan Kepada mengatur hak akses dan kontrol (GRANT/REVOKE) terhadap database, seperti memberikan izin kepada pengguna Kepada mengakses tabel atau database.
Urutan menjalankan SQL Query
Selain basic SQL Command, Kepada menjalankan SQL query terdapat urutan penulisan query yang harus diperhatikan :
1. FROM/JOIN
- Digunakan Kepada menentukan tabel mana yang akan diambil datanya.
- JOIN digunakan Kepada menggabungkan data dari beberapa tabel.
-- Mengambil Segala data dari tabel customers
SELECT * FROM customers;
-- Menggabungkan data dari tabel orders dan customers berdasarkan kolom customer_id
SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id;
2. WHERE
- Digunakan Kepada memfilter data berdasarkan kondisi tertentu.
-- Mengambil Segala data dari tabel customers dengan negara Indonesia
SELECT * FROM customers WHERE country = 'Indonesia';
-- Mengambil data dari tabel orders dan customers yang status ordernya "shipped"
SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id WHERE orders.status = 'shipped';
3. HAVING
- Digunakan Kepada memfilter data berdasarkan agregasi data.
-- Menghitung total order Kepada setiap customer dan hanya menampilkan customer yang Mempunyai total order lebih dari 5
SELECT COUNT(*) AS total_orders FROM orders GROUP BY customer_id HAVING total_orders > 5;
4. GROUP BY
- Digunakan Kepada mengelompokkan data berdasarkan kolom tertentu.
-- Menghitung total customer Kepada setiap negara
SELECT country, COUNT(*) AS total_customers FROM customers GROUP BY country;
5. ORDER BY
- Digunakan Kepada mengurutkan data berdasarkan kolom tertentu.
-- Mengurutkan data dari tabel customers berdasarkan nama secara ascending (dari A ke Z)
SELECT * FROM customers ORDER BY name ASC;
-- Mengurutkan data dari tabel orders dan customers berdasarkan Copot pembuatan order secara descending (dari terbaru ke terlama)
SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id ORDER BY orders.created_at DESC;
6. LIMIT
- Digunakan Kepada membatasi jumlah data yang ditampilkan.
-- Menampilkan 10 data pertama dari tabel customers
SELECT * FROM customers LIMIT 10;
-- Menampilkan 5 data terakhir dari tabel orders dan customers yang diurutkan berdasarkan Copot pembuatan order secara descending
SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id ORDER BY orders.created_at DESC LIMIT 5;
Studi Kasus
Pre-step
- Kepada Membangun database baru di dbeaver pilih Database → New Database Connection → PostgreSQL → klik finish.
- Pada sidebar pilih database yang sudah kita buat dan klik connect.
- Kemudian buka SQL editor Kepada connect database yang telah kita buat.
- Kepada mengetest apakah SQL Editor sudah terkoneksi dengan Berkualitas, kita dapat mengetik
select 1
dan meng-execute query.
- Apabila berhasil, data 1 akan terdisplay dan kita sudah Dapat menggunakan SQL Editor Kepada menulis SQL Command.
Teladan kasus
Perusahaan XYZ Mempunyai data produk dan penjualan dengan format seperti berikut:
- Table
produk
Column | Data Type | Parameter |
---|---|---|
id_produk | int | Primary Key, Auto Increment |
nama_produk | varchar(255) | |
harga | int | NOT NULL |
stock | int | NOT NULL |
Dengan data set Kepada table produk
seperti di Dasar ini
id_produk | nama_produk | harga | stock |
---|---|---|---|
1 | Sabun mandi | 10000 | 100 |
2 | Shampo | 15000 | 500 |
3 | Pasta gigi | 20000 | 75 |
4 | Detergen | 12000 | 125 |
5 | Sabun cuci piring | 25000 | 200 |
- Table
penjualan
Column | Data Type | Parameter |
---|---|---|
id_penjual | int | Primary Key, Auto Increment |
tanggal_penjualan | date | NOT NULL |
id_produk | int | NOT NULL, Foreign Key pada table produk dengan column id_produk |
jumlah | int | NOT NULL |
total_harga | int | NOT NULL |
Dengan data set Kepada table penjualan
seperti di Dasar ini
id_penjualan | tanggal_penjualan | id_produk | jumlah | total_harga |
---|---|---|---|---|
1 | 2024-02-14 | 1 | 2 | 20000 |
2 | 2024-02-15 | 2 | 1 | 15000 |
3 | 2024-02-01 | 3 | 3 | 36000 |
4 | 2024-01-23 | 4 | 1 | 20000 |
5 | 2024-02-15 | 5 | 2 | 50000 |
6 | 2024-02-10 | 4 | 1 | 20000 |
7 | 2024-01-19 | 3 | 2 | 24000 |
8 | 2024-01-20 | 2 | 2 | 30000 |
9 | 2024-02-15 | 4 | 3 | 60000 |
10 | 2024-02-12 | 5 | 1 | 25000 |
SQL Command Kepada populate Segala sample data di atas adalah :
-- Create table produk
CREATE TABLE produk (
id_produk SERIAL PRIMARY KEY,
nama_produk VARCHAR(255) NOT NULL,
harga INT NOT NULL,
stok INT NOT NULL
);
-- Populate data produk
INSERT INTO produk (nama_produk, harga, stok)
VALUES
('Sabun mandi', 10000, 100),
('Shampo', 15000, 50),
('Pasta gigi', 12000, 75),
('Detergen', 20000, 125),
('Sabun cuci piring', 25000, 200);
-- Create table penjualan
CREATE TABLE penjualan (
id_penjualan SERIAL PRIMARY KEY,
tanggal_penjualan DATE NOT NULL,
id_produk INT NOT NULL,
jumlah INT NOT NULL,
total_harga INT NOT NULL,
FOREIGN KEY (id_produk) REFERENCES produk (id_produk)
);
-- Populate data penjualan
INSERT INTO penjualan (tanggal_penjualan, id_produk, jumlah, total_harga)
VALUES
('2024-02-14', 1, 2, 20000),
('2024-02-15', 2, 1, 15000),
('2024-02-01', 3, 3, 36000),
('2024-01-23', 4, 1, 20000),
('2024-02-15', 5, 2, 50000),
('2024-02-10', 4, 1, 20000),
('2024-01-19', 3, 2, 24000),
('2024-01-20', 2, 2, 30000),
('2024-02-15', 4, 3, 60000),
('2024-02-12', 5, 1, 25000);
Soal 1 : Menampilkan nama produk dengan awalan “Sabun”
Hasil yang diharapkan :
nama_produk |
---|
Sabun mandi |
Sabun cuci piring |
Solusi :
select nama_produk from produk where nama_produk like 'Sabun%'
WHERE
Kepada menerapkan kondisi pada row yang akan diambil dari table. LIKE
digunakan Kepada mencocokkan pola teks dan %
adalah wildcard digunakan mencocokkan bagian dari teks yang Bukan Niscaya. Sehingga Sabun%
digunakan Kepada mendapatkan Segala nama produk yang dimulai dengan “Sabun” dan diikuti oleh apa pun Watak lainnya.
Soal 2 : Menampilkan Copot penjualan yang Aneh.
Karena penjualan di Copot 2024-02-15
sebanyak 3x, maka hasil yang diharapkan hanya Eksis 8 baris seperti di Dasar ini :
tanggal_penjualan |
---|
2024-02-15 |
2024-01-20 |
2024-01-19 |
2024-01-23 |
2024-02-12 |
2024-02-01 |
2024-02-10 |
2024-02-14 |
Solusi :
SELECT DISTINCT tanggal_penjualan
FROM penjualan;
DISTINCT
digunakan dalam query SELECT
Kepada mengembalikan hanya nilai-nilai Aneh dari column yang dipilih sehingga Mekanis menghilangkan data yang duplicate.
Soal 3 : Menampilkan total penjualan perhari.
Hasil yang diharapkan :
tanggal_penjualan | total_penjualan |
---|---|
2024-02-15 | 125000 |
2024-01-20 | 30000 |
2024-01-19 | 24000 |
2024-01-23 | 20000 |
2024-02-12 | 25000 |
2024-02-01 | 36000 |
2024-02-10 | 20000 |
2024-02-14 | 20000 |
Solusi :
SELECT tanggal_penjualan, SUM(total_harga) AS total_penjualan
FROM penjualan
GROUP BY tanggal_penjualan;
SUM
Kepada menjumlahkan nilai-nilai dalam sebuah column numeric. Apabila kita menggunakan SUM
maka harus menambahkan GROUP BY
Kepada mengelompokkan data penjualan berdasarkan tanggal_penjualan
Soal 4 : Menampilkan trend penjualan per bulan
Hasil yang diharapkan :
bulan | total_penjualan |
---|---|
1 | 74000 |
2 | 226000 |
Solusi :
SELECT EXTRACT(MONTH FROM tanggal_penjualan) AS bulan, SUM(total_harga) AS total_penjualan
FROM penjualan
GROUP BY bulan
ORDER BY bulan;
EXTRACT
Kepada mengambil bulan dari tanggal_penjualan. ORDER BY
digunakan Kepada mengurutkan hasil berdasarkan bulan, sehingga total penjualan akan ditampilkan secara urut berdasarkan bulan.
Solusi 5 : Menemukan produk dengan total penjualan kurang dari 30.000
Hasil yang diharapkan :
nama_produk | total_penjualan |
---|---|
Shampo | 15000 |
Sabun mandi | 20000 |
Pasta gigi | 24000 |
Sabun cuci piring | 25000 |
Solusi :
SELECT
produk.nama_produk,
SUM(total_harga) AS total_penjualan
FROM penjualan
INNER JOIN produk ON penjualan.id_produk = produk.id_produk
GROUP BY produk.nama_produk, penjualan.total_harga
HAVING SUM(total_harga)
ORDER BY SUM(total_harga) ASC;
JOIN
Kepada menggabungkan data penjualan
dan produk
dengan perantara id_produk
(disesuaikan dengan Foreign Key
yang telah di set di table penjualan
HAVING
Kepada menerapkan kondisi pada hasil agregat. Sehingga hanya data dengan jumlah total harga kurang dari 30000 yang akan disertakan dalam hasil query.
Solusi 6 : Menemukan produk terlaris
Karena detergen terjual sebanyak 1x di Copot 2024-01-23, 1x di Copot 2024-02-10, dan 3x di Copot 2024-02-15, maka hasil yang diharapkan :
nama_produk | total_penjualan |
---|---|
Detergen | 5 |
Solusi :
SELECT
nama_produk,
SUM(jumlah) AS total_penjualan
FROM penjualan
INNER JOIN produk ON penjualan.id_produk = produk.id_produk
GROUP BY nama_produk
ORDER BY total_penjualan DESC
LIMIT 1;
LIMIT
Kepada membatasi jumlah row yang akan ditampilkan hasil query. Karena kita telah ORDER BY
terlebih dahulu secara DESC
total penjualan, maka kita hanya perlu mengampil data teratas sebagai produk yang paling Laris manis.
Demikian pembelajaran kita mengenai SQL. Apabila Anda merasa Tetap belum terlalu paham mengenai SQL, Anda juga Dapat mencoba berlatih secara gratis di website ini: