Common Table Expressions

Manipulasi Data di SQL

Mona Khalil

Data Scientist, Greenhouse Software

Saat menambah subkueri...

  • Kompleksitas kueri cepat meningkat!
    • Sulit melacak informasinya

Solusi: Common Table Expressions!

Manipulasi Data di SQL

Common Table Expressions

Common Table Expressions (CTE)

  • Tabel yang dideklarasikan sebelum kueri utama
  • Dinamai dan direferensikan nanti di klausa FROM

Membuat CTE

WITH cte AS (
    SELECT col1, col2
    FROM table)

SELECT AVG(col1) AS avg_col FROM cte;
Manipulasi Data di SQL

Ambil subkueri di FROM

SELECT
  c.name AS country,
  COUNT(s.id) AS matches
FROM country AS c
INNER JOIN (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10) AS s
ON c.id = s.country_id
GROUP BY country;
| country     | matches |
|-------------|---------|
| England     | 3       |
| Germany     | 1       |
| Netherlands | 1       |
| Spain       | 4       |
Manipulasi Data di SQL

Letakkan di awal

(
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipulasi Data di SQL

Letakkan di awal

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
Manipulasi Data di SQL

Tampilkan CTE-nya

WITH s AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10
)
SELECT
  c.name AS country,
  COUNT(s.id) AS matches
FROM country AS c
INNER JOIN s
ON c.id = s.country_id
GROUP BY country;
| country     | matches |
|-------------|---------|
| England     | 3       |
| Germany     | 1       |
| Netherlands | 1       |
| Spain       | 4       |
Manipulasi Data di SQL

Tampilkan semua CTE

WITH s1 AS (
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) >= 10),
s2 AS (                              -- Subkueri baru
  SELECT country_id, id 
  FROM match
  WHERE (home_goal + away_goal) <= 1
)
SELECT
  c.name AS country,
  COUNT(s1.id) AS high_scores,
  COUNT(s2.id) AS low_scores         -- Kolom baru
FROM country AS c
INNER JOIN s1
ON c.id = s1.country_id
INNER JOIN s2                        -- Join baru
ON c.id = s2.country_id
GROUP BY country;
Manipulasi Data di SQL

Mengapa memakai CTE?

  • Dieksekusi sekali

    • Lalu disimpan di memori
    • Meningkatkan performa kueri
  • Memperbaiki organisasi kueri

  • Dapat mereferensikan CTE lain

  • Dapat mereferensikan dirinya sendiri (SELF JOIN)
Manipulasi Data di SQL

Ayo berlatih!

Manipulasi Data di SQL

Preparing Video For Download...