9.2. ÐпеÑаÑоÑÑ ÑÑавнениÑ
ÐÐ°Ð±Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑов ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð¾Ð±ÑÑнÑе опеÑаÑоÑÑ, пеÑеÑиÑленнÑе в ТаблиÑе 9.1.
ТаблиÑа 9.1. ÐпеÑаÑоÑÑ ÑÑавнениÑ
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание |
|---|---|
< | менÑÑе |
> | болÑÑе |
<= | менÑÑе или Ñавно |
>= | болÑÑе или Ñавно |
= | Ñавно |
<> или != | не Ñавно |
ÐÑимеÑание
ÐпеÑаÑÐ¾Ñ != пÑеобÑазÑеÑÑÑ Ð² <> на ÑÑадии ÑазбоÑа запÑоÑа. Ðак ÑледÑÑвие, ÑеализоваÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ != и <> по-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾.
ÐпеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð²ÑеÑ
Ñипов даннÑÑ
, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
они имеÑÑ ÑмÑÑл. ÐÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿ÑедÑÑавлÑÑÑ Ñобой бинаÑнÑе опеÑаÑоÑÑ, возвÑаÑаÑÑие знаÑÐµÐ½Ð¸Ñ Ñипа boolean; пÑи ÑÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° 1 < 2 < 3 недопÑÑÑÐ¸Ð¼Ñ (Ñак как не ÑÑÑеÑÑвÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑа <, коÑоÑÑй Ð±Ñ ÑÑавнивал бÑлево знаÑение Ñ 3).
ÐпеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÐµÑ ÑпеÑиалÑÐ½Ð°Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¸Ñ BETWEEN:
aBETWEENxANDy
ÑавнознаÑно вÑÑажениÑ
a>=xANDa<=y
ÐамеÑÑÑе, ÑÑо BETWEEN ÑÑиÑаеÑ, ÑÑо гÑаниÑÑ Ð¸Ð½ÑеÑвала Ñакже вклÑÑаÑÑÑÑ Ð² инÑеÑвал. NOT BETWEEN вÑполнÑÐµÑ Ð¿ÑоÑивоположное ÑÑавнение:
aNOT BETWEENxANDy
ÑавнознаÑно вÑÑажениÑ
a<xORa>y
ÐонÑÑÑÑкÑÐ¸Ñ BETWEEN SYMMETRIC аналогиÑна BETWEEN, за иÑклÑÑением Ñого, ÑÑо аÑгÑÐ¼ÐµÐ½Ñ Ñлева Ð¾Ñ AND не обÑзаÑелÑно должен бÑÑÑ Ð¼ÐµÐ½ÑÑе или Ñавен аÑгÑменÑÑ ÑпÑава. ÐÑли ÑÑо не Ñак, аÑгÑменÑÑ Ð°Ð²ÑомаÑиÑеÑки менÑÑÑÑÑ Ð¼ÐµÑÑами, Ñо еÑÑÑ Ð¸Ð½ÑеÑвал вÑегда бÑÐ´ÐµÑ Ð½Ðµ пÑÑÑÑм.
ÐбÑÑнÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²ÑдаÑÑ NULL (ÑÑо ознаÑÐ°ÐµÑ Â«Ð½ÐµÐ¾Ð¿ÑеделÑнноÑÑÑ»), а не true или false, когда лÑбое из ÑÑавниваемÑÑ
знаÑений NULL. ÐапÑимеÑ, 7 = NULL вÑдаÑÑ NULL, Ñак же, как и 7 <> NULL. Ðогда ÑÑо поведение нежелаÑелÑно, можно иÑполÑзоваÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑии IS [ NOT ] DISTINCT FROM:
aIS DISTINCT FROMbaIS NOT DISTINCT FROMb
ÐÐ»Ñ Ð·Ð½Ð°Ñений не NULL ÑÑловие IS DISTINCT FROM ÑабоÑÐ°ÐµÑ Ñак же, как опеÑаÑÐ¾Ñ <>. Ðднако, еÑли оба ÑÑавниваемÑÑ
знаÑÐµÐ½Ð¸Ñ NULL, ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ false, и ÑолÑко еÑли одно из знаÑений NULL, возвÑаÑаеÑÑÑ true. ÐналогиÑно, ÑÑловие IS NOT DISTINCT FROM ÑавноÑилÑно = Ð´Ð»Ñ Ð·Ð½Ð°Ñений не NULL, но возвÑаÑÐ°ÐµÑ true, еÑли оба ÑÑавниваемÑÑ
знаÑÐµÐ½Ð¸Ñ NULL и false в пÑоÑивном ÑлÑÑае. Таким обÑазом, ÑÑи конÑÑÑÑкÑии по ÑÑÑи ÑабоÑаÑÑ Ñ NULL, как Ñ Ð¾Ð±ÑÑнÑм знаÑением, а не Ñ Â«Ð½ÐµÐ¾Ð¿ÑеделÑнноÑÑÑÑ».
ÐÐ»Ñ Ð¿ÑовеÑки, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ знаÑение NULL или неÑ, иÑполÑзÑÑÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑии:
вÑÑажениеIS NULLвÑÑажениеIS NOT NULL
или ÑавнознаÑнÑе (но неÑÑандаÑÑнÑе) конÑÑÑÑкÑии:
вÑÑажениеISNULLвÑÑажениеNOTNULL
ÐамеÑÑÑе, ÑÑо пÑовеÑка не бÑÐ´ÐµÑ ÑабоÑаÑÑ, Ñак как вÑÑажение = NULLNULL ÑÑиÑаеÑÑÑ Ð½Ðµ «ÑавнÑм» NULL. (ÐнаÑение NULL пÑедÑÑавлÑÐµÑ Ð½ÐµÐ¾Ð¿ÑеделÑнноÑÑÑ, и ÑÐ°Ð²Ð½Ñ Ð»Ð¸ две неопÑеделÑнноÑÑи, Ñоже не опÑеделено.)
ÐодÑказка
ÐекоÑоÑÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, ÑÑо веÑнÑÑ true, еÑли ÑезÑлÑÑаÑом вÑÑажение = NULLвÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑвлÑеÑÑÑ NULL. Такие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð¸ÑпÑавиÑÑ Ð¸ пÑивеÑÑи в ÑооÑвеÑÑÑвие Ñо ÑÑандаÑÑом SQL. Ðднако, в ÑлÑÑаÑÑ
, когда ÑÑо невозможно, ÑÑо поведение можно измениÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа конÑигÑÑаÑии transform_null_equals. Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, Postgres Pro пÑеобÑазÑÐµÑ ÑÑловие x = NULL в x IS NULL.
ÐÑли вÑÑажение возвÑаÑÐ°ÐµÑ ÑаблиÑнÑÑ ÑÑÑокÑ, Ñогда IS NULL бÑÐ´ÐµÑ Ð¸ÑÑиннÑм, когда Ñамо вÑÑажение â NULL или вÑе Ð¿Ð¾Ð»Ñ ÑÑÑоки â NULL, а IS NOT NULL бÑÐ´ÐµÑ Ð¸ÑÑиннÑм, когда Ñамо вÑÑажение не NULL, и вÑе Ð¿Ð¾Ð»Ñ ÑÑÑоки Ñак же не NULL. ÐÑледÑÑвие Ñакого опÑеделениÑ, IS NULL и IS NOT NULL не вÑегда бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑие ÑезÑлÑÑаÑÑ Ð´Ð»Ñ ÑакиÑ
вÑÑажений; в ÑаÑÑноÑÑи Ñакие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñо ÑÑÑоками, одни Ð¿Ð¾Ð»Ñ ÐºÐ¾ÑоÑÑÑ
NULL, а дÑÑгие не NULL, бÑдÑÑ Ð»Ð¾Ð¶Ð½Ñми одновÑеменно. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð¸Ð¼ÐµÐµÑ ÑмÑÑл напиÑаÑÑ ÑÑÑока IS DISTINCT FROM NULL или ÑÑÑока IS NOT DISTINCT FROM NULL, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑÑо пÑовеÑиÑÑ, Ñавно ли NULL вÑÑ Ð·Ð½Ð°Ñение ÑÑÑоки, без какиÑ
-либо дополниÑелÑнÑÑ
пÑовеÑок полей ÑÑÑоки.
ÐогиÑеÑкие знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже пÑовеÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑловий
вÑÑажениеIS TRUEвÑÑажениеIS NOT TRUEвÑÑажениеIS FALSEвÑÑажениеIS NOT FALSEвÑÑажениеIS UNKNOWNвÑÑажениеIS NOT UNKNOWN
Ðни вÑегда возвÑаÑаÑÑ true или false и никогда NULL, даже Ñ Ð¾Ð¿ÐµÑандом NULL. Ðни инÑеÑпÑеÑиÑÑÑÑ Ð·Ð½Ð°Ñение NULL как «неизвеÑÑное» логиÑеÑкое ÑоÑÑоÑние. ÐамеÑÑÑе, ÑÑо IS UNKNOWN и IS NOT UNKNOWN по ÑÑÑи ÑавнознаÑÐ½Ñ IS NULL и IS NOT NULL, ÑооÑвеÑÑÑвенно, за иÑклÑÑением Ñого, ÑÑо вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко бÑлевого Ñипа.