Subquery โ€” boshqa so'rov ichidagi so'rov.

WHERE ichida subquery

-- O'rta balldan yuqori talabalar
SELECT ism, ball
FROM talabalar
WHERE ball > (SELECT AVG(ball) FROM talabalar);

-- Eng qimmat kursga yozilgan talabalar
SELECT ism
FROM talabalar
WHERE kurs_id = (
    SELECT id FROM kurslar
    ORDER BY narx DESC
    LIMIT 1
);

IN bilan subquery

-- Hech bo'lmaganda bitta kursga yozilgan talabalar
SELECT ism FROM talabalar
WHERE id IN (
    SELECT DISTINCT talaba_id FROM yozilishlar
);

-- Hech qanday kursga yozilmagan talabalar
SELECT ism FROM talabalar
WHERE id NOT IN (
    SELECT DISTINCT talaba_id FROM yozilishlar
    WHERE talaba_id IS NOT NULL
);

EXISTS

-- Yozilishi bor talabalar
SELECT t.ism
FROM talabalar t
WHERE EXISTS (
    SELECT 1 FROM yozilishlar y
    WHERE y.talaba_id = t.id
);

FROM ichida subquery (Derived Table)

-- Har shahar uchun eng yuqori ball
SELECT shahar, max_ball
FROM (
    SELECT shahar, MAX(ball) AS max_ball
    FROM talabalar
    GROUP BY shahar
) AS shahar_max
WHERE max_ball > 85;

SELECT ichida subquery (Scalar Subquery)

SELECT
    ism,
    ball,
    (SELECT AVG(ball) FROM talabalar) AS o'rta_ball,
    ball - (SELECT AVG(ball) FROM talabalar) AS farq
FROM talabalar;

CTE (Common Table Expression)

WITH yuqori_ballilar AS (
    SELECT ism, ball, shahar
    FROM talabalar
    WHERE ball > 80
),
toshkentliklar AS (
    SELECT * FROM yuqori_ballilar
    WHERE shahar = 'Toshkent'
)
SELECT * FROM toshkentliklar
ORDER BY ball DESC;