Подзаявка в записи на единична таблица:
Създайте таблица с име „животни“ в данните от базата данни.„Добавете следния запис на различни животни с различни свойства, както е показано. Вземете този запис, като използвате заявката SELECT, както следва:
>> ИЗБЕРЕТЕ * ОТ данни.животни;
Пример 01:
Нека извлечем ограничените записи на тази таблица, като използваме подзаявките. Използвайки заявката по-долу, знаем, че подзаявката ще бъде изпълнена първо и нейният изход ще бъде използван в основната заявка като вход. Подзаявката просто извлича възрастта, в която цената на животното е 2500. Възрастта на животно, чиято цена е 2500, е 4 в таблицата. Основната заявка ще избере всички записи в таблицата, където възрастта е по-голяма от 4, и изходът е даден по-долу.
>> ИЗБЕРЕТЕ * ОТ данни.животни WHERE Age> (SELECT Age FROM data.животни WHERE Цена = '2500');
Пример 02:
Нека използваме една и съща таблица в различни ситуации. В този пример ще използваме някаква функция вместо клаузата WHERE в подзаявката. Взехме средната стойност на всички цени, дадени за животни. Средната цена ще бъде 3189. Основната заявка ще избере всички записи на животни с цена над 3189. Ще получите изхода по-долу.
>> ИЗБЕРЕТЕ * ОТ данни.животни КЪДЕ Цена> (ИЗБЕРИ СРЕДНА (Цена) ОТ данните.животни);
Пример 03:
Нека използваме клаузата IN в основната заявка SELECT. На първо място, подзаявката ще достигне цени над 2500. След това основната заявка ще избере всички записи на таблица „животни“, където цената се намира в резултата от подзаявката.
>> ИЗБЕРЕТЕ * ОТ данни.животни КЪДЕ Цена В (ИЗБЕРЕТЕ ЦЕНА ОТ данните.животни КЪДЕ Цена> 2500);
Пример 04:
Използвахме подзаявката, за да извлечем името на животното, където цената е 7000. Тъй като това животно е крава, затова името „крава“ ще бъде върнато в основната заявка. В основната заявка всички записи ще бъдат извлечени от таблицата, където името на животното е „крава“.„Тъй като имаме само два записа за животинска„ крава “, ето защо имаме изход по-долу.
>> ИЗБЕРЕТЕ * ОТ данни.животни WHERE Име = (ИЗБЕРЕТЕ ИМЕ ОТ данни.животни WHERE Цена = '7000');
Подзаявка в множество записи на таблици:
Да приемем по-долу две таблици „ученик“ и „учител“ във вашата база данни. Нека опитаме няколко примера за подзаявки, използващи тези две таблици.
>> ИЗБЕРЕТЕ * ОТ данни.студент;>> ИЗБЕРЕТЕ * ОТ данни.учител;
Пример 01:
Ще извлечем данни от една таблица, използвайки подзаявката и ще ги използваме като вход за основната заявка. Това означава, че тези две таблици могат да се свържат по някакъв начин. В примера по-долу използваме подзаявката, за да извлечем името на ученика от таблицата „студент“, където името на учителя е „Самина“.'Тази заявка ще върне' Samina 'към учителя на основната таблица за заявки.„Основната заявка след това ще избере всички записи, свързани с името на учителя“ Самина.„Тъй като имаме два записа за това име, следователно имаме този резултат.
>> ИЗБЕРЕТЕ * ОТ данни.учител WHERE TeachName = (ИЗБЕРЕТЕ TeachName ОТ данните.студент WHERE TeachName = 'Samina');
Пример 02:
За да разработите подзаявката в случай на различни таблици, опитайте този пример. Имаме подзаявка, която извлича името на учителя от ученика на масата. Името трябва да има „i“ на която и да е позиция в стойността му. Това означава, че всички имена в колоната TeachName с „i“ в стойността си ще бъдат избрани и върнати към основната заявка. Основната заявка ще избере всички записи от таблицата „учител“, където името на учителя е в изхода, върнат от подзаявката. Тъй като подзаявката върна 4 имена на учители, затова ще имаме запис на всички тези имена, които се намират в учителя на таблицата.'
>> ИЗБЕРЕТЕ * ОТ данни.учител КЪДЕ TeachName IN (ИЗБЕРЕТЕ TeachName ОТ данните.студент КЪДЕ TeachName КАТО „% i% ');
Пример 03:
Помислете за двете таблици по-долу „поръчка“ и „поръчка1“.
>> ИЗБЕРЕТЕ * ОТ данни.поръчка;>> ИЗБЕРЕТЕ * ОТ данни.поръчка1;
Нека опитаме с ANY клауза в този пример, за да разработим подзаявка. Подзаявката ще избере „id“ от таблицата „order1“, където колоната „Status“ има стойност „Unpaid“.„Идентификаторът“ може да бъде повече от 1. Това означава, че повече от 1 стойност ще бъдат върнати към основната заявка, за да се получат резултатите от таблицата „поръчка“. В този случай може да се използва всеки „id“. Получихме изхода по-долу за тази заявка.
>> ИЗБЕРЕТЕ артикул, продажби, идентификатор от данни.поръчка WHERE id = ANY (ИЗБЕРЕТЕ id от данни.order1 WHERE Status = 'Unpaid');
Пример 04:
Да приемем, че имате данните по-долу в таблицата „order1“, преди да приложите някаква заявка.
>> ИЗБЕРЕТЕ * ОТ данни.поръчка1;
Нека приложим заявката в рамките на една заявка, за да изтрием някои записи от таблицата 'order1'. Първо, подзаявката ще избере стойността „Състояние“ от таблицата „Поръчка“, където Елементът е „Книга“.„Подзаявката връща„ Платено “като стойност. Сега основната заявка ще изтрие редовете от таблицата „order1“, където стойността на колоната „Status“ е „Paid.'
>> ИЗТРИВАНЕ ОТ данните.order1 WHERE Status = (SELECT Status FROM data.поръчка WHERE Артикул = 'Книга');
След проверка имаме по-долу записи в таблицата 'order1' след изпълнението на заявката.
>> ИЗБЕРЕТЕ * ОТ данни.поръчка1;
Заключение:
Във всички горепосочени примери сте работили ефективно с много подзаявки. Надяваме се, че всичко е ясно и чисто сега.