9.24. ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑов #
Ð ÑÑом Ñазделе опиÑÐ°Ð½Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑов, коÑоÑÑе ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ñ Ð² PostgreSQL в ÑооÑвеÑÑÑвии Ñо ÑÑандаÑÑом SQL. ÐÑе ÑаÑÑмоÑÑеннÑе здеÑÑ ÑоÑÐ¼Ñ Ð²ÑÑажений возвÑаÑÐ°ÐµÑ Ð±ÑÐ»ÐµÐ²Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ (true/false).
9.24.1. EXISTS #
EXISTS (подзапÑоÑ)ÐÑгÑменÑом EXISTS ÑвлÑеÑÑÑ Ð¾Ð±ÑÑнÑй опеÑаÑÐ¾Ñ SELECT, Ñ. е. подзапÑоÑ. ÐÑполнив запÑоÑ, ÑиÑÑема пÑовеÑÑеÑ, возвÑаÑÐ°ÐµÑ Ð»Ð¸ он ÑÑÑоки в ÑезÑлÑÑаÑе. ÐÑли он возвÑаÑÐ°ÐµÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм Ð¾Ð´Ð½Ñ ÑÑÑокÑ, ÑезÑлÑÑаÑом EXISTS бÑÐ´ÐµÑ Â«true», а еÑли не возвÑаÑÐ°ÐµÑ Ð½Ð¸ одной â «false».
ÐодзапÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº пеÑеменнÑм внеÑнего запÑоÑа, коÑоÑÑе в ÑÐ°Ð¼ÐºÐ°Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑа ÑÑиÑаÑÑÑÑ ÐºÐ¾Ð½ÑÑанÑами.
ÐообÑе говоÑÑ, подзапÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð½Ðµ полноÑÑÑÑ, а завеÑÑаÑÑÑÑ, как ÑолÑко бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑена Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð° ÑÑÑока. ÐоÑÑÐ¾Ð¼Ñ Ð² подзапÑоÑÐ°Ñ ÑледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ Ð¿Ð¾Ð±Ð¾ÑнÑÑ ÑÑÑекÑов (напÑимеÑ, обÑаÑений к генеÑаÑоÑам поÑледоваÑелÑноÑÑей); пÑоÑвление побоÑного ÑÑÑекÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¿ÑедÑказÑемÑм.
Так как ÑезÑлÑÑÐ°Ñ ÑÑого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ ÑолÑко Ð¾Ñ Ñого, возвÑаÑаÑÑÑÑ ÑÑÑоки или неÑ, но не Ð¾Ñ Ð¸Ñ
ÑодеÑжимого, ÑпиÑок вÑÑ
однÑÑ
знаÑений подзапÑоÑа обÑÑно не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ. Ðак ÑледÑÑвие, ÑиÑоко ÑаÑпÑоÑÑÑанена пÑакÑика, когда пÑовеÑки EXISTS запиÑÑваÑÑÑÑ Ð² ÑоÑме EXISTS(SELECT 1 WHERE ...). Ðднако из ÑÑого пÑавила еÑÑÑ Ð¸ иÑклÑÑениÑ, напÑÐ¸Ð¼ÐµÑ Ñ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑами Ñ Ð¿Ñедложением INTERSECT.
ÐÑÐ¾Ñ Ð¿ÑоÑÑой пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾Ñ
ож на внÑÑÑеннее Ñоединение по ÑÑолбÑÑ col2, но он вÑдаÑÑ Ð¼Ð°ÐºÑимÑм Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки в tab1, даже еÑли в tab2 ей ÑооÑвеÑÑÑвÑÑÑ Ð½ÐµÑколÑко ÑÑÑок:
SELECT col1 FROM tab1 WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2);
9.24.2. IN #
вÑÑажениеIN (подзапÑоÑ)
РпÑавой ÑÑоÑоне ÑÑого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
задаÑÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно один ÑÑолбеÑ. ÐÑÑиÑленное знаÑение левого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваеÑÑÑ Ñо знаÑениÑми во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ IN бÑÐ´ÐµÑ Â«true», еÑли ÑÑÑока Ñ Ñаким знаÑением наÑ
одиÑÑÑ, и «false» в пÑоÑивном ÑлÑÑае (в Ñом ÑиÑле, когда подзапÑÐ¾Ñ Ð²Ð¾Ð¾Ð±Ñе не возвÑаÑÐ°ÐµÑ ÑÑÑок).
ÐамеÑÑÑе, ÑÑо еÑли ÑезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñлева оказÑваеÑÑÑ NULL или ÑавнÑÑ
знаÑений ÑпÑава не наÑ
одиÑÑÑ, а Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ из знаÑений ÑпÑава Ñавно NULL, конÑÑÑÑкÑÐ¸Ñ IN возвÑаÑÐ°ÐµÑ NULL, а не false. ÐÑо ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑинÑÑÑм в SQL пÑавилам ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
Ñо знаÑениÑми NULL.
Так же, как и Ñ EXISTS, здеÑÑ Ð½Ðµ ÑледÑÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо подзапÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñегда вÑполнÑÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ.
конÑÑÑÑкÑоÑ_ÑÑÑокиIN (подзапÑоÑ)
Рлевой ÑаÑÑи ÑÑой ÑоÑÐ¼Ñ IN запиÑÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑÑÑоки (подÑобнее они ÑаÑÑмаÑÑиваÑÑÑÑ Ð² ÐодÑазделе 4.2.13). СпÑава в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен веÑнÑÑÑ Ñовно ÑÑолÑко ÑÑолбÑов, ÑколÑко ÑодеÑÐ¶Ð¸Ñ ÑÑÑока в вÑÑажении Ñлева. ÐÑÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваÑÑÑÑ Ð¿Ð¾ÑÑÑоÑно Ñо знаÑениÑми во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ IN бÑÐ´ÐµÑ Â«true», еÑли ÑÑÑока Ñ Ñакими знаÑениÑми наÑ
одиÑÑÑ, и «false» в пÑоÑивном ÑлÑÑае (в Ñом ÑиÑле, когда подзапÑÐ¾Ñ Ð²Ð¾Ð¾Ð±Ñе не возвÑаÑÐ°ÐµÑ ÑÑÑок).
Ðак обÑÑно, знаÑÐµÐ½Ð¸Ñ NULL в ÑÑÑокаÑ
обÑабаÑÑваÑÑÑÑ Ð¿Ñи ÑÑом по пÑинÑÑÑм в SQL пÑавилам ÑÑавнениÑ. Ðве ÑÑÑоки ÑÑиÑаÑÑÑÑ ÑавнÑми, еÑли вÑе иÑ
ÑооÑвеÑÑÑвÑÑÑие ÑлеменÑÑ Ð½Ðµ ÑÐ°Ð²Ð½Ñ NULL, но ÑÐ°Ð²Ð½Ñ Ð¼ÐµÐ¶Ð´Ñ Ñобой; неÑавнÑми они ÑÑиÑаÑÑÑÑ, когда в ниÑ
наÑ
одÑÑÑÑ ÑлеменÑÑ, не ÑавнÑе NULL, и не ÑавнÑе дÑÑг дÑÑгÑ; в пÑоÑивном ÑлÑÑае ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок не опÑеделÑн (Ñавен NULL). ÐÑли в ÑезÑлÑÑаÑаÑ
ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок Ð½ÐµÑ Ð½Ð¸ одного положиÑелÑного, но еÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ NULL, ÑезÑлÑÑаÑом IN бÑÐ´ÐµÑ NULL.
9.24.3. NOT IN #
вÑÑажениеNOT IN (подзапÑоÑ)
СпÑава в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно один ÑÑолбеÑ. ÐÑÑиÑленное знаÑение левого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваеÑÑÑ Ñо знаÑением во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ NOT IN бÑÐ´ÐµÑ Â«true», еÑли наÑ
одÑÑÑÑ ÑолÑко неÑовпадаÑÑие ÑÑÑоки (в Ñом ÑиÑле, когда подзапÑÐ¾Ñ Ð²Ð¾Ð¾Ð±Ñе не возвÑаÑÐ°ÐµÑ ÑÑÑок). ÐÑли же наÑ
одиÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð° подÑ
одÑÑÐ°Ñ ÑÑÑока, ÑезÑлÑÑаÑом бÑÐ´ÐµÑ Â«false».
ÐамеÑÑÑе, ÑÑо еÑли ÑезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñлева оказÑваеÑÑÑ NULL или ÑавнÑÑ
знаÑений ÑпÑава не наÑ
одиÑÑÑ, а Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ из знаÑений ÑпÑава Ñавно NULL, конÑÑÑÑкÑÐ¸Ñ NOT IN возвÑаÑÐ°ÐµÑ NULL, а не true. ÐÑо ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑинÑÑÑм в SQL пÑавилам ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
Ñо знаÑениÑми NULL.
Так же, как и Ñ EXISTS, здеÑÑ Ð½Ðµ ÑледÑÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо подзапÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñегда вÑполнÑÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ.
конÑÑÑÑкÑоÑ_ÑÑÑокиNOT IN (подзапÑоÑ)
Рлевой ÑаÑÑи ÑÑой ÑоÑÐ¼Ñ NOT IN запиÑÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑÑÑоки (подÑобнее они опиÑÑваÑÑÑÑ Ð² ÐодÑазделе 4.2.13). СпÑава в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен веÑнÑÑÑ Ñовно ÑÑолÑко ÑÑолбÑов, ÑколÑко ÑодеÑÐ¶Ð¸Ñ ÑÑÑока в вÑÑажении Ñлева. ÐÑÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваÑÑÑÑ Ð¿Ð¾ÑÑÑоÑно Ñо знаÑениÑми во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ NOT IN бÑÐ´ÐµÑ Â«true», еÑли ÑавнÑÑ
ÑÑÑок не найдÑÑÑÑ (в Ñом ÑиÑле, и когда подзапÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок), и «false», еÑли Ñакие ÑÑÑоки еÑÑÑ.
Ðак обÑÑно, знаÑÐµÐ½Ð¸Ñ NULL в ÑÑÑокаÑ
обÑабаÑÑваÑÑÑÑ Ð¿Ñи ÑÑом по пÑинÑÑÑм в SQL пÑавилам ÑÑавнениÑ. Ðве ÑÑÑоки ÑÑиÑаÑÑÑÑ ÑавнÑми, еÑли вÑе иÑ
ÑооÑвеÑÑÑвÑÑÑие ÑлеменÑÑ Ð½Ðµ ÑÐ°Ð²Ð½Ñ NULL, но ÑÐ°Ð²Ð½Ñ Ð¼ÐµÐ¶Ð´Ñ Ñобой; неÑавнÑми они ÑÑиÑаÑÑÑÑ, когда в ниÑ
наÑ
одÑÑÑÑ ÑлеменÑÑ, не ÑавнÑе NULL, и не ÑавнÑе дÑÑг дÑÑгÑ; в пÑоÑивном ÑлÑÑае ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок не опÑеделÑн (Ñавен NULL). ÐÑли в ÑезÑлÑÑаÑаÑ
ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑок Ð½ÐµÑ Ð½Ð¸ одного положиÑелÑного, но еÑÑÑ Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ NULL, ÑезÑлÑÑаÑом NOT IN бÑÐ´ÐµÑ NULL.
9.24.4. ANY/SOME #
вÑÑажениеопеÑаÑоÑANY (подзапÑоÑ)вÑÑажениеопеÑаÑоÑSOME (подзапÑоÑ)
РпÑавой ÑаÑÑи конÑÑÑÑкÑии в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно один ÑÑолбеÑ. ÐÑÑиÑленное знаÑение левого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваеÑÑÑ Ñо знаÑением в каждой ÑÑÑоке ÑезÑлÑÑаÑа подзапÑоÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа ÑÑловиÑ, коÑоÑÑй должен вÑдаваÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение. РезÑлÑÑаÑом ANY бÑÐ´ÐµÑ Â«true», еÑли Ñ
оÑÑ Ð±Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки ÑÑловие иÑÑинно, и «false» в пÑоÑивном ÑлÑÑае (в Ñом ÑиÑле, и когда подзапÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок).
ÐлÑÑевое Ñлово SOME ÑвлÑеÑÑÑ Ñинонимом ANY. ÐонÑÑÑÑкÑÐ¸Ñ IN можно Ñакже запиÑаÑÑ ÐºÐ°Ðº = ANY.
ÐамеÑÑÑе, ÑÑо еÑли ÑÑловие не вÑполнÑеÑÑÑ Ð½Ð¸ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ из ÑÑÑок, а Ñ
оÑÑ Ð±Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки ÑÑловнÑй опеÑаÑÐ¾Ñ Ð²ÑдаÑÑ NULL, конÑÑÑÑкÑÐ¸Ñ ANY возвÑаÑÐ°ÐµÑ NULL, а не false. ÐÑо ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑинÑÑÑм в SQL пÑавилам ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
Ñо знаÑениÑми NULL.
Так же, как и Ñ EXISTS, здеÑÑ Ð½Ðµ ÑледÑÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо подзапÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñегда вÑполнÑÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ.
конÑÑÑÑкÑоÑ_ÑÑÑокиопеÑаÑоÑANY (подзапÑоÑ)конÑÑÑÑкÑоÑ_ÑÑÑокиопеÑаÑоÑSOME (подзапÑоÑ)
Рлевой ÑаÑÑи ÑÑой ÑоÑÐ¼Ñ ANY запиÑÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑÑÑоки (подÑобнее они опиÑÑваÑÑÑÑ Ð² ÐодÑазделе 4.2.13). СпÑава в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно ÑÑолÑко ÑÑолбÑов, ÑколÑко ÑодеÑÐ¶Ð¸Ñ ÑÑÑока в вÑÑажении Ñлева. ÐÑÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваÑÑÑÑ Ð¿Ð¾ÑÑÑоÑно Ñо знаÑениÑми во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом, Ñ Ð¿Ñименением заданного опеÑаÑоÑа. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ANY бÑÐ´ÐµÑ Â«true», еÑли Ð´Ð»Ñ ÐºÐ°ÐºÐ¾Ð¹-либо из ÑÑÑок подзапÑоÑа ÑезÑлÑÑаÑом ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ true, или «false», еÑли Ð´Ð»Ñ Ð²ÑеÑ
ÑÑÑок ÑезÑлÑÑаÑом ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ false (в Ñом ÑиÑле, и когда подзапÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок). РезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ NULL, еÑли ни Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ из ÑÑÑок подзапÑоÑа ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñавен true, а минимÑм Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñавен NULL.
ÐодÑобнее логика ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑов ÑÑÑок опиÑана в ÐодÑазделе 9.25.5.
9.24.5. ALL #
вÑÑажениеопеÑаÑоÑALL (подзапÑоÑ)
РпÑавой ÑаÑÑи конÑÑÑÑкÑии в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно один ÑÑолбеÑ. ÐÑÑиÑленное знаÑение левого вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваеÑÑÑ Ñо знаÑением в каждой ÑÑÑоке ÑезÑлÑÑаÑа подзапÑоÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа ÑÑловиÑ, коÑоÑÑй должен вÑдаваÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение. РезÑлÑÑаÑом ALL бÑÐ´ÐµÑ Â«true», еÑли ÑÑловие иÑÑинно Ð´Ð»Ñ Ð²ÑеÑ
ÑÑÑок (и когда подзапÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок), или «false», еÑли наÑ
одÑÑÑÑ ÑÑÑоки, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
оно ложно. РезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ NULL, еÑли ни Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ из ÑÑÑок подзапÑоÑа ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñавен true, а минимÑм Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñавен NULL.
ÐонÑÑÑÑкÑÐ¸Ñ NOT IN ÑавнознаÑна <> ALL.
Так же, как и Ñ EXISTS, здеÑÑ Ð½Ðµ ÑледÑÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо подзапÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñегда вÑполнÑÑÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ.
конÑÑÑÑкÑоÑ_ÑÑÑокиопеÑаÑоÑALL (подзапÑоÑ)
Рлевой ÑаÑÑи ÑÑой ÑоÑÐ¼Ñ ALL запиÑÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑÑÑоки (подÑобнее они опиÑÑваÑÑÑÑ Ð² ÐодÑазделе 4.2.13). СпÑава в ÑкобкаÑ
запиÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно ÑÑолÑко ÑÑолбÑов, ÑколÑко ÑодеÑÐ¶Ð¸Ñ ÑÑÑока в вÑÑажении Ñлева. ÐÑÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑавниваÑÑÑÑ Ð¿Ð¾ÑÑÑоÑно Ñо знаÑениÑми во вÑеÑ
ÑÑÑокаÑ
, возвÑаÑÑннÑÑ
подзапÑоÑом, Ñ Ð¿Ñименением заданного опеÑаÑоÑа. РезÑлÑÑаÑом вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ALL бÑÐ´ÐµÑ Â«true», еÑли Ð´Ð»Ñ Ð²ÑеÑ
ÑÑÑок подзапÑоÑа ÑезÑлÑÑаÑом ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ true (или еÑли подзапÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑок), либо «false», еÑли ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñавен false Ð´Ð»Ñ Ð»Ñбой из ÑÑÑок подзапÑоÑа. РезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ NULL, еÑли ни Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ из ÑÑÑок подзапÑоÑа ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñавен true, а минимÑм Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ñавен NULL.
ÐодÑобнее логика ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑов ÑÑÑок опиÑана в ÐодÑазделе 9.25.5.
9.24.6. СÑавнение единиÑнÑÑ ÑÑÑок #
конÑÑÑÑкÑоÑ_ÑÑÑокиопеÑаÑоÑ(подзапÑоÑ)
Рлевой ÑаÑÑи конÑÑÑÑкÑии запиÑÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑÑÑоки (подÑобнее они опиÑÑваÑÑÑÑ Ð² ÐодÑазделе 4.2.13). СпÑава в ÑÐºÐ¾Ð±ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑваеÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð¿ÑоÑ, коÑоÑÑй должен возвÑаÑаÑÑ Ñовно ÑÑолÑко ÑÑолбÑов, ÑколÑко ÑодеÑÐ¶Ð¸Ñ ÑÑÑока в вÑÑажении Ñлева. Ðолее Ñого, подзапÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð¼Ð°ÐºÑимÑм Ð¾Ð´Ð½Ñ ÑÑÑокÑ. (ÐÑли он не веÑнÑÑ ÑÑÑок, ÑезÑлÑÑаÑом бÑÐ´ÐµÑ NULL.) ÐонÑÑÑÑкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑÑÑоки Ñлева Ñ ÑÑой одной ÑÑÑокой ÑезÑлÑÑаÑа подзапÑоÑа.
ÐодÑобнее логика ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑов ÑÑÑок опиÑана в ÐодÑазделе 9.25.5.