MySQL Урок за подзаявки с примери
Какво представляват подзаявките?
Подзаявката е заявка за избор, която се съдържа в друга заявка. Вътрешната заявка за избор обикновено се използва за определяне на резултатите от външната заявка за избор.
Нека да разгледаме синтаксиса на подзаявката –
Често срещано оплакване на клиенти във видеотеката на MyFlix е малкият брой филмови заглавия. Ръководството иска да купува филми за категория, която има най-малко заглавия.
Можете да използвате заявка като
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Дава резултат
Нека да видим как работи тази заявка
Горното е форма на Подзаявка за ред. В такива подзаявки вътрешната заявка може да даде само ЕДИН резултат. Допустимите оператори при работа с подзаявки за редове са [=, >, =, <=, ,!=, ]
Нека да разгледаме друг пример,
Да предположим, че искате имена и телефонни номера на членове на хора, които са наели филм и тепърва ще ги връщат. След като получите имена и телефонен номер, вие ги извиквате, за да им напомняте. Можете да използвате заявка като
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Нека да видим как работи тази заявка
В този случай вътрешната заявка връща повече от един резултат. Горното е тип Tспособен под-query.
Досега видяхме две заявки, нека сега видим пример за тройна заявка!!!
Да предположим, че ръководството иска да възнагради най-добре плащащия член.
Можем да изпълним запитване като
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Горната заявка дава следния резултат –
Подзаявки срещу присъединявания!
В сравнение с Joins, подзаявките са лесни за използване и лесни за четене. Те не са толкова сложни, колкото Се присъедини към
Следователно често се използват от SQL начинаещи.
Но подзаявките имат проблеми с производителността. Използването на присъединяване вместо подзаявка понякога може да ви даде до 500 пъти увеличение на производителността.
При избор се препоръчва използването на JOIN над подзаявка.
Подзаявките трябва да се използват само като резервно решение, когато не можете да използвате операция JOIN, за да постигнете горното
Oбобщение
- Подзаявките са вградени заявки в друга заявка. Вградената заявка е известна като вътрешна заявка, а заявката за контейнер е известна като външна заявка.
- Подзаявките са лесни за използване, предлагат голяма гъвкавост и могат лесно да бъдат разбити на отделни логически компоненти, съставляващи заявката, което е много полезно, когато Тестване и отстраняване на грешки в заявките.
- MySQL поддържа три типа подзаявки, скаларни, редови и таблични подзаявки.
- Скаларните подзаявки връщат само един ред и една колона.
- Подзаявките за ред връщат само един ред, но могат да имат повече от една колона.
- Подзаявките за таблица могат да връщат множество редове, както и колони.
- Подзаявките могат да се използват и в заявки INSERT, UPDATE и DELETE.
- За проблеми с производителността, когато става въпрос за получаване на данни от множество таблици, силно се препоръчва използването на JOIN вместо подзаявки. Подзаявките трябва да се използват само с основателна причина.