Какво представляват подзаявките?
Подзаявката е заявка за избор, която се съдържа в друга заявка. Вътрешната заявка за избор обикновено се използва за определяне на резултатите от външната заявка за избор.
Нека да разгледаме синтаксиса на подзаявката -
Често оплакване на клиенти във видеотеката 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 под-заявка y.
До сега видяхме две заявки, нека сега видим пример за тройна заявка !!!
Да предположим, че ръководството иска да награди най-високоплатения член.
Можем да изпълним заявка като
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Горната заявка дава следния резултат -
Подзаявки срещу присъединяване!
Когато се сравняват с Joins, подзаявките са лесни за използване и лесни за четене. Те не са толкова сложни като Joins
Следователно често се използват от начинаещи в SQL.
Но подзаявките имат проблеми с производителността. Използването на присъединяване вместо подзаявка понякога може да ви увеличи до 500 пъти повишаване на производителността.
При даден избор се препоръчва да използвате JOIN над подзаявка.
Подзаявките трябва да се използват като резервно решение само когато не можете да използвате JOIN операция за постигане на горното
Обобщение
- Подзаявките са вградени заявки в друга заявка. Вградената заявка е известна като вътрешна заявка, а заявката за контейнер е известна като външна заявка.
- Подзаявките са лесни за използване, предлагат голяма гъвкавост и могат лесно да бъдат разделени на отделни логически компоненти, съставляващи заявката, което е много полезно при тестване и отстраняване на грешки в заявките.
- MySQL поддържа три типа подзаявки, скаларни, редови и таблични подзаявки.
- Скаларните подзаявки връщат само един ред и една колона.
- Подзаявките за редове връщат само един ред, но могат да имат повече от една колона.
- Подзаявките за таблици могат да връщат множество редове, както и колони.
- Подзаявките могат да се използват и в INSERT, UPDATE и DELETE заявки.
- За проблеми с производителността, когато става въпрос за получаване на данни от множество таблици, силно се препоръчва да използвате JOIN вместо подзаявки. Подзаявките трябва да се използват само с основателна причина.