Akademi Manajemen Informatika

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.

READ  Skill Paling Krusial Kepada programmer - menurut para 'dewa'

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

  1. Kepada Membangun database baru di dbeaver pilih Database → New Database Connection → PostgreSQL → klik finish.
    buat database baru
  2. Pada sidebar pilih database yang sudah kita buat dan klik connect.
    Connect ke database
  3. Kemudian buka SQL editor Kepada connect database yang telah kita buat.
    Connect SQL Editor ke Database
  4. Kepada mengetest apakah SQL Editor sudah terkoneksi dengan Berkualitas, kita dapat mengetik select 1 dan meng-execute query.
    Test query
  5. Apabila berhasil, data 1 akan terdisplay dan kita sudah Dapat menggunakan SQL Editor Kepada menulis SQL Command.
    Hasil query
READ  Skill Paling Krusial Kepada programmer - menurut para 'dewa'

Teladan kasus

Perusahaan XYZ Mempunyai data produk dan penjualan dengan format seperti berikut:

  1. 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
  1. 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 :

READ  Mengenal apa itu data struktur ld+json pada SEO?
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: