Subquery และ Common Table Expression (CTE)

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Amy McCarty

Instructor

เกี่ยวกับ Subquery

คืออะไร?

  • ทางเลือกแทน Join
  • คิวรีที่เรียบง่าย

ทำไมต้องใช้?

  • คืนค่าผลลัพธ์ได้เพียงค่าเดียว
  • อ่านง่าย
  • คำสั่ง SQL คล้ายกับ Join

ใช้อย่างไร?

  • ใช้ใน SELECT, FROM หรือ WHERE
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

SELECT subquery

row script_word word_length
1 goat 4
2 goat 4
3 dog 3
15,782 ... ...
row english_word word_length
1 goat 4
2 turkey 6
3 ant 3
171,476 ... ...
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

SELECT subquery

SELECT AVG(word_length) AS avg_movie
  , (SELECT AVG(word_length) 
      FROM english_language) 
      AS avg_english
FROM MOVIE
avg_movie avg_english
3 4.5
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

WHERE subquery

row script_word word_length
1 goat 4
2 goat 4
3 dog 3
15,782 ... ...
row english_word word_length
1 goat 4
2 turkey 6
3 ant 3
171,476 ... ...
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

WHERE subquery

SELECT AVG(word_length) AS avg_movie
FROM english_language
WHERE word IN 
  (SELECT DISTINCT word FROM movie) 
avg_movie
3
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

FROM subquery

SELECT AVG(word_length) AS avg_movie 
FROM (SELECT * FROM movie)

 

  • ลดความสามารถในการอ่านโค้ด
  • จำกัดความยืดหยุ่นของ Query Plan
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

เกี่ยวกับ Common Table Expression (CTE)

คืออะไร?

  • ทางเลือกแทน Join
  • คิวรีแบบอิสระที่มีชุดผลลัพธ์ชั่วคราว

ทำไมต้องใช้?

  • คืนค่าผลลัพธ์ได้เพียงค่าเดียว
  • อ่านง่าย
  • สร้างตารางชั่วคราว

ใช้อย่างไร?

  • คำสั่ง WITH
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

โครงสร้าง CTE

WITH english_cte AS
(    
  SELECT word_length
      , COUNT(word) AS english_word_count
    FROM english_language 
    GROUP BY word_length
)

SELECT movie.word_length , COUNT(movie.word) AS movie_word_count , cte.english_word_count FROM movie INNER JOIN english_cte cte ON movie.word_length = cte.word_length GROUP BY movie.word_length, cte.english_word_count
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

มาฝึกกันเถอะ!

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Preparing Video For Download...