Головна

Лекція 1. 3 сторінка

  1.  1 сторінка
  2.  1 сторінка
  3.  1 сторінка
  4.  1 сторінка
  5.  1 сторінка
  6.  1 сторінка
  7.  1 сторінка
 16. ВИКОРИСТАННЯ підзапитів З КОМАНДАМИ МОДИФІКАЦІЇ В ЦІЙ ЧОЛІ, ВИ ДОВІДАЄТЕСЯ ЯК ВИКОРИСТОВУВАТИ підзапити в командах модифікацією. Ви знайдете, що щось подібне - ви вже бачили при викорис танні підзапитів в запитах. Розуміння, як підзапити використовуються в командах SELECT, Зробити їх застосування в командах модифікації більш впевненим, хоча і залишаться деякі питання. Завершенням команди SELECT є підзапит, але не предикат, і по-цьому його використання відрізняється від використання простих предикатів з командами модифікації, які ви вже виконували рані з командами UPDATE і DELETE. Ви використовували прості запити щоб виробляти значення для INSERT, а тепер ми можемо розширити ці запити щоб включять в них підзапити. Важливий принцип який треба дотримуватися при роботі з командами модифікації, полягає в тому, що ви не можете в реченні FROM будь-якого під- запиту, модифікувати таблицю до якої посилаєтеся за допомогою основної команди. Це відноситься до всіх трьом командам модифікації. Хоча є велика кількість ситуацій в яких буде корисно зробити запит тієї таблиці яку ви хочете модифікувати причому під час її модифікації, це занадто ускладнює операцію щоб використовувати її на практиці. Не робіть посилання до поточного рядка таблиці зазначеної в команді, до- торая є співвіднесеним підзапитом. ==== ВИКОРИСТАННЯ підзапитів З INSERT === INSERT - це найпростіший випадок. Ви вже бачили як вставляти результа- ти запиту в таблицю. Ви можете використовувати підзапити всередині будь-якого запиту, який генерує значення для команди INSERT тим же самим способом, яким ви робили це для інших запитів - т. Е. Внут ри предиката або пропозиції HAVING. Припустимо, що ми маємо таблицю з ім'ям SJpeople, стовпці якої збігаються із стовпцями нашої таблиці Продавців. Ви вже бачили як за- виконувати таблицю подібно цієї, замовниками в місті, наприклад, в San Jose: INSERT INTO SJpeople SELECT * FROM Salespeople WHERE city = 'San Jose'; Тепер ми можемо використовувати підзапит щоб додати до таблиці SJpeople всіх продавців які мають замовників в San Jose, незалежної мо від того, чи знаходяться там продавці чи ні: INSERT INTO SJpeople SELECT * FROM Salespeople WHERE snum = ANY (SELECT snum FROM Customers WHERE city = '(San (Jose'); Обидва запиту в цій команді функціонують також як якби вони не були частиною вираження INSERT. підзапитів знаходить все рядки для замов- ник в San Jose і формує набір значень snum. Зовнішній запит вибирає рядки з таблиці Salespeople , де ці значення snum знайдені. у цьому прикладі, рядки для продавців Rifkin і Serres, які при- ни замовникам в San Jose - Liu і Cisneros, будуть вставлені в таблицю SJpeople. Не вставляйте дублікат СТРОК Послідовність команд в попередньому розділі може бути проб лематічной. Продавець Serres знаходиться в San Jose, і отже бу дет вставлений за допомогою першої команди. Друга команда спробує вста- вити його знову, оскільки він має ще одного замовника в San Jose. Якщо є будь-які обмеження в таблиці SJpeople які змушують її значення бути унікальними, ця друга вставка зазнає невдачі (як це і повинно було бути). Подвійні рядки це погано. (Див. Главу 18 для подробиць про обмеження.) Було б краще якби ви могли якось з'ясувати, що ці значення вже були вставлені в таблицю, перш ніж ви спробуєте зробити це знову, за допомогою додавання іншого підзапиту (використовує оператори типу EXISTS , IN, <> ALL, і так далі) до предикату. На жаль, щоб зробити цю роботу, ви повинні будете посилатися на саму таблицю SJpeople в реченні FROM цього нового підзапиту, а, як ми говорили раніше, ви не можете посилатися на таблицю яка за- діяти (цілком) в будь-якому підзапиті команди модифікації. У слу чаї INSERT, це буде також перешкоджати співвіднесеним підзапитів, заснованим на таблиці в яку ви вставляєте значення. Це має зна- чення, тому що, за допомогою INSERT, ви створюєте новий рядок в табли- це. "Поточна рядок" не існуватиме до тих пір, поки INSERT не завершить її обробляти. ВИКОРИСТАННЯ підзапитів створення ВО ЗОВНІШНЬОЇ ТАБЛИЦІ ЗАПРОСА Заборона на посилання до таблиці яка модифікується командою IN- SERT не захищаючись вас від використання підзапитів які посилаються до таблиці використовуваної в реченні FROM зовнішньої команди SELECT. Таб- особи з якої ви вибираєте значення, щоб зробити їх для INSERT, що не буде задіяна командою; і ви зможете посилатися до цієї таблиці будь-яким способом якими ви зазвичай це робили, але тільки якщо ця таб- особи вказана в автономному запиті. Припустимо що ми маємо таблицю з ім'ям Samecity в якій ми запам'ятаємо продавців з замовниками в їх го- пологах. Ми можемо заповнити таблицю використовуючи співвіднесений підзапит: INSERT INTO (Samecity SELECT * FROM (Salespeople outer WHERE city IN (SELECT city FROM Customers inner WHERE inner.snum = outer.snum); Ні таблиця Samecity, ні таблиця Продавців не повинні бути использова- ни в зовнішніх або внутрішніх запитах INSERT. як інший прикладу багато, припустимо, що ви маєте премію для продавця який має най- великий порядок на кожен день. ви стежите за ним в таблиці з име- ньому Bonus, яка містить поле snum продавців , поле odate і поле amt. Ви повинні заповнити цю таблицю інформацією яка зберігається в таблиці Порядків, використовуючи наступну команду: INSERT INTO Bonus SELECT snum, odate, amt FROM Orders a WHERE amt = (SELECT MAX (amt) FROM Orders b WHERE a. odate = b.odate); Навіть якщо ця команда має підзапит який базується на тій же самій таблиці що і зовнішній запит, він не посилається до таблиці Bonus, на яку впливає команда. що для нас є абсолютно прийнятним. Логіка запиту, природно, повинна переглядати таблицю Порядків, і знаходити для кожного рядка максимум порядку сум придбань для цієї дати. Якщо ця величина - така ж як у поточного рядка, поточна рядок є найбільшим порядком для цієї дати, і дані вставляют- ся в таблицю Bonus. ==== ВИКОРИСТАННЯ підзапитів З DELETE ==== Ви можете також використовувати підзапити в предикате команди DELETE. Це дасть вам можливість визначати деякі досить складні крите- рії щоб встановити, які рядки будуть видалятися, що важливо, так як ви звичайно ж не захочете через необережність видалити потрібний рядок. Наприклад, якщо ми закрили наше відомство в Лондоні, ми могли б використати наступний запит щоб видалити всіх замовників призначених до продавців в Лондоні: DELETE FROM Customers WHERE snum = ANY (SELECT snum FROM Salespeople WHERE city = 'London'); Ця команда видалить з таблиці Замовників рядки Hoffman і Clemens (призначених для Peel), і Periera (призначеного до Motika). Звичайно, ви захочете упевнитися, чи правильно сформована ця операція, перш ніж удалітт або ізменітт рядки Peel і Motika. Це важливо. Зазвичай, коли ми робимо модифікацію в базі даних, кото-рая спричинить інші модифікації, наше перше бажання - зробити спочатку основна дія, а потім простежити інші, вторинні. Цей приклад, покаже, чому більш ефективно робити навпаки, виконавши спочатку вторинні дії. Якщо, наприклад, ви вирішили змінити значення поля city ваших продавши- решт всюди, де вони змінені, ви повинні розглянути всіх цих замов- ник більш складним способом. Так як реальні бази даних мають тенденцію розвиватися до значно більших розмірів ніж наші невеликі типові таблиці, це може стати серйозною проблемою. SQL може надати деяку допомогу в цій галузі використовуючи механізм довідкової цілісності (обговореної в Главі 19), але це не завжди є і не завжди доречно. Хоча ви не можете посилатися до таблиці з якої ви будете видаляти рядки в реченні FROM підзапиту, ви можете в предикате, послатися на поточний рядок-кандидат цій таблиці - яка є рядком до- торая в даний час перевіряється в основному предикате. Іншими словами, ви можете використовувати співвіднесені підзапити. Вони відрізняються від тих співвіднесених підзапитів, які ви могли використовувати з IN- SERT, в якому вони фактично базувалися на рядках-кандидатах таб- лиці задіяння в команді, а не на запиті іншої таблиці. DELETE FROM Salespeople WHERE EXISTS (SELECT * FROM Customers WHERE rating = 100 AND Salespeople.snum = Customers.snum); Зверніть увагу, що AND частина предиката внутрішнього запиту сси- лается до таблиці Продавців. Це означає що весь підзапит буде ви- виконуватися окремо для кожного рядка таблиці Продавців, також як це виконувалося з іншими співвіднесені підзапитах. Ця команда видалить всіх продавців які мали щонайменше одного замовника з оцен- кой 100 в таблиці Продавців. Звичайно ж, є інший спосіб зробити те ж: DELETE FROM Salespeople WHERE 100 IN (SELECT rating FROM Customers WHERE Salespeople.snum = Customers.snum); Ця команда знаходить все оцінки для кожного замовника продавців і видаляє тих продавців замовники якого мають оцінку = 100. Зазвичай співвіднесені підзапити - це підзапити пов'язані з таблицею до якої вони посилаються в зовнішньому запиті (а не в самому реченні DELETE) - і також часто використовувані. Ви можете знайти наинизший порядок на кожен день і видалити продавців які утворили її, за допомогою наступної команди: DELETE FROM Salespeople WHERE (snum IN (SELECT snum FROM Orders WHERE amt = (SELECT MIN (amt) FROM Orders b WHERE a.odate = b .odate)); підзапитів в предикате DELETE, бере співвіднесений підзапит. Цей внутрішній запит знаходить мінімальний порядок суми пріобретеій для дати кожного рядка зовнішнього запиту. Якщо ця сума така ж як сума поточної рядки, предикат зовнішнього запиту вірний, що означає, що те- поточна рядок має найменший порядок для цієї дати. Поле snum продавши- ца, відповідального за цей порядок, витягується і передається в основній предикат команди DELETE, яка потім видаляє всі рядки з цим значенням поля snum з таблиці Продавців (так як snum - це первинний ключ таблиці Продавців, то природно там повинна бути тільки одна видаляється рядок для значення поля snum виведеного з допомогою подзап- роса. Якщо є більше одного рядка, всі вони будуть видалені.) Поле snum = 1007 яке буде видалено, має найменше значення на 3 ок тября; поле snum = 1002, найменше на 4 Жовтня; поле snum = 1001, найменше в порядках на 5 жовтня (ця команда здається досить рез кой, особливо коли вона видаляє Peel створив єдиний порядок на 5 жовтня, але зате це хороша ілюстрація). Якщо ви хочете сохра- нитка Peel, ви могли б додати ще один підзапит, який би це де- лал: DELETE FROM Salespeople WHERE (snum IN (SELECT snum FROM Orders a WHERE amt = (SELECT MIN (amt) FROM Orders b WHERE a. odate = b.odate) AND 1 <(SELECT COUNT onum FROM Orders b WHERE a.odate = b.odate)); Тепер для дня в якому був створений тільки один порядок, буде про- ізведен рахунок = 1 у другому співвідносному підзапиті. це зробить преді- кат зовнішнього запиту неправильним, і поля snum відтак не будуть передані в основний предикат. ==== ВИКОРИСТАННЯ підзапитів З UPDATE ==== UPDATE використовує підзапити тим же самим способом що і DELETE - всередині цього необов'язкового предиката. Ви можете використовувати соотне- сінешні підзапити або у формі придатній для використання з DELETE - пов'язаної або з модифікується таблицею або з таблицею спричиненої в зовнішньому запиті. Наприклад, за допомогою соотнесенного підзапиту до табли- це яка буде модифікуватися, ви можете збільшити комісійні всіх продавців які були призначені принаймні двом замовникам: UPDATE Salespeople SET comm = comm + .01 WHERE 2 <= (SELECT COUNT (cnum) FROM Customers WHERE Customers.snum = Salespeople.snum); Тепер продавці Peel і Serres, мають многочислених замовників, по- лучатся підвищення своїх комісійних. Є різновид останнього прикладу з попереднього розділу з DELETE. Він зменшує комісійні продавців які справили найменшим шие порядки, але не стирає їх в таблиці: UPDATE Salespeople SET comm = comm - .01 WHERE snum IN (SELECT snum FROM Orders a WHERE amt = (SELECT MIN (amt) FROM Orders b WHERE a .odate = b.odate)); Зіткнення з ОБМЕЖЕННЯМИ підзапитів КОМАНДИ DML Нездатність послатися до таблиці задіяння в будь-якому підзапиті з команди модифікації (UPDATE), усуває цілі категорії можливих дій. Наприклад, ви не можете просто виконати таку операцію як видалення всіх замовників з оцінками нижче середньої. Ймовірно найкраще ви могли б спочатку (Крок 1.), виконати запит, який отримує середню ве- личину, а потім (Крок 2.), видалити всі рядки з оцінкою нижче цієї величини: Крок 1. SELECT AVG (rating) FROM Customers; Висновок = 200. Крок 2. DELETE FROM Customers WHERE rating <200; =============== РЕЗЮМЕ ================== Тепер ви оволоділи трьома командами які керують усім содержані- їм вашої бази даних. Залишилося лише кілька загальних питань що- введення і стирання значень таблиці, коли наприклад ці команди можуть виконатися даними користувачем в даній таблиці і коли дейс- твия зроблені ними, стають постійними. Підіб'ємо підсумок: Ви використо- вується команду INSERT щоб додавати рядки в таблицю. Ви можете або дати імена значень цих рядків в реченні VALUES (коли тільки один рядок може бути додана), або вивести значення за допомогою запиту (коли будь-яке число рядків можна додати однією командою). Як- використовується запит, він не може посилатися до таблиці в яку ви робите вставку, яким би способом Ви її не робили, ні в реченні FROM, ні за допомогою зовнішнього посилання (як це робиться в співвіднесених підзапитах). Все це відноситься до будь-яких підзапитів всередині цього зап роса. Запит, однак, залишає вам свободу використання співвіднесених підзапитів або підзапитів які дають в реченні FROM ім'я табли- це, яке вже було зазначено в пропозиції FROM зовнішнього запиту (це - загальний випадок для запитів). DELETE і UPDATE використовуються щоб, відповідно видалити рядки з таблиці і змінити в них значення. Обидва вони можуть бути застосовані до всіх рядків таблиці, якщо не використовується предикат визначає які рядки по- винні бути видалені або модифіковані. Цей предикат може містити під- запити, які можуть бути пов'язані з таблицею, що видаляється, або модіфі- цірованой, за допомогою зовнішнього посилання. Ці підзапити, однак, не можуть засилати до таблиці модифікується будь-якою пропозицією FROM. Може поки-тися, що ми пройшли матеріал SQL який володіє не самим зрозумілим логічним порядком. Спочатку ми зробили запит таблиці яка вже заповнена даними. Потім ми показали як можна фактично поміщати ці значення спочатку. Але, як ви бачите, повне ознайомлення з запроса- ми тут неоціненне. Тепер, коли ми показали вам як заповнювати значеннями таблиці які вже були створені (за визначенням), ми покажемо (з наступною глави) звідки з'явилися ці таблиці. * * * * * * * * * * * * * * РОБОТА З SQL * * * * * * * * * * * * * * 1. Зробіть припущення, що є таблиця звана Multicust, з такими ж іменами стовпців що і таблиця Продавців . Напишіть команду, яка б вставила всіх продавців (з таблиці Продавців) Мають більш ніж одного замовника в цю таблицю. 2. Напишіть команду яка б видаляла всіх замовників не мають те- кущіх порядків. 3. Напишіть команду яка б збільшила на двадцять відсотків комісі- Сіон всіх продавців мають загальні поточні порядки вище ніж $ 3,000. (Див. Додаток A для відповідей.) 17. СТВОРЕННЯ ТАБЛИЦЬ АЖ ДО ЦЬОГО МІСЦЯ, ми запитуємо ТАБЛИЦІ даних і виконували ко манди по вилученню цих даних, вважаючи, що ці таблиці вже були ство дані ким - то до нас. Це дійсно найбільш реальна ситуація, коли невелика кількість людей створюють таблиці, які потім ви- користуються іншими людьми. Наша мета полягає в тому, щоб охопивши ін- формацію спочатку більш широко, перейти потім до більш вузьких питань. У цьому розділі, ми будемо обговорювати створення, зміна, і видалення таблиць. Все це відноситься до самих таблиць, а не до даних які в них містяться. Будете або не будете Ви виконувати ці операції самос- тоятельно, але їх концептуальне розуміння збільшить ваше розуміння язи ка SQL і природу таблиць які ви використовуєте. Ця глава вводить нас в область SQL звану - DDL (Мова Визначення Даних), де створюються об'єкти даних SQL. Ця глава також покаже інший вид об'єкта даних SQL - Індекс. Ін- індекси використовуються щоб робити пошук більш ефективним і, іноді, змушувати значення відрізнятися одного від одного. Вони зазвичай працюють не- помітно для Вас, але якщо ви спробуєте помістити значення в таблицю і вони будуть відхилені, через їх неунікальності, це буде означати що інший рядок має те ж саме значення для цього поля, і що це по- ле має унікальний індекс або обмеження яке наказує йому унікальність. Обговорення вищезазначеного, продовжиться в Главі 18. ======== КОМАНДА СТВОРЕННЯ ТАБЛИЦІ ======== Таблиці створюються командою CREATE TABLE. Ця команда створює порожню таблицю - таблицю без рядків. Значення вводяться за допомогою DML команди INSERT (Див. Главу 15). Команда CREATE TABLE в основному визначає ім'я таблиці, у вигляді опису набору імен стовпців зазначених в певному порядку. Вона також визначає типи даних і розміри стовпців. Кожна таблиця повинна мати принаймні один стовпець. Синтаксис команди CREATE TABLE: CREATE TABLE ([()], [()] ...); Як сказано в Главі 2, типи даних значно змінюються від програми до програми. Для сумісності зі стандартом, вони повинні все, при- наймні, підтримувати стандарт типу ANSI. Він описаний в Додатку B. Оскільки прогалини використовуються для поділу частин команди SQL, вони не можуть бути частиною імені таблиці (або будь-якого іншого об'єкта, тако го як індекс). Підкреслення (_) - зазвичай використовується для разде- лення слів в іменах таблиць. Значення аргументу розміру залежить від типу даних. Якщо ви його не вказуєте, ваша система сама призначатиме значення автоматично.
 ([,] ...); Таблиця, звичайно, повинна вже бути створена і повинна містити ім'я стовпця. Ім'я індексу не може бути використано для чогось іншого в базі даних (будь-яким користувачем). Одного разу створений, індекс буде невидимий користувачеві. SQL сам вирішує коли він необхідний щоб ссилать- ся на нього і робить це автоматично. Якщо, наприклад, таблиця замовлення-ків буде найбільш часто згадуваною в запитах продавців до їх собс- твенной клієнтурі, було б правильно створити такий індекс в поле snum таблиці Замовників. CREATE INDEX Clientgroup ON Customers (snum); Тепер, той продавець який має відношення до цієї таблиці зможе знайти власну клієнтуру дуже швидко. УНІКАЛЬНІСТЬ ІНДЕКСУ Індексу в попередньому прикладі, на щастя, не пропонується уникаль- ність, незважаючи на наше зауваження, що це є одним з назначе- ний індексу. Даний продавець може мати будь-яке число замовників. Одна-ко, цього не станеться якщо ми використовуємо ключове слово UNIQUE перед ключовим словом INDEX. Поле сnum, в якості первинного ключа, стане першим кандидатом для унікального індексу: CREATE UNIQUE INDEX Custid ON Customers (cnum); ПРИМІТКА: ця команда буде відхилена якщо вже є ідентичні значення в поле cnum. Кращий спосіб мати справу з індексами полягає в тому, щоб створювати їх відразу після того, як таблиця створена і преж- де, ніж введені будь-які значення. Так само зверніть увагу що, для уні кального індексу більш ніж одного поля, це - комбінація значень, кожне з яких, може і не бути унікальним. Попередній приклад - непрямий спосіб змусити поле cnum працювати як первинний ключ таблиці Замовників. Бази даних впливають на первинні та інші ключі конкретніше. Ми будемо обговорювати цей висновок далі в главах 18 і 19. ВИДАЛЕННЯ ІНДЕКСІВ Головною ознакою індексу є його ім'я - тому він може бути видалений. Зазвичай користувачі не знають про існування індексу. SQL ав- томатически визначає дозволено користувачеві використовувати індекс, і якщо так, то дозволяє використовувати його. Однак, якщо ви хочете уда- лити індекс, ви повинні знати його ім'я. Цей синтаксис використовується для видалення індексу: DROP INDEX; Видалення індексу не вплине на зміст полів. ЗМІНА ТАБЛИЦІ ПІСЛЯ ======== ТОГО ЯК ВОНА БУЛА СТВОРЕНА ======== Команда ALTER TABLE не частина стандарту ANSI; але це - широко доступності ная, і досить змістовна форма, хоча її можливості дещо обмежені. Вона використовується щоб змінити визначення існуючої таблиці. Зазвичай, вона додає стовпці до таблиці. Іноді вона може видаляти стовпці або змінювати їх розміри, а також в деяких про- мах додавати або видаляти обмеження (обговорені в Главі 18). Типова синтаксис щоб додати стовпець до таблиці: ALTER TABLE
 ADD; Стовпець буде додано зі значенням NULL для всіх рядків таблиці. Но вий стовпець стане останнім по порядку стовпцем таблиці. Взагалі то, можна додати відразу кілька нових стовпців, відокремивши їх комами, в однй команді. Є можливість видаляти або змінювати стовпці. Най- більш часто, зміною стовпчика може бути просто збільшення його разме- ра, або додавання (видалення) обмеження. Ваша система повинна убе- диться, що будь-які зміни не суперечать існуючим даними - нап -Рімера при спробі додати обмеження до колонку який вже мав зна- чення при порушенні якого обмеження буде відхилено. Найкраще двічі перевірити це. По крайней мере, подивіться документацію вашої системи щоб переконатися, чи гарантує вона що саме це було причи- ною. Через нестандартного характеру команди ALTER TABLE, вам все одно необхідно подивитися той розділ вашої системної документації де го- ворітся про особливі випадки. ALTER TABLE - не діє, коли таблиця повинна бути переопределе- на, але ви повинні розробляти вашу базу даних по можливості так щоб не дуже їй в цьому передоручає. Зміна структури таблиці коли вона вже в використанні - небезпечно! Перегляньте уважно табли- ці, які будучи вторинними таблицями з витяганням даними з дру гой таблиці (дивись Главу 20), не довго правильно працюють, а прог- Рамі використовують вкладений SQL (Глава 25) виконуються неправильно або не завжди проавільно. Крім того, зміна може стерти всіх користувачів які мають дозвіл звертатися до таблиці. За цим причи- нам, ви повинні розробляти ваші таблиці так, щоб використовувати AL- TER TABLE тільки в крайньому випадку. Якщо ваша система не підтримує ALTER TABLE, або якщо ви хочете уникнути її використання, ви можете просто створити нову таблицю, з необхідними змінами при створенні, і використовувати команду INSERT з SELECT * запитом щоб переписати в неї дані зі старої таблиці. Користувачам яким було надано доступ до старої таблиці (див. Главу 22) повинен бути наданий доступ до нової таблиці. ============= ВИДАЛЕННЯ ТАБЛИЦЬ =============== Ви повинні бути власником (т. Е. Бути творцем) таблиці щоб мати можливість видалити її. Тому не хвилюйтеся про випадковий разру- шеніі ваших даних, SQL спочатку зажадає щоб ви очистили таблицю перш, ніж видалить її з бази даних. Таблиця з розташованими в ній рядками, не може бути видалена. Зверніться до Глави 15 за подробностя- ми щодо того як видаляти рядки з таблиці. Синтаксис для уда- лення вашої таблиці, якщо звичайно вона є порожньою, наступна: DROP TABLE ; При подачі цієї команди, ім'я таблиці більше не розпізнається і немає такої команди яка могла бути дана цьому об'єкту. Ви повинні убе- диться, що ця таблиця не посилається зовнішнім ключем до іншої таблиці (Зовнішні ключі обговорюються в Главі 19), і що вона не використовується у визначенні Уявлення (Глава 20). Ця команда фактично не є частиною стандарту ANSI, але вона про- ще поддерживаема і корисна. На щастя, вона простіша, і следова- тельно більш несуперечлива, ніж ALTER TABLE. ANSI просто не має способу для визначення зруйнованих або неправильних таблиць. =============== РЕЗЮМЕ =============== Тепер Ви вже побіжно орієнтуєтеся в основах визначень даних. Ви можете створювати, змінювати, і видаляти таблиці. У той час як тільки перша з цих функцій - частина офіційного стандарту SQL, інші ватимуть час від часу змінюватися, особливо - ALTER TABLE. DROP TABLE поз- воляет вам позбавитися від таблиць які не приносять користі. Вона знищує тільки порожні таблиці, і отже не руйнує дані. Ви тепер знаєте про індекси а також, як їх створювати і видаляти. SQL не дає вам великого управління над ними, так як реалізація кото- рую ви використовуєте досить вдало визначає, як швидко виконуються різні команди. Індекси - це один з інструментів дає Вам змогу впливати безпосередньо на ефективність ваших команд в SQL. Ми розглянули індекси тут щоб відрізняти їх від обмежень, з якими їх не можна плутати. Обмеження - це тема Глави 18 і Глави 19. * * * * * * * * * * * * * * * * РОБОТА З SQL * * * * * * * * * * * * 1. Напишіть пропозицію CREATE TABLE яке б вивело нашу таблицю Замовників. 2. Напишіть команду яка б давала можливість користувачеві швидко знаходити порядки згруповані по датах з таблиці Порядків. 3. Якщо таблиця Порядків вже створена, як Ви можете змусити поле onum бути унікальним (якщо допустити що всі поточні значення регти)? 4. Створіть індекс який би дозволяв кожному продавцеві швидко отискі- вать його порядки згруповані по датах. 5. Припустимо, що кожен продавець має тільки одного замовника з цією оцінкою, введіть команду яка його отримає. (Див. Додаток A для відповідей.)



 Лекція 1. 1 сторінка |  Лекція 1. 5 сторінка |  Лекція 1. 6 сторінка |  Лекція 1. 7 сторінка |  Фізичні властивості ґрунтів. |  Будівельна класифікація ґрунтів. |  деформованість грунтів |  Компресійні випробування, отримання і аналіз компресійних кривих. |  Деформаційні характеристики грунтів. |  Водопроникність грунтів. |

© 2016-2022  um.co.ua - учбові матеріали та реферати