Menu
Coddy logo textTech

Sorguları Basitleştirme, WITH Anahtar Sözcüğü

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

Çok sayıda iç sorgu eklemek, sorguları fazla karmaşık hâle getirebilir. Örneğin, burada birçok alt sorgu içeren 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
	)
)

İşi kolaylaştırmak için WITH query_name AS (...) anahtar sözcüğünü kullanabiliriz. Bu, bir sorguyu bir adla kaydetmemize ve 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 (SELECT col1 FROM query2) AND col4 IN (SELECT col5 FROM query1)

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

challenge icon

Görev

Kolay

Kullanılabilir tablolar ve sütunlar:

  • devices_specs: device_id, width, height, num_features, opinion
  • devices_score: device_id, score

şunları yapan bir sorgu yazın:

  1. Öncelikle "büyük cihazları" (width değeri 200'den büyük olan cihazları) belirleyin
  2. Ardından bu büyük cihazların ortalama puanını hesaplayın. Bu sütunu average_score olarak adlandırın

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

Kendin dene

-- Adım 1: yalnızca ilgilendiğiniz cihazları tutan geçici bir sonuç kümesi adlandırın
WITH large_devices AS (
    SELECT ____
    FROM devices_specs
    WHERE ____
)
-- Adım 2: bu geçici sonuç kümesini ana sorgunun içinde yeniden kullanın
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);
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

Kendi başına pratik yap: SQL playground