Di **MySQL**, kolom tabel pada dasarnya memang menyimpan **data statis**. Namun ada beberapa cara untuk membuat kolom yang nilainya **berasal dari perhitungan atau query dari kolom lain**. Yang paling umum:

---

## 1. Generated Column (Kolom hasil perhitungan)

MySQL punya fitur **generated column**, yaitu kolom yang nilainya otomatis dihitung dari kolom lain.

Contoh:

```sql
CREATE TABLE produk (
    harga INT,
    qty INT,
    total INT AS (harga * qty)
);
```

Setiap kali `harga` atau `qty` berubah, `total` akan otomatis dihitung ulang.

Ada dua tipe:

* **VIRTUAL**

  * Tidak disimpan di disk
  * Dihitung saat query
* **STORED**

  * Disimpan di tabel (seperti kolom biasa)

Contoh lengkap:

```sql
CREATE TABLE produk (
    harga INT,
    qty INT,
    total INT AS (harga * qty) STORED
);
```

---

## 2. View (Query sebagai tabel virtual)

Kalau logika perhitungannya lebih kompleks atau melibatkan tabel lain, biasanya pakai **view**.

```sql
CREATE VIEW v_total_penjualan AS
SELECT
    harga,
    qty,
    harga * qty AS total
FROM produk;
```

`v_total_penjualan` akan terlihat seperti tabel, tapi sebenarnya hasil query.

---

## 3. Trigger (Update otomatis)

Kalau ingin kolom disimpan tapi dihitung otomatis saat insert/update, bisa pakai trigger.

```sql
CREATE TRIGGER before_insert_produk
BEFORE INSERT ON produk
FOR EACH ROW
SET NEW.total = NEW.harga * NEW.qty;
```

---

✅ **Ringkasnya:**

| Cara             | Sifat                              |
| ---------------- | ---------------------------------- |
| Generated Column | otomatis dari kolom lain           |
| View             | kolom hasil query (virtual tabel)  |
| Trigger          | hitung otomatis saat insert/update |

---

💡 **Saran praktik umum:**

* Jika hanya perhitungan dari kolom yang sama → **Generated Column**
* Jika melibatkan banyak tabel → **View**
* Jika ingin nilai tersimpan tapi auto update → **Trigger**

---

Kalau kamu mau, aku juga bisa jelaskan **cara membuat kolom yang query-nya mengambil dari tabel lain (dynamic lookup)** di MySQL, karena itu sedikit berbeda dan ada beberapa batasannya.
