Menu
Coddy logo textTech

Simplify queries, WITH keyword

Coddy'nin SQL Journey'sinin Temeller bölümünün bir parçası — ders 49 / 72.

Sorgular, birçok iç sorgu ekleyerek çok karmaşık hale gelebilir. Örneğin, burada birçok alt sorguya sahip bir sorgu var:

SELECT * FROM table1
WHERE col2 IN (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
		SELECT col5 FROM table3
		WHERE col1 AND col3 OR col2
	)
)

Bunu kolaylaştırmak için WITH query_name AS (...) anahtar kelimesini kullanabiliriz. Bu, bir sorguyu bir adla kaydedip istediğimiz yerde kullanmamıza olanak tanır:

WITH query1 AS (
	SELECT col5 FROM table3
	WHERE col1 AND col3 OR col2
), query2 AS (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN query2 AND col4 IN query1

Burada query1'i query2'de ve ana sorguda yeniden kullandık.

challenge icon

Görev

Kolay

Mevcut tablolar ve sütunlar:

  • <strong>devices_specs</strong>: <strong>device_id</strong>, <strong>width</strong>, <strong>height</strong>, <strong>num_features</strong>, <strong>opinion</strong>
  • <strong>devices_score</strong>: <strong>device_id</strong>, <strong>score</strong>

şöyle bir sorgu yazın:

  1. İlk olarak "büyük cihazlar"ı belirler (width'i 200'den büyük cihazlar)
  2. Sonra bu büyük cihazlar için ortalama puanı hesaplar. Bu sütunu average_score olarak adlandırın

Bu sorunu çözmek için WITH yan tümcesini kullanın.

Kopya kağıdı

WITH query_name AS (...) kullanarak yeniden kullanılabilir adlandırılmış alt sorgular oluşturun:

WITH query1 AS (
    SELECT col5 FROM table3
    WHERE col1 AND col3 OR col2
), query2 AS (
    SELECT col1 FROM table2
    WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN query2 AND col4 IN query1

Bu yaklaşım, birden fazla alt sorgu içeren karmaşık sorguları daha okunabilir hale getirir ve aynı alt sorguyu birden fazla kez yeniden kullanmaya izin verir.

Kendin dene

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler