Π’ языкС запросов ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ объСдинСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ΠΎΠΌ для построСния слоТной Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ отчСтности. ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ соСдинСния Π² запросах 1Π‘ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ сСрвСром, критичСски Π²Π°ΠΆΠ½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, стрСмящСгося ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. Ошибки Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ объСдинСния Ρ‚Π°Π±Π»ΠΈΡ† часто приводят ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΆΠ΅, ΠΊ сущСствСнному падСнию скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

МногиС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ спСциалисты Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ LEFT JOIN ΠΈΠ»ΠΈ INNER JOIN ΠΊΠ°ΠΊ магичСскиС ΠΊΠ»ΡŽΡ‡ΠΈ, просто ΡΠΊΠ»Π΅ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ строки. Однако Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ соСдинСния стоит строгая матСматичСская Π»ΠΎΠ³ΠΈΠΊΠ° рСляционной Π°Π»Π³Π΅Π±Ρ€Ρ‹, рСализованная Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π‘Π£Π‘Π”. Π Π°Π·Π±ΠΈΡ€Π°ΡΡΡŒ Π² Π½ΡŽΠ°Π½ΡΠ°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ этих ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ смоТСтС осознанно Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ситуаций, ΠΊΠΎΠ³Π΄Π° запрос выполняСтся ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ вмСсто миллисСкунд.

Базовая Π»ΠΎΠ³ΠΈΠΊΠ° объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†

Π’ основС любого слоТного запроса Π»Π΅ΠΆΠΈΡ‚ опСрация сопоставлСния строк ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (источника) со строками Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (присоСдиняСмой). Π­Ρ‚ΠΎ сопоставлСниС происходит ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, Ρ‡Π°Ρ‰Π΅ всСго ΠΏΠΎ совпадСнию Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ссылки Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ элСмСнты справочников. БистСма ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ записи ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° связи.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ порядок Ρ‚Π°Π±Π»ΠΈΡ† Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π˜Π— ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² соСдинСний, Π½ΠΎ Π½Π΅ для всСх. НапримСр, ΠΏΡ€ΠΈ использовании Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ соСдинСния порядок Π½Π΅ влияСт Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ строк, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ для Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ соСдинСния ΠΎΠ½ опрСдСляСт, какая Ρ‚Π°Π±Π»ΠΈΡ†Π° считаСтся Π³Π»Π°Π²Π½ΠΎΠΉ, Π° какая β€” ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½ΠΎΠΉ. ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ этой Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ части Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅.

ΠŸΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ условия соСдинСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… соСдиняСмых ΠΏΠΎΠ»Π΅ΠΉ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ строку с числом ΠΈΠ»ΠΈ ссылку Ρ€Π°Π·Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² справочников Π±Π΅Π· явного привСдСния Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния ΠΈΠ»ΠΈ пустому Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ. Випизация Π΄Π°Π½Π½Ρ‹Ρ… Π² 1Π‘ строго контролируСтся, ΠΈ сСрвСр запросов Π½Π΅ выполняСт нСявныС прСобразования Π² условиях соСдинСния Ρ‚Π°ΠΊ свободно, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π‘Π£Π‘Π”.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ соСдинСнии Ρ‚Π°Π±Π»ΠΈΡ† с большим количСством записСй всСгда провСряйтС индСксы ΠΏΠΎ полям соСдинСния. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ индСкса Π½Π° ΠΏΠΎΠ»Π΅, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π² условии ПО, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ быстрый поиск Π² ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Full Scan).

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС (INNER JOIN)

Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС являСтся самым распространСнным ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятным Ρ‚ΠΈΠΏΠΎΠΌ связи. Оно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… условиС соСдинСния выполняСтся истинным Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. Если Π² Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΅ΡΡ‚ΡŒ запись, Π½ΠΎ Π΅ΠΉ Π½Π΅ соотвСтствуСт Π½ΠΈ ΠΎΠ΄Π½Π° запись Π² ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚), такая строка ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π°.

ИспользованиС Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ соСдинСния идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ситуаций, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² связанных рСгистрах ΠΈΠ»ΠΈ справочниках. НапримСр, Ссли Π²Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ°ΠΌ ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠΏΠ»Π°Ρ‚Ρ‹, этот Ρ‚ΠΈΠΏ соСдинСния отсСчСт всС Π½Π΅ΠΎΠΏΠ»Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π·Π°ΠΊΠ°Π·Ρ‹.

БинтаксичСски это выглядит ΠΊΠ°ΠΊ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ВНУВРЕННЕЕ Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. Π₯отя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° позволяСт ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ слово ВНУВРЕННЕЕ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ просто Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈΠ»ΠΈ слово Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•, явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° связи ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ сниТаСт риск двусмыслСнного толкования Π»ΠΎΠ³ΠΈΠΊΠΈ запроса Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

ВЫБРАВЬ

ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚,

ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.Π‘ΡƒΠΌΠΌΠ°

Π˜Π—

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.РСализацияВоваровУслуг КАК ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ

ВНУВРЕННЕЕ Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• РСгистрНакоплСния.ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ КАК ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈΠ Π΅Π³ΠΈΡΡ‚Ρ€

ПО ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈ.Бсылка = ΠŸΡ€ΠΎΠ΄Π°ΠΆΠΈΠ Π΅Π³ΠΈΡΡ‚Ρ€.Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ запросов 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… соСдинСний Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅, Ссли условия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π² сСкции Π“Π”Π• явно Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ наличия Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Π½ выполнСния запроса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ написано Π² ΠΊΠΎΠ΄Π΅.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ консоль запросов для Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠ»Π°Π½Π° выполнСния. Если Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ "Hash Match" ΠΈΠ»ΠΈ "Merge Join" вмСсто "Nested Loops" Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, это часто ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Π›Π΅Π²ΠΎΠ΅ ΠΈ ΠŸΡ€Π°Π²ΠΎΠ΅ внСшниС соСдинСния

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ соСдинСния ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для случаСв, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС записи ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄Π°ΠΆΠ΅ Ссли для Π½ΠΈΡ… Π½Π΅Ρ‚ соотвСтствий Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π›Π΅Π²ΠΎΠ΅ соСдинСниС (Π›Π•Π’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•) оставляСт всС строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ слСва ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, дополняя ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’Π°ΠΌ, Π³Π΄Π΅ соотвСтствий Π½Π΅Ρ‚, поля ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ значСниями NULL.

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ ситуация описываСтся ΠŸΡ€Π°Π²Ρ‹ΠΌ соСдинСниСм (ΠŸΠ ΠΠ’ΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохраняСт всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ЀактичСски, ΠΏΡ€Π°Π²ΠΎΠ΅ соСдинСниС являСтся Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π»Π΅Π²ΠΎΠ³ΠΎ: Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, помСняв Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ мСстами ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»Π΅Π²ΠΎΠ΅ соСдинСниС. Π’ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 1Π‘ Π»Π΅Π²ΠΎΠ΅ соСдинСниС встрСчаСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Π°Ρ‰Π΅ ΠΈΠ·-Π·Π° удобства чтСния ΠΊΠΎΠ΄Π° слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ.

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

  • πŸ” Π›Π΅Π²ΠΎΠ΅ соСдинСниС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ всСх записСй ΠΈΠ· основной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ источника.
  • πŸ” ΠŸΡ€Π°Π²ΠΎΠ΅ соСдинСниС сохраняСт всС записи ΠΈΠ· присоСдиняСмой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² 1Π‘.
  • πŸ” ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ всСгда ΠΌΠ°Ρ€ΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ NULL.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшними соСдинСниями критичСски Π²Π°ΠΆΠ½ΠΎPlacement условий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Если Π²Ρ‹ помСститС условиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΠΎΠ»Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ Π“Π”Π•, Π²Ρ‹ фактичСски ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ внСшнСС соСдинСниС Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ условиС Π“Π”Π• ΠŸΠΎΠ»Π΅ΠŸΡ€Π°Π²ΠΎΠΉΠ’Π°Π±Π»ΠΈΡ†Ρ‹ НЕ NULL отсСчСт всС строки с пустыми значСниями.

πŸ“Š Какой Ρ‚ΠΈΠΏ соСдинСния Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго?
Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ (INNER)
Π›Π΅Π²ΠΎΠ΅ (LEFT)
ΠŸΡ€Π°Π²ΠΎΠ΅ (RIGHT)
ПолноС (FULL)

ПолноС соСдинСниС ΠΈ Π΅Π³ΠΎ особСнности

ПолноС соСдинСниС (ΠŸΠžΠ›ΠΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•) прСдставляСт собой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ соСдинСний. Оно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†: Ссли Π΅ΡΡ‚ΡŒ совпадСниС β€” строки ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ, Ссли Π½Π΅Ρ‚ β€” строка ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ дополняСтся NULL-значСниями ΠΏΠΎΠ»Π΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ самый ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ ΠΈ самый рСсурсоСмкий Ρ‚ΠΈΠΏ объСдинСния.

Π’ контСкстС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ соСдинСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… свСрки Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ поиска расхоТдСний ΠΌΠ΅ΠΆΠ΄Ρƒ двумя нСзависимыми Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НапримСр, ΠΏΡ€ΠΈ сравнСнии остатков Π² рСгистрС Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΈΠΈ ΠΈ рСгистрах накоплСния для выявлСния ошибок провСдСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

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

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ПолноС соСдинСниС Π½Π΅ поддСрТиваСтся Π²ΠΎ всСх Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… совмСстимости ΠΈ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… старых вСрсиях Π‘Π£Π‘Π”, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² связкС с 1Π‘. ВсСгда провСряйтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ вашСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΠŸΠžΠ›ΠΠžΠ• Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π•.

ВлияниС соСдинСний Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

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

Π‘Π΅Ρ€Π²Π΅Ρ€ 1Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для физичСского выполнСния соСдинСний: Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ (Nested Loops), слияниС (Merge Join) ΠΈΠ»ΠΈ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Hash Join). Π’Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° зависит ΠΎΡ‚ статистики Π΄Π°Π½Π½Ρ‹Ρ…, наличия индСксов ΠΈ Ρ‚ΠΈΠΏΠ° соСдинСния. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ построСнный запрос ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π½ΡƒΠ΄ΠΈΡ‚ΡŒ сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк Π² Ρ†ΠΈΠΊΠ»Π΅.

Для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ поля, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² условии ПО, Π±Ρ‹Π»ΠΈ проиндСксированы. Π’ конфигурациях 1Π‘ это часто ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ индСксов ΠΏΠΎ ссылкам Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ измСрСниям рСгистров. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ индСкса Π½Π° ΠΏΠΎΠ»Π΅ соСдинСния ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ»Π½Ρ‹ΠΉ скан Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ являСтся Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ² Π² высоконагруТСнных систСмах.

Π’ΠΈΠΏ соСдинСния БохраняСт строки Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ БохраняСт строки ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ отсутствии совпадСния
Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Волько ΠΏΡ€ΠΈ совпадСнии Волько ΠΏΡ€ΠΈ совпадСнии Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ
Π›Π΅Π²ΠΎΠ΅ ВсС Волько ΠΏΡ€ΠΈ совпадСнии NULL Π² полях ΠΏΡ€Π°Π²ΠΎΠΉ
ΠŸΡ€Π°Π²ΠΎΠ΅ Волько ΠΏΡ€ΠΈ совпадСнии ВсС NULL Π² полях Π»Π΅Π²ΠΎΠΉ
ПолноС ВсС ВсС NULL Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… полях
Π‘Π΅ΠΊΡ€Π΅Ρ‚ быстрой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΆΠΎΠΉΠ½ΠΎΠ²

Если Π²Ρ‹ соСдиняСтС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с основной, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ индСксы ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ соСдинСния. Π­Ρ‚ΠΎ часто ускоряСт Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π² Ρ€Π°Π·Ρ‹.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ

Одной ΠΈΠ· самых частых ошибок являСтся Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ условий Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ использовании Π²Π½Π΅ΡˆΠ½ΠΈΡ… соСдинСний. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΏΠΈΡˆΡƒΡ‚ условия Π½Π° поля присоСдиняСмой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² сСкции Π“Π”Π•, Π½Π΅ осознавая, Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ LEFT JOIN Π² INNER JOIN. Π’Π°ΠΊΠΈΠ΅ условия Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² сСкции ПО ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π•Π‘Π’Π¬NULL.

Π’Π°ΠΊΠΆΠ΅ распространСна ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° "размноТСния строк" (Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅), ΠΊΠΎΠ³Π΄Π° условиС соСдинСния Π½Π΅ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Если ΠΎΠ΄Π½ΠΎΠΉ строкС Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соотвСтствуСт нСсколько строк ΠΏΡ€Π°Π²ΠΎΠΉ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТится, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ суммы Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π°Ρ…. ВсСгда провСряйтС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ соСдинСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² 1Π‘ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ˜ΠžΠ±ΠΎΡ€ΠΎΡ‚Ρ‹) ΡƒΠΆΠ΅ содСрТит Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя слоТныС соСдинСния, ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π±Π΅Π· понимания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ падСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

  • βœ… ВсСгда провСряйтС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ соСдинСния Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ дублирования строк.
  • βœ… ВыноситС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ· сСкции Π“Π”Π• Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ ПО ΠΏΡ€ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… соСдинСниях.
  • βœ… Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ рСгистров для упрощСния Π»ΠΎΠ³ΠΈΠΊΠΈ запроса.
Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ LEFT JOIN ΠΈ INNER JOIN?

INNER JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ совпадСниС Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. LEFT JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄Π°ΠΆΠ΅ Ссли совпадСния Π² ΠΏΡ€Π°Π²ΠΎΠΉ Π½Π΅Ρ‚ (Π² этом случаС поля ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ пустыми).

ΠŸΠΎΡ‡Π΅ΠΌΡƒ запрос с соСдинСниСм Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ?

Π§Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² отсутствии индСксов Π½Π° полях, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² условии ПО, ΠΈΠ»ΠΈ Π² использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² условии соСдинСния, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ использованиС индСксов.

МоТно Π»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†?

Π”Π°, Π² 1Π‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ мноТСство Ρ‚Π°Π±Π»ΠΈΡ†. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ связСй ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ цикличСских зависимостСй ΠΈΠ»ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… соСдинСний.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² 1Π‘?

Π­Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ соСдинСния Ρ‚Π°Π±Π»ΠΈΡ† Π±Π΅Π· условия ΠΈΠ»ΠΈ с условиСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ всСгда истинно. КаТдая строка ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соСдиняСтся с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌΡƒ росту объСма Π΄Π°Π½Π½Ρ‹Ρ….

πŸ’‘

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° соСдинСния ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ написаниС условий Π² сСкции ПО β€” Π·Π°Π»ΠΎΠ³ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π°ΡˆΠΈΡ… ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² 1Π‘.