Subkueri dan Common Table Expressions

Pengantar Snowflake SQL

George Boorman

Senior Curriculum Manager, DataCamp

Subkueri

  • Kueri bersarang
  • Dipakai di klausa FROM, WHERE, HAVING, atau SELECT
  • Contoh:
    SELECT column1 
    FROM table1 
    WHERE column1 = (SELECT column2 FROM table2 WHERE condition)
    
  • Jenis: Subkueri berkorelasi dan tidak berkorelasi
Pengantar Snowflake SQL

Subkueri tidak berkorelasi

-- Kueri utama mengembalikan pizza dengan harga maksimum dari subkueri
SELECT pizza_id
FROM pizzas
-- Subkueri tidak berkorelasi yang mencari harga pizza tertinggi
WHERE price = (
    SELECT MAX(price)
    FROM pizzas
)
  • Subkueri tidak berinteraksi dengan kueri utama
Pengantar Snowflake SQL

Subkueri berkorelasi

  • Subkueri mereferensikan kolom dari kueri utama
SELECT pt.name, 
       pz.price, 
       pt.category
FROM pizzas AS pz
JOIN pizza_type AS pt 
    ON pz.pizza_type_id = pt.pizza_type_id
WHERE pz.price = (
  -- Menemukan harga maksimum untuk tiap kategori pizza
    SELECT MAX(p2.price) -- Harga maksimum
    FROM pizzas AS p2
    WHERE -- Berkorelasi: memakai kolom kueri luar 
      p2.pizza_type_id = pz.pizza_type_id
)
Pengantar Snowflake SQL

Common Table Expressions

Sintaks umum:

-- Kata kunci WITH
WITH cte1 AS ( -- Nama CTE
        SELECT col_1, col_2
            FROM table1
    )
    ...
SELECT ... 
FROM cte1 -- Kueri CTE
;
Pengantar Snowflake SQL

Common Table Expressions

WITH max_price AS ( -- CTE bernama max_price
    SELECT pizza_type_id, 
           MAX(price) AS max_price
    FROM pizzas
    GROUP BY pizza_type_id
)

-- Kueri utama SELECT pt.name, pz.price, pt.category FROM pizzas AS pz JOIN pizza_type AS pt ON pz.pizza_type_id = pt.pizza_type_id JOIN max_price AS mp -- Menggabungkan dengan CTE max_price ON pt.pizza_type_id = mp.pizza_type_id WHERE pz.price < mp.max_price -- Bandingkan harga dengan kolom max_price dari CTE
Pengantar Snowflake SQL

Banyak CTE

-- Definisikan beberapa CTE dipisahkan koma
WITH cte1 AS (
    SELECT ...
    FROM ...
),

cte2 AS ( SELECT ... FROM ... )
-- Kueri utama yang menggabungkan kedua CTE SELECT ... FROM cte1 JOIN cte2 ON ... WHERE ...
Pengantar Snowflake SQL

Mengapa memakai CTE?

  • Mengelola operasi kompleks
  • Modular
  • Mudah dibaca
  • Dapat digunakan ulang
Pengantar Snowflake SQL

Ayo berlatih!

Pengantar Snowflake SQL

Preparing Video For Download...