Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТных ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 часто сталкиваСтся с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ссылочным Ρ‚ΠΈΠΏΠ°ΠΌ. Битуация, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ запроса пСрСдаСтся пустая ссылка (Null), являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹Ρ… для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° Π²Π΅Ρ€Π½Π΅Ρ‚ Π»ΠΈΠ±ΠΎ всС записи Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ исказит Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Π²ΠΈΠΆΠΎΠΊ запросов ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ отсутствиС значСния Π² ΠΏΠΎΠ»Π΅ Ρ‚ΠΈΠΏΠ° Бсылка, критичСски Π²Π°ΠΆΠ½ΠΎ для построСния ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ числовых ΠΈΠ»ΠΈ строковых Ρ‚ΠΈΠΏΠΎΠ², Π³Π΄Π΅ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ часто трактуСтся ΠΊΠ°ΠΊ ноль ΠΈΠ»ΠΈ пустая строка, ссылочный Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ свою спСцифику хранСния ΠΈ сравнСния. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этих нюансов Π²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹ΠΌ Π±Π°Π³Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… с большим объСмом записСй.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями Π² языкС запросов 1Π‘. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ условия Π“Π”Π•, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ ΠΏΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ распространСнных ошибок ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ справочникам ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ.

ΠŸΡ€ΠΈΡ€ΠΎΠ΄Π° пустой ссылки Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ 1Π‘

Π’ систСмС 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ понятиС "пустая ссылка" ΠΈΠΌΠ΅Π΅Ρ‚ строгоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π½Π΅ просто строка с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ноль. ΠŸΡƒΡΡ‚Π°Ρ ссылка прСдставляСт собой ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° отсутствиС связи с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ элСмСнтом ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. Когда пСрСмСнная Ρ‚ΠΈΠΏΠ° Бсылка Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΠ»ΠΈ Π΅ΠΉ явно присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ НСопрСдСлСно, Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… это хранится ΠΊΠ°ΠΊ NULL.

МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ сравнСниС поля с пустой ссылкой Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Однако Π² рСляционной ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ построСна Π‘Π£Π‘Π” 1Π‘, любоС сравнСниС с NULL Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ UNKNOWN (НСизвСстно), Π° Π½Π΅ TRUE ΠΈΠ»ΠΈ FALSE. Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ написании условий Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ равСнства = для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку Π² условии Π“Π”Π• ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ строки с пустыми значСниями Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π½Ρ‹. Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис Π•Π‘Π’Π¬ NULL.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто встрСчаСтся Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

ВЫБРАВЬ

РСгистрНакоплСния.ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.Π‘ΡƒΠΌΠΌΠ°

Π˜Π—

РСгистрНакоплСния.ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ КАК РСгистрНакоплСния

Π“Π”Π•

РСгистрНакоплСния.НомСнклатура = &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹

Если Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку, Π΄Π°Π½Π½Ρ‹ΠΉ запрос Π²Π΅Ρ€Π½Π΅Ρ‚ пустой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π΄Π°ΠΆΠ΅ Ссли Π² рСгистрС Π΅ΡΡ‚ΡŒ записи, Π³Π΄Π΅ ΠΏΠΎΠ»Π΅ НомСнклатура Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пусто. Π”Π²ΠΈΠΆΠΎΠΊ запросов попытаСтся Π½Π°ΠΉΡ‚ΠΈ строки, Π³Π΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Ρ€Π°Π²Π½ΠΎ NULL, Ρ‡Ρ‚ΠΎ Π² стандартной Π»ΠΎΠ³ΠΈΠΊΠ΅ SQL Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

БинтаксичСскиС конструкции для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ NULL Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ значСниями Π² 1Π‘ прСдусмотрСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π•Π‘Π’Π¬ NULL (ΠΈΠ»ΠΈ IS NULL Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… контСкстах трансляции). ИспользованиС этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° позволяСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ систСмС, Ρ‡Ρ‚ΠΎ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ записи, Π³Π΄Π΅ ссылочноС ΠΏΠΎΠ»Π΅ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ основной инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ "Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ³Π΄Π° пустая ссылка".

Часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ситуация, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΈ пустым, ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ ΠΎΠ±Π° случая. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция Π˜Π›Π˜ Π² условии ΠΎΡ‚Π±ΠΎΡ€Π°. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ нСзависимо ΠΎΡ‚ состояния Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

  • πŸ” Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π•Π‘Π’Π¬ NULL для явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ отсутствия значСния Π² ΠΏΠΎΠ»Π΅.
  • πŸ”„ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ логичСскоС Π˜Π›Π˜ для объСдинСния условий ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ Π½Π° пустоту поля.
  • βš™οΈ Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ условий с И ΠΈ Π˜Π›Π˜, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ скобки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ запроса выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ВЫБРАВЬ

РСгистрНакоплСния.ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ

Π˜Π—

РСгистрНакоплСния.ΠžΡΡ‚Π°Ρ‚ΠΊΠΈ КАК РСгистрНакоплСния

Π“Π”Π•

(РСгистрНакоплСния.Π‘ΠΊΠ»Π°Π΄ = &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘ΠΊΠ»Π°Π΄)

Π˜Π›Π˜

(РСгистрНакоплСния.Π‘ΠΊΠ»Π°Π΄ Π•Π‘Π’Π¬ NULL И &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘ΠΊΠ»Π°Π΄ Π•Π‘Π’Π¬ NULL)

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘ΠΊΠ»Π°Π΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, сработаСт пСрвая Ρ‡Π°ΡΡ‚ΡŒ условия. Если ΠΆΠ΅ ΠΎΠ½ пуст, систСма ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, отбирая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ записи, Π³Π΄Π΅ склад Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

πŸ“Š Как Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ провСряСтС ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку Π² запросС?
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ = Null
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π•Π‘Π’Π¬ NULL
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡŽ Π² ΠΊΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅Π΄ запросом
НС сталкивался с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ

Π›ΠΎΠ³ΠΈΠΊΠ° формирования условий Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅

Иногда Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слоТного условия нСпосрСдствСнно Π² тСкстС запроса Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ слоТным для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях цСлСсообразно вынСсти Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ пустой ссылки Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° языкС 1Π‘ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ запроса. Π­Ρ‚ΠΎ позволяСт динамичСски Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ тСкст запроса ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° структура Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ мСняСтся Π² зависимости ΠΎΡ‚ наличия значСния. НапримСр, Ссли ссылка Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒΠΈΡ€ΠΎΠ²ΠΊΡƒ. Если ссылка пуста β€” Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΉ схСмС.

РСализация Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ аккуратности. НСобходимо Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ этапы ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ этапы выполнСния запроса. Ошибки Π² этом мСстС ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡΠΌ ΠΈΠ»ΠΈ синтаксичСским ошибкам Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

β˜‘οΈ Алгоритм ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ запроса

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ модуля:

Если ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘ΠΊΠ»Π°Π΄ = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ВСкстУсловия = "РСгистрНакоплСния.Π‘ΠΊΠ»Π°Π΄ Π•Π‘Π’Π¬ NULL";

Π˜Π½Π°Ρ‡Π΅

ВСкстУсловия = "РСгистрНакоплСния.Π‘ΠΊΠ»Π°Π΄ = &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘ΠΊΠ»Π°Π΄";

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ВСкстЗапроса = "ВЫБРАВЬ ... Π“Π”Π• " + ВСкстУсловия;

Запрос = Новый Запрос(ВСкстЗапроса);

Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ SQL-ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ объСм ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ использованиСм ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ условия Π² запросС зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ поддСрТиваСмости ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Π Π°Π±ΠΎΡ‚Π° с Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈ соСдинСниями

ΠžΡΠΎΠ±ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдставляСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° пустых ссылок ΠΏΡ€ΠΈ использовании Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² соСдинСния (Π›Π•Π’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•, ВНУВРЕННЕЕ Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•). ΠŸΡ€ΠΈ соСдинСнии Ρ‚Π°Π±Π»ΠΈΡ† условиС Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидаСтся, Ссли ΠΎΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ части запроса.

Если условиС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ пустой ссылкС ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ Π“Π”Π• основного запроса послС соСдинСния, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ΅Ρ‡ΡŒ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ благодаря Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ соСдинСнию. Π’ случаС Π›Π•Π’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• Ρ‚Π°ΠΊΠΈΠ΅ условия часто слСдуСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ ПО самого соСдинСния.

Π’ΠΈΠΏ соСдинСния РасполоТСниС условия Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ NULL
Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ БСкция Π“Π”Π• Π‘Ρ‚Ρ€ΠΎΠΊΠΈ с NULL ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ
Π›Π΅Π²ΠΎΠ΅ БСкция Π“Π”Π• ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ соСдинСниС Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ (NULL ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ)
Π›Π΅Π²ΠΎΠ΅ БСкция ПО Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΠ»Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ NULL
ΠŸΡ€Π°Π²ΠΎΠ΅ БСкция ПО Аналогично Π»Π΅Π²ΠΎΠΌΡƒ, Π½ΠΎ для ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ условия ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ отсутствиС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ связаны с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ справочником. ВсСгда провСряйтС ΠΏΠ»Π°Π½ выполнСния запроса, Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ сомнСния.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ использовании Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ поля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ записываСтся ссылка, допуска Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL. Если Ρ‚ΠΈΠΏ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ТСстко, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° записи пустой ссылки Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ выполнСния.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅

ИспользованиС конструкций с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° NULL ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запроса, особСнно Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ нСэффСктивный ΠΏΠ»Π°Π½ выполнСния, Ссли условиС написано слишком слоТно ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ здСсь являСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ индСксов.

Поля, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ часто производится поиск пустых ссылок, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ проиндСксированы. Однако стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСксация NULL-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π‘Π£Π‘Π” (MSSQL, PostgreSQL), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ΄ 1Π‘. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях созданиС составного индСкса ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‡Π΅ΠΌ индСксация ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поля.

ВлияниС индСксов Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ

НаличиС индСкса ΠΏΠΎ полю, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π² условии Π•Π‘Π’Π¬ NULL, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π² дСсятки Ρ€Π°Π· Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ записСй. Однако, Ссли Ρ‚Π°ΠΊΠΈΡ… записСй Π±ΠΎΠ»Π΅Π΅ 20-30% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ объСма, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ быстрСС.

Для Π°Π½Π°Π»ΠΈΠ·Π° эффСктивности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ встроСнныС инструмСнты ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π Π΅ΠΆΠΈΠΌ ВСхнологичСский ΠΆΡƒΡ€Π½Π°Π» ΠΈΠ»ΠΈ Консоль запросов ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ индСксы Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΈ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ заняло Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ врСмя выполнСния запроса с условиСм Π˜Π›Π˜ ΠΈ запроса, сформированного динамичСски Π² ΠΊΠΎΠ΄Π΅.

Часто Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ. Если Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ΠΏΠΎ пустым ссылкам трСбуСтся Ρ€Π΅Π΄ΠΊΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл вынСсти Π΅Ρ‘ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ основной ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… лишними условиями.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… устранСния

Π’ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ программирования 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ошибок, связанных с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ пустых ссылок. Бамая распространСнная ΠΈΠ· Π½ΠΈΡ… β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρƒ пустой ссылки Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ критичСской ошибкС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Вторая частая ошибка β€” Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π•Π‘Π’Π¬NULL (Π² выраТСниях) вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π•Π‘Π’Π¬ NULL (Π² условиях). Ѐункция Π•Π‘Π’Π¬NULL(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π—Π°ΠΌΠ΅Π½Π°) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для подстановки значСния, Π° Π½Π΅ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ строк Π² условии Π“Π”Π•.

  • ❌ Ошибка: ИспользованиС Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Null вмСсто Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π•Π‘Π’Π¬ NULL.
  • ❌ Ошибка: ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = НСопрСдСлСно Π² Ρ†ΠΈΠΊΠ»Π΅.
  • ❌ Ошибка: БмСшиваниС Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ поля Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π±Π΅Π· скобок.

Для устранСния ошибок всСгда ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠΎΠ΄Π° послС написания слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ всС Π²Π΅Ρ‚Π²ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° протСстированы: с Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, с пустым ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈ Π² смСшанном Ρ€Π΅ΠΆΠΈΠΌΠ΅.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ 1Π‘ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ останова Π½Π° строкС выполнСния запроса. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ сформированный тСкст запроса Π² ΠΎΠΊΠ½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² β€” это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΠ»ΠΈΡΡŒ значСния ΠΈ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»ΠΈΡΡŒ Π»ΠΈ условия.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Если пСрСмСнная объявлСна ΠΊΠ°ΠΊ БправочникБсылка.НомСнклатура, ΠΎΠ½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ, Ссли это Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ явно Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… контСкстах ΠΈΠ»ΠΈ Ссли это Π½Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запроса. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ объявлСниС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок Π½Π° этапС компиляции.

πŸ’‘

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ надСТности: ВсСгда явно провСряйтС ссылку Π½Π° пустоту ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π΅Ρ‘ свойствам ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ запрос Π²Π΅Ρ€Π½ΡƒΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ значСния.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы (FAQ)

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π•Π‘Π’Π¬NULL Π² условии Π“Π”Π• для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пустоту?

Ѐункция Π•Π‘Π’Π¬NULL Π² условии Π“Π”Π• Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅Π½Ρ‹, Ссли ΠΏΠΎΠ»Π΅ пусто. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ это ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎ, Ρ‡Π΅ΠΌ прямой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π•Π‘Π’Π¬ NULL. НапримСр, Π•Π‘Π’Π¬NULL(ПолС, Π›ΠΎΠΆΡŒ) = Π›ΠΎΠΆΡŒ сработаСт, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ПолС Π•Π‘Π’Π¬ NULL.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки, ΠΊΠΎΠ³Π΄Π° я ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку?

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π² вашСм условии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция, которая ΠΏΡ€ΠΈ пустом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ становится всСгда истинной. НапримСр, Ссли условиС написано ΠΊΠ°ΠΊ ПолС = &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π˜Π›Π˜ &ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π•Π‘Π’Π¬ NULL, Ρ‚ΠΎ ΠΏΡ€ΠΈ пустом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ вторая Ρ‡Π°ΡΡ‚ΡŒ истинна для всСх строк. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΡƒ объСдинСния условий.

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ ссылку Π² Π‘ΠšΠ” (БистСма Компоновки Π”Π°Π½Π½Ρ‹Ρ…)?

Π’ Π‘ΠšΠ” для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² настройках ΠΎΡ‚Π±ΠΎΡ€Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²ΠΈΠ΄ сравнСния ΠŸΡƒΡΡ‚Π°Ρ ссылка ΠΈΠ»ΠΈ НС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π’ выраТСниях Π‘ΠšΠ” Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π•Π‘Π’Π¬ NULL. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сравнСниС с константой Null Π² полях ΠΎΡ‚Π±ΠΎΡ€Π°.

ВлияСт Π»ΠΈ вСрсия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с NULL Π² запросах?

Базовая Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с NULL Π² запросах 1Π‘ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π° Π½Π° протяТСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… вСрсий ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.x. Однако ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° спСцифичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π‘Π£Π‘Π” ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Π’ Ρ€Π΅Π΄ΠΊΠΈΡ… случаях Π½Π° ΠΎΡ‡Π΅Π½ΡŒ старых вСрсиях (Π΄ΠΎ 8.2) ΠΌΠΎΠ³Π»ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ отличия Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… соСдинСний с NULL.

Π§Ρ‚ΠΎ быстрСС: динамичСский запрос ΠΈΠ»ΠΈ условиС с Π˜Π›Π˜?

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ условиС с Π˜Π›Π˜ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ запроса Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… запросов ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ДинамичСскоС Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста запроса ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли структура Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ (список ΠΏΠΎΠ»Π΅ΠΉ, соСдинСния) сущСствСнно мСняСтся, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ условия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.