Murakkab so'rovlar quyidagi yo'llar bilan olinadi:
Bitta so'rovni boshqasiga qo'yish orqali. Bunday holda, tashqi ifoda asosiy so'rov deb ataladi va o'rnatilgan ifoda pastki so'rov deb ataladi. SQL so'rovlari bilan turli xil operatorlarning so'rovlarni bajarish natijalarini birlashtirish. Bunday operatorlar relyatsion deb ataladi.
SQL-da murakkab so'rovlarning misollarini ko'rib chiqing.
select * from mualliflar; +------------+-------------+-----------+------+ | Muallif_Id | Ism | Fam | Yosh | +------------+-------------+-----------+------+ | 1 | Александр | Пушкин | 37 | | 2 | Сергей | Есенин | 30 | | 3 | Джек | Лондон | 40 | | 4 | Шота | Руставели | 44 | | 5 | Рабиндранат | Тагор | 80 | +------------+-------------+-----------+------+ 5 rows in set (0.00 sec)
mysql> select * from kitoblar; +----------+--------------------+------------+ | kitob_Id | nomi | Muallif_id | +----------+--------------------+------------+ | 1 | Руслан и Людмила | 1 | | 2 | Кавказский пленник | 1 | | 3 | Евгений Онегин | 1 | | 4 | Радуница | 2 | | 5 | Преображение | 2 | | 6 | Мартин Иден | 3 | | 7 | Морской волк | 3 | | 8 | Белый Клык | 3 | +----------+--------------------+------------+ 8 rows in set (0.00 sec) Keling, mualliflarning ismi "Aleksandr" bo'lgan barcha kitoblarning ma'lumotlar bazasidan tanlab olamiz:
SELECT kitob_Id, nomi FROM kitoblar WHERE muallif_id = (SELECT muallif_Id FROM mualliflar WHERE ism = 'Александр'); +----------+--------------------+ | kitob_Id | nomi | +----------+--------------------+ | 1 | Руслан и Людмила | | 2 | Кавказский пленник | | 3 | Евгений Онегин | +----------+--------------------+ 3 rows in set (0.06 sec) "Alexander" yoki "Sergey" nomli mualliflar tomonidan yaratilgan barcha kitoblarning "kitoblar" jadvalidan topamiz:
SELECT NOMI, KITOB_ID -> FROM KITOBLAR -> WHERE MUALLIF_ID = SOME(SELECT MUALLIF_ID FROM MUALLIFLAR -> WHERE ISM IN ('АЛЕКСАНДР', 'СЕРГЕЙ')); +--------------------+----------+ | NOMI | KITOB_ID | +--------------------+----------+ | Руслан и Людмила | 1 | | Кавказский пленник | 2 | | Евгений Онегин | 3 | | Радуница | 4 | | Преображение | 5 | +--------------------+----------+ 3. "Kitoblar" jadvalidagi kitoblardan mualliflarning ismlari "Sergey" va "Alexander" emaslarini tanlab olamiz: SELECT * -> FROM kitoblar -> WHERE muallif_id != ALL(SELECT muallif_Id FROM mualliflar WHERE ism IN ('Александр', 'Сергей')); +----------+--------------+------------+ | kitob_Id | nomi | Muallif_id | +----------+--------------+------------+ | 6 | Мартин Иден | 3 | | 7 | Морской волк | 3 | | 8 | Белый Клык | 3 | +----------+--------------+------------+ 4) "Kitoblar" jadvalini olib, undan barcha kitoblarni saralang, unda "mualliflar" jadvalidan ushbu kitoblarning mualliflari ismlari va familiyalari ko'rsatilgan: SELECT kitoblar.kitob_id, kitoblar.nomi, mualliflar.ism, -> mualliflar.fam -> FROM kitoblar -> JOIN mualliflar ON mualliflar.muallif_id = kitoblar.muallif_id; +----------+--------------------+-----------+--------+ | kitob_id | nomi | ism | fam | +----------+--------------------+-----------+--------+ | 1 | Руслан и Людмила | Александр | Пушкин | | 2 | Кавказский пленник | Александр | Пушкин | | 3 | Евгений Онегин | Александр | Пушкин | | 4 | Радуница | Сергей | Есенин | | 5 | Преображение | Сергей | Есенин | | 6 | Мартин Иден | Джек | Лондон | | 7 | Морской волк | Джек | Лондон | | 8 | Белый Клык | Джек | Лондон | +----------+--------------------+-----------+--------+ 8 rows in set (0.00 sec) Topshiriq: Har bir talaba o’ziga berilgan predmet soha mavzusi bo’yicha murakkab so’rovlar yaratishi va natijasi bilan ko’rsatib o’tishi kerak.