ПредишенСледващото

1) Вложените подзаявки

SQL позволява заявки да инвестират в един от друг. Обикновено подзаявка връща една стойност, която се проверява за истина предикат.

Видове условия за търсене:
• Сравнение с резултата от вместения заявката (=, <>.> =)
• Проверете за членство с резултатите от подзаявка (IN)
• Уверете се, съществуването (такъв)
• Няколко (количествено) сравняване (ТАКИВА, ALL)

Бележки вложени заявки:
• В подзаявка трябва да изберете само една колона (с изключение на сказуемото подзаявка съществува такава), както и типа данни на резултата трябва да съответства на типа данни на стойността, посочена в сказуемото.
• В някои случаи можете да използвате ключовата дума DISTINCT да се гарантира получаването на една стойност.
• В подзаявка не може да се включи клауза ORDER BY и съюз.
• В подзаявка може да бъде, и от ляво и дясно на думите за търсене.
• В под-заявки могат да бъдат използвани без раздел функция агрегация GROUP BY, което автоматично ще даде специално значение за произволен брой линии, специални предикат IN, както и изразяването на базата на колони.
• Ако е възможно, използвайте смес вместо подзаявка JOIN таблици.

Примери за вложени заявки:

2) Свързани подзаявки

В SQL можете да създадете подзаявки във връзка с таблицата на външното търсене. В този случай, подзаявка е нееднократно се изпълняват, след като за всеки ред от таблицата от външен поискване. Ето защо е важно да се използва индекс подзаявка. В подзаявка да се обърнете към една и съща маса, и навън. Ако външната заявката връща относително малък брой на линии, свързани с под-заявка ще работи по-бързо в свободно състояние. Ако подзаявка връща малък брой линии, свързаните заявката се изпълнява бавно развърза.

Примери за свързаните с под-заявки:

SELECT * FROM Специалистите по продажби Главна КЪДЕТО 1 (SELECT AVG (Amt) ОТ Поръчки O2 КЪДЕ O2.CNum = O1.CNum) // връща всички поръчки, чиято стойност е над средната стойност на поръчката за купувача

3) предиката СЪЩЕСТВУВА

В синтактичен форма: [НЕ] СЪЩЕСТВУВА ()

Предикатът използва подзаявка като аргумент и оценява това като вярно, ако подзаявка е, изходните данни, както и по друг начин, както е невярно. Подзаявка се извършва веднъж и може да съдържа няколко колони, тъй като техните стойности не се проверяват, а резултатът е просто фиксиран наличност струни.

Забележки за сказуемото СЪЩЕСТВУВА:
• СЪЩЕСТВУВА - предикат връща истина или лъжа, и може да се използва самостоятелно или с други булеви изрази.
• съществува не може да използва обобщаващи функции в подзаявка.
• в корелация (свързани зависими - корелира) подзаявки предиката съществува извършва за всеки външен ред.
• Можете да комбинирате СЪЩЕСТВУВА предикат от масата за връзка.

Примери за предикатното съществува:

SELECT * FROM Customer Когато съществува (SELECT * FROM клиент, където се City = 'Сан Хосе ") - връща всички клиенти, ако един от тях живее в Сан Хосе.
SELECT DISTINCT SNum ОТ клиент за първи път, когато не съществува (SELECT * FROM Customer Изпрати КЪДЕ Send.SNum = First.SNum И Send.CNum<>First.CNum) - връща броя на продавачите, се погрижат само за един клиент.
SELECT DISTINCT F.SNum, SNAME, F.City ОТ продавачи F, Клиентът S, където съществува (SELECT * от Т Клиент КЪДЕТО S.SNum = T.SNum И S.CNum<>T.CNum И F.SNum = S.SNum) - връща броя, имената и градовете на пребиваване на всички доставчици се погрижат за няколко клиента.
SELECT * FROM специалистите по продажбите Frst Когато съществува (SELECT * FROM Customer Изпрати КЪДЕ Frst.SNum = Send.SNum И 1

4) количествени предикати сравнение

Синтактични форма: [НЕ] | = |> Всяка | ALL ()

Тези предикати се използват като аргумент на подзаявка, обаче, в сравнение с съществува предикат, те се използват в комбинация със съотношение предикати (=<>.> =). В този смисъл те са подобни на предиката IN, но важат само за подзаявки. Стандартът дава възможност за използване вместо НЯКОЙ НЯКОИ ключови думи, но не всички СУБД го подкрепят.

Бележки за сравняване на предикати:
• Всички предикат се изчислява на TRUE, ако всяка стойност се избира по време на подзаявка отговаря на изискването, посочено в предиката на външния искането. Най-често тя се използва с неравенството.
• КАКЪВТО предикат се изчислява на TRUE, ако поне една стойност, избрана в процеса на подзаявка отговаря на изискването, посочено в предиката на външния искането. Най-често тя се използва с неравенството.
• Ако подзаявка връща Няма редове, и след това автоматично да приемете всичко е вярно (счита се, че условието за сравнение е изпълнено) и за всички - FALSE.
• Ако сравнението не е от значение или TRUE за един ред и има един или повече редове с нулева стойност, а след това се връща на всяка непозната.
• Ако сравнението не FALSE стойност за всяка една линия и има един или повече редове с нулева стойност, а след това се връща на всички неизвестни.

Примери за количествено сравнение предикат:

SELECT * FROM Специалистите по продажби КЪДЕ City = НЯКОЙ (Изберете град от клиента)
SELECT * FROM Поръчки КЪДЕ AmtALL (Изберете от клиент КЪДЕ City = 'Рим ")

5) уникалността Предикатът

Предикатът се използва за проверка на уникалността (липса на дублирания) в подзаявки изход. Освен това, в съответствие с предиката UNIQUT нула стойности се считат за уникални и в предиката отделни две неопределени стойности се считат равни помежду си.

6) съвпаденията на първоначални

проверки MATCH първоначални дали низ стойност на заявката на всеки ред съвпадат със стойност, получена в резултат на подзаявка. От предикат и във всеки такъв подзаявка характеризира с това, че процесът позволява "частичен» (частично) мач, който може да възникне между линии, които имат част NULL-стойности.

7) поиска в ОТ клауза

SELECT CName, Tot_Amt от клиент, (SELECT CNum, SUM (Amt) AS Tot_Amt ОТ Поръчки GROUP BY CNum) Къде Град = 'Лондон "И Customer.CNum = Orders.CNum
// подзаявка връща общата стойност на поръчките, подадени от всеки клиент от Лондон.

8) Рекурсивни заявки

С рекурсивни
Q1 AS SELECT ... от ... къде ...
Q2 AS SELECT ... FROM ... КЪДЕ ...

Подкрепете проекта - споделете линка, благодаря!