Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПониманиС SQLΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 56

Автор ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Π“Ρ€ΡƒΠ±Π΅Ρ€

* ΠšΡƒΡ€ΡΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для сохранСния Π²Ρ‹Π²ΠΎΠ΄Π° запроса, ΠΈ доступа ΠΊ ΠΎΠ΄Π½ΠΎΠΉ строкС Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠšΡƒΡ€ΡΠΎΡ€Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±ΡŒΡΠ²Π»Π΅Π½Ρ‹ΠΌΠΈ (Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ запрос Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ), ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ(Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ запрос ), ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ (Ссли ΡƒΠ΄Π°Π»ΡΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ запроса ΠΈΠ· курсора). Если курсор ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚, ΠΊΠΎΠΌΠ°Π½Π΄Π° FETCH, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π²Ρ‹Π²ΠΎΠ΄Π° запроса.

* ΠšΡƒΡ€ΡΠΎΡ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, курсор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ всСм критСриям ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ удовлСтворяСт просмотр; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ORDER BY ΠΈΠ»ΠΈ UNION, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² любом случаС Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ просмотрами. НС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ курсор являСтся курсором Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

* Если курсор ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для опрСдСлСния, ΠΊΠ°ΠΊΠΈΠ΅ строки задСйствованы Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ UPDATE ΠΈ DELETE Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHERE CURRENT OF. DELETE ΠΈΠ»ΠΈ UPDATE Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Π½Π΅ Ρ‚ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ курсор обращаСтся Π² запросС.

* SQLCODE Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ обьявлСн ΠΊΠ°ΠΊ пСрСмСнная числового Ρ‚ΠΈΠΏΠ° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ SQL. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ установливаСтся автоматичСски послС выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SQL.

* Если ΠΊΠΎΠΌΠ°Π½Π΄Π° SQL Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ измСнСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, SQLCODE=100. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ, SQLCODE Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ описываСт ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, SQLCODE=0.

* ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHENEVER ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для опрСдСлСния дСйствия ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° SQLCODE=100 (Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ) ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° SQLCODE Ρ€Π°Π²Π΅Π½ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ числу (SQLERROR). ДСйствиСм ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (GOTO <label> ) ΠΈΠ»ΠΈ отсутствиС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ дСйствия Π²ΠΎΠΎΠ±Ρ‰Π΅( ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ). ПослСднСС, установлСно ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

* ЧисловыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ indicator. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ indicator ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ SQL, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ… Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ посторонних символов ΠΊΡ€ΠΎΠΌΠ΅ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ) слова INDICATOR.

* ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ indicator=0. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° SQL пытаСтся ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ NULL Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π³Π»Π°Π²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ indicator, indicator Π±ΡƒΠ΄Π΅Ρ‚ установлСн Π² ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ошибки, ΠΈ для помСчания NULL Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ SQL для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡ… Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

* ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ indicator ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для вставки NULL Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ SQL - INSERT ΠΈΠ»ΠΈ UPDATE. Она Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π½Π° Π΄Π»ΠΈΠ½Π½Ρƒ отбрасываСмой части строки Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΠ²ΡˆΠ΅ΠΉΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠ°ΠΊΠΎΠΉΠ½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΡƒΠ΄Π° эта строка ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»Π°ΡΡŒ.


Π ΠΠ‘ΠžΠ’Π Π‘ SQL

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠžΡ‚Π²Π΅Ρ‚Ρ‹ для этих ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ написаны Π² псСвдокодах, ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ английским языком описания Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΠΌΠΎΡ‡ΡŒ читатСлям ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ПаскалСм(ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языком). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅ сфокусируСт вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅ΠΌΡ‹Ρ… понятиях, опуская частности Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ языка. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ΡŒ нашим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ, ΡΡ‚ΠΈΠ»ΡŒ псСвдокода Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Паскаль.

ΠœΡ‹ опустим ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ всС Ρ‡Ρ‚ΠΎ Π½Π΅ относится Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ рассматриваСмым вопросам, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ устройств Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, имССтся ΠΌΠ½ΠΎΠ³ΠΎ способов Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ упраТнСния; ΠΈ совсСм Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡Ρ‚ΠΎ прСдставлСныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ самыми ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌΠΈ.

* Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ которая Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ всС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ snum ΠΈ cnum ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ² ΠΈ Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² ΠΈ выяснитС, всСгда Π»ΠΈ прСдыдущая комбинация такая ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ. Если комбинация ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ² Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π—Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ², Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля snum для этой строки Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ совпадСния. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ курсор с подзапросом - ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ (ANSI ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ просмотрам, ΠΈ Ρ‡Ρ‚ΠΎ базисная Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… это Π½Π΅ Ρ‚ΠΎΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ(Ρ‚.Π΅. ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹, всС поля cnums Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» обьявлСний, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΎΠ±ΡŒΡΠ²Π»Π΅Π½Ρ‹ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ курсоры.

* ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдписываСт ANSI Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΈΠ΅ курсоры ΠΈΠ»ΠΈ просмотры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ подзапросы. Как Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ?

* Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ которая подсказываСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния поля city ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π°, автоматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ комиссионныС Π½Π° .01 для ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π² БарсСлону ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΈΡ… Π½Π° .01 для ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π² Π‘Π°Π½ Π₯осС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠ΄Π°Π²Π΅Ρ† находящийся Π² Π›ΠΎΠ½Π΄ΠΎΠ½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ .02 ΠΈΠ· своих комиссионных, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ мСняСт ΠΎΠ½ Π³ΠΎΡ€ΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄Π°Π²Π΅Ρ† Π½Π΅ находящийся Π² Π›ΠΎΠ½Π΄ΠΎΠ½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ комиссионных Π½Π° .02. ИзмСнСниС Π² комиссионных ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ΡΡ Π½Π° Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π° Π² Π›ΠΎΠ½Π΄ΠΎΠ½Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΊΡƒΠ΄Π° Ρ‚ΠΎΡ‚ пСрСводится. ВыяснитС ΠΌΠΎΠ³ΡƒΡ‚ Π»ΠΈ ΠΏΠΎΠ»Π΅ city ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ comm ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ NULL значСния, ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡ…, ΠΊΠ°ΠΊ это дСлаСтся Π² SQL. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! : эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сокращСния.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A. ΠžΠ’Π’Π•Π’Π« Π”Π›Π― Π£ΠŸΠ ΠΠ–ΠΠ•ΠΠ˜Π™


Π“Π»Π°Π²Π° 1.

* cnum

* rating

* Π”Ρ€ΡƒΠ³ΠΈΠΌ словом для строки являСтся - запись. Π”Ρ€ΡƒΠ³ΠΈΠΌ словом для столбца являСтся - ΠΏΠΎΠ»Π΅.

* ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ строки, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, находятся Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ упорядочСния.


Π“Π»Π°Π²Π° 2.

* Π‘ΠΈΠΌΠ²ΠΎΠ» (ΠΈΠ»ΠΈ тСкст ) ΠΈ Π½ΠΎΠΌΠ΅Ρ€

* НСт

* Π―Π·Ρ‹ΠΊ ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π”Π°Π½Π½Ρ‹ΠΌΠΈ (Π―Π—Π«Πš DML)

* Π­Ρ‚ΠΎ слово Π² SQL ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.


Π“Π»Π°Π²Π° 3.

* 1. SELECT onum, amt, odate FROM Orders;

* 2. SELECT * FROM Customers WHERE snum=1001;

* SELECT city, sname, snum, comm FROM Salespeople;

* SELECT rating, cname FROM Customers WHERE city='SanJose';

* SELECT DISTINCT snum FROM Orders;


Π“Π»Π°Π²Π° 4.

* 1. SELECT * FROM Orders WHERE amt > 1000;

* SELECT sname, city FROM Salespeople WHERE city='London' AND comm > .10;

SELECT * FROM Customers WHERE rating > 100 OR city='Rome';

ΠΈΠ»ΠΈ

SELECT * FROM Customers WHERE NOT rating <=100 OR city ='Rome';

ΠΈΠ»ΠΈ

SELECT * FROM Customers WHERE NOT (rating <=100 AND city < > 'Rome');

* ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

3005 5160.45 10/03/1990 2003 1002

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

* 3011 9891.88 10/06/1990 2006 1001

onum amt odate cnum snum

3001 18.69 10/03/1990 2008 1007

3003 767.19 10/03/1990 2001 1001

3006 1098.16 10/03/1990 2008 1007

3009 1713.23 10/04/1990 2002 1003

3007 75.75 10/04/1990 2004 1002

3008 4723.00 10/05/1990 2006 1001

3010 1309.95 10/06/1990 2004 1002

* 3011 9891.88 10/06/1990 2006 1001

* . SELECT * FROM Salespeople;


Π“Π»Π°Π²Π° 5.

SELECT * FROM Orders WHERE odate IN (10/03/1990,10/04/1990);

ΠΈ

* SELECT * FROM Orders WHERE odate BETWEEN 10/03/1990 AND 10/04,1990;

* SELECT * FROM Customers WHERE snum IN (1001,1004);

SELECT * FROM Customers WHERE cname BETWEEN 'A' AND 'H';

* ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•: Π’ ASCII Π±Π°Π·ΠΎΠ²ΠΎΠΉ систСмС Hoffman Π½Π΅ Π±ΡƒΠ΄Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ·-Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² послС H. По Ρ‚ΠΎΠΉ ΠΆΠ΅ самой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ воторая Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ G, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° Giovanni ΠΈ Grass. G ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² сопровоТдСнии с Z, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ символами Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС, Π° Π½Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

* SELECT * FROM Customers WHERE cname LIKE 'C%';

SELECT * FROM Orders WHERE amt < > O AND (amt IS NOT NULL);

ΠΈΠ»ΠΈ

* SELECT * FROM Orders WHERE NOT (amt=O OR amt IS NULL);


Π“Π»Π°Π²Π° 6.

* SELECT COUNT(*) FROM Orders WHERE odate=10/03/1990;

* SELECT COUNT (DISTINCT city) FROM Customers;

* SELECT cnum, MIN (amt) FROM Orders GROUP BY cnum;

* SELECT MIN (cname) FROM Customers WHERE cname LIKE 'G%';

* SELECT city, MAX (rating) FROM Customers GROUP BY city;

* SELECT odate, count (DISTINCT snum FROM Orders GROUP BY odate;


Π“Π»Π°Π²Π° 7.

* SELECT onum, snum, amt * .12 FROM Orders;

SELECT 'For the city ', city, ', the highest rating is ', ", MAX (rating)

* FROM Customers GROUP BY city;

* SELECT rating, cname, cnum FROM Customers ORDER BY rating DESC;

* SELECT odate, SUM (amt) FROM Orders GROUP BY odate ORDER BY 2 DESC;


Π“Π»Π°Π²Π° 8.

SELECT onum, cname FROM Orders, Customers

* WHERE Customers.cnum=Orders.cnum;

SELECT onum, cname, sname FROM Orders, Customers, Salespeople

* WHERE Customers.cnum=Orders.cnum AND Salespeople.snum=Orders.snum;

SELECT cname, sname, comm FROM Salespeople, Customers

* WHERE Salespeople.snum=Customers.snum AND comm * .12;

SELECT onum, comm * amt FROM Salespeople, Orders, Customers

WHERE rating > 100 AND Orders.cnum=Customers.cnum

* AND Orders.snum=Salespeople.snum;


Π“Π»Π°Π²Π° 9.

SELECT first.sname, second.sname FROM Salespeople first, Salespeople second

WHERE first.city=second.city AND first.sname < second.sname;

* ПсСвдонимам Π½Π΅Ρ‚ нСобходимости ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°.

SELECT cname, first.onum, second.onum FROM Orders first, Orders second, Customers WHERE first.cnum=second.cnum

AND first.cnum=Customers.cnum

AND first.onum < second.onum;

* Π’Π°Ρˆ Π²Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия, Π½ΠΎ Π² вашСм ΠΎΡ‚Π²Π΅Ρ‚Π΅ всС логичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅.

SELECT a.cname, a.city FROM Customers a, Customers b

* WHERE a.rating=b.rating AND b.cnum=2001;


Π“Π»Π°Π²Π° 10.

SELECT * FROM Orders WHERE cnum=(SELECT cnum

FROM Customers WHERE cname='Cisneros');

ΠΈΠ»ΠΈ

SELECT * FROM Orders WHERE cnum IN

* (SELECT cnum FROM Customers WHERE cname='Cisneros');

SELECT DISTINCT cname, rating FROM Customers, Orders

WHERE amt > (SELECT AVG (amt) FROM Orders)

* AND Orders.cnum=Customers.cnum;

SELECT snum, SUM (amt) FROM Orders

GROUP BY snum HAVING SUM (amt) >

* (SELECT MAX (amt) FROM Orders);


Π“Π»Π°Π²Π° 11.

1. SELECT cnum, cname FROM Customers outer

* WHERE rating=(SELECT MAX (rating) FROM Customers inner WHERE inner.city=outer.city);

. РСшСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ соотнСсСнного подзапроса:

SELECT snum, sname FROM Salespeople main

WHERE city IN (SELECT city FROM Customers inner

WHERE inner.snum < > main.snum);