Menu
Coddy logo textTech

פישוט שאילתות באמצעות מילת המפתח WITH

חלק מהיחידה יסודות במסלול ה-SQL של Coddy. שיעור 49 מתוך 72.

שאילתות עלולות להסתבך כשמוסיפים להן שאילתות פנימיות רבות. לדוגמה, הנה שאילתה שיש בה שאילתות משנה רבות:

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
	)
)

כדי להקל על כך, נוכל להשתמש במילת המפתח WITH query_name AS (...). היא מאפשרת לנו לשמור שאילתה בשם ולהשתמש בה בכל מקום שנרצה:

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)

כאן השתמשנו שוב ב־query1 בתוך query2 ובשאילתה הראשית.

challenge icon

אתגר

קל

טבלאות ועמודות זמינות:

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

כתבו שאילתה ש:

  1. תחילה מזהה "large devices" (מכשירים שה-width שלהם גדול מ-200)
  2. לאחר מכן מחשבת את הציון הממוצע של המכשירים הגדולים האלה. קראו לעמודה הזו average_score

השתמשו בסעיף WITH כדי לפתור את הבעיה.

נסו בעצמכם

-- שלב 1: תנו שם לקבוצת תוצאות זמנית שמכילה רק את המכשירים שמעניינים אתכם
WITH large_devices AS (
    SELECT ____
    FROM devices_specs
    WHERE ____
)
-- שלב 2: השתמשו שוב בקבוצת התוצאות הזמנית הזו בתוך השאילתה הראשית
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: SQL אונליין