0Pricing
PostgreSQL Performance & Query Optimization · บทเรียน

คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง

เปรียบเทียบคำสั่งค้นหาย่อย นิพจน์ตารางทั่วไป (CTE) และการเชื่อมตาราง เพื่อสร้างคำสั่งค้นหาได้อย่างเหมาะสม

คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง เป็นบทเรียน PostgreSQL Performance & Query Optimization ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PostgreSQL Performance & Query Optimization และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PostgreSQL Performance & Query Optimization มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Welcome to Query Construction

In this lesson, we'll explore three fundamental ways to combine and structure data in PostgreSQL: Subqueries, Common Table Expressions (CTEs), and Joins.

Understanding their differences and optimal use cases is key to writing efficient and readable SQL.

Joins: The Foundation

You're already familiar with JOINs! They are the primary way to combine rows from two or more tables based on a related column between them.

  • Purpose: Link related data across tables.
  • Readability: Often straightforward for direct relationships.
  • Performance: Highly optimized by PostgreSQL for combining large datasets.

What are Subqueries?

A subquery (or inner query) is a query nested inside another SQL query. It can return a single value (scalar), a single row, a single column, or a table.

  • Placement: In SELECT, FROM, WHERE, or HAVING clauses.
  • Use Cases: Filtering with IN/EXISTS, calculating aggregate values for comparison, or providing derived tables.

Subquery in Action

Here's a simple example where a subquery helps find products with prices above the average. Notice how the inner query runs first.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR(50),
  price DECIMAL(10, 2)
);

INSERT INTO products (product_name, price) VALUES
('Laptop', 1200.00),
('Mouse', 25.00),
('Keyboard', 75.00),
('Monitor', 300.00),
('Webcam', 50.00);

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

DROP TABLE products;

What are CTEs?

A Common Table Expression (CTE), defined with the WITH clause, creates a temporary, named result set that you can reference within a single SQL statement.

  • Purpose: Improve readability, organize complex queries, and enable recursion.
  • Scope: Only available for the query immediately following the WITH clause.
  • Readability: Breaks down complex logic into logical, readable steps.

CTE in Action

Let's rewrite the previous example using a CTE. Notice how it defines "average_price" first, making the main query clearer.

CREATE TABLE products (
  product_id SERIAL PRIMARY KEY,
  product_name VARCHAR(50),
  price DECIMAL(10, 2)
);

INSERT INTO products (product_name, price) VALUES
('Laptop', 1200.00),
('Mouse', 25.00),
('Keyboard', 75.00),
('Monitor', 300.00),
('Webcam', 50.00);

WITH AverageProductPrice AS (
  SELECT AVG(price) AS avg_price
  FROM products
)
SELECT p.product_name, p.price
FROM products p, AverageProductPrice app
WHERE p.price > app.avg_price;

DROP TABLE products;

Choosing Joins

JOINs are your go-to when you need to combine data from different tables that have a direct, logical relationship.

  • Direct Relationships: When tables are linked by foreign keys.
  • Performance: Highly optimized by the planner for combining large datasets efficiently.
  • Result Set: Creates a single, wider result set from matching rows.

They are often the most performant for combining large tables.

Choosing Subqueries

Subqueries are useful for specific filtering or calculating values that depend on the main query's data, often acting as a single value or a list.

  • Scalar Values: When you need a single value (e.g., WHERE price > (SELECT AVG(price))).
  • Filtering: With IN, NOT IN, EXISTS, NOT EXISTS clauses.
  • Derived Tables: In the FROM clause for temporary, unnamed result sets.

They can sometimes be less readable for complex logic.

Choosing CTEs

CTEs excel when you need to break down complex queries into logical, readable steps or handle recursive data structures.

  • Readability: Improves understanding of multi-step logic.
  • Recursion: Essential for querying hierarchical or graph-like data.
  • Reusability: A CTE can be referenced multiple times within the same main query.

They are often preferred over complex subqueries for clarity.

Performance: It's Complicated!

Often, a query written with a subquery can be rewritten as a JOIN or a CTE, and vice-versa. PostgreSQL's optimizer is smart!

  • Optimizer Role: It often transforms these constructs internally into the most efficient execution plan.
  • Readability First: Prioritize clear, maintainable code.
  • EXPLAIN ANALYZE: Always use it to truly understand the performance impact of your chosen approach, rather than guessing.

Compare & Contrast

Consider the following scenarios. Which SQL construct is generally the most suitable choice for each?

Recap: Constructing Optimal Queries

You've learned to differentiate between JOINs, Subqueries, and CTEs:

  • JOINs: Best for direct table relationships and combining large datasets.
  • Subqueries: Ideal for scalar values, IN/EXISTS filtering, and derived tables.
  • CTEs: Shine for readability, multi-step logic, and recursive queries.

Remember to prioritize readability and use EXPLAIN ANALYZE to confirm performance!

คำถามที่พบบ่อย

บทเรียน “คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PostgreSQL Performance & Query Optimization ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PostgreSQL Performance & Query Optimization มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง”

เปรียบเทียบคำสั่งค้นหาย่อย นิพจน์ตารางทั่วไป (CTE) และการเชื่อมตาราง เพื่อสร้างคำสั่งค้นหาได้อย่างเหมาะสม คุณปฏิบัติ PostgreSQL Performance & Query Optimization ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PostgreSQL Performance & Query Optimization หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PostgreSQL Performance & Query Optimization บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PostgreSQL Performance & Query Optimization นี้ได้ไหม

ได้ บทเรียน PostgreSQL Performance & Query Optimization ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจอัลกอริทึมการเชื่อมตาราง
  2. การเขียนการเชื่อมตารางที่ซับซ้อนใหม่
  3. คำสั่งค้นหาย่อย เทียบกับ CTE และการเชื่อมตาราง
  4. การปรับการรวมตารางแบบ LATERAL และการค้นหาที่สัมพันธ์กัน
← กลับไปที่ PostgreSQL Performance & Query Optimization