розуміння sql

3. ВИКОРИСТАННЯ SQL ДЛЯ ВИЛУЧЕННЯ ІНФОРМАЦІЇ З таблиць

У цьому розділі ми покажемо вам як отримувати інформацію з таблиць. Ви дізнаєтеся як опускати або змінювати порядок стовпці і як автоматично усувати надмірність даних з вашого виведення. На закінчення, ви дізнаєтеся як встановлювати умова (перевірку), які Ви можете використовувати щоб визначити які рядки таблиці використовуються у висновку. Ця остання особливість, буде далі описана в більш пізніх розділах і є однією з найбільш витончених і потужних в SQL.

СТВОРЕННЯ ЗАПИТУ

ЩО ТАКЕ ЗАПИТ?

Запит - команда яку ви даєте вашій програмі бази даних, і яка повідомляє їй щоб вона вивела певну інформацію з таблиць в пам'ять. Ця інформація зазвичай надсилається безпосередньо на екран комп'ютера або терміналу яким ви користуєтеся, хоча, в більшості випадків, її можна також надіслати принтеру, зберегти в файлі (як об'єкт в пам'яті комп'ютера), або уявити як вступну інформацію для іншої команди або процесу.

ДЕ ЗАСТОСОВУЮТЬСЯ ЗАПИТИ?

Всі запити в SQL складаються з одиночної команди. Структура цієї команди оманливе проста, тому що ви повинні розширювати її так щоб виконати високо складні оцінки і обробки даних. Ця команда називається - SELECT (ВИБІР).

КОМАНДА SELECT

У найпростішій формі, команда SELECT просто інструктує базу даних щоб витягти інформацію з таблиці. Наприклад, ви могли б вивести таблицю Продавців надрукувавши наступне: Висновок для цього запиту показується в Малюнку 3.1. Малюнок 3.1: команда SELECT

Іншими словами, ця команда просто виводить всі дані з таблиці. Більшість програм будуть також давати заголовки стовпця як вище, а деякі дозволяють детальне форматування виводу, але це вже поза стандартної специфікації. Є пояснення кожної частини цієї команди:

Ключове слово яке повідомляє базі даних що ця команда - запит. Всі запити починаються цим словом, що супроводжується пропуском.

Це - список стовпців з таблиці які вибираються запитом. Будь-які стовпці не перераховані тут не будуть включені в висновок команди. Це, звичайно, не означає що вони будуть видалені або їх інформація буде стерта з таблиць, тому що запит не вплине на інформацію в таблицях; він тільки показує дані.

FROM - ключове слово, подібно SELECT, яке повинно Salespeople бути представлено в кожному запиті. Воно супроводжується пропуском і потім ім'ям таблиці використовуваної в якості джерела інформації. В даному випадку - це таблиця Продавців (Salespeople).

Крапка з комою використовується у всіх інтерактивних командах SQL щоб повідомляти базі даних що команда заповнена і готова виконатися. У деяких системах наклонна риса вліво (\) в рядку, є індикатором кінця команди.

Природно, запит такого характеру не обов'язково буде впорядковувати висновок будь-яким зазначеним способом. Та ж сама команда виконана з тими ж самими даними але в різний брешемо не зможе вивести той же самий порядок. Зазвичай, рядки виявляються в тому порядку в якому вони знайдені в таблиці, оскільки як ми встановили в попередньому розділі - цей порядок довільний. Це не обов'язково буде той порядок в якому дані вводилися або зберігалися. Ви можете впорядковувати висновок командами SQL безпосередньо: за допомогою спеціальної пропозиції. Пізніше, ми покажемо як це робиться. А зараз, просто запам'ятайте, що у відсутності явного упорядкування, немає ніякого певного порядку в вашому виведення.

Наше використання повернення (Кнопка ENTER) є довільним. Ми повинні точно встановити як зручніше скласти запит, в кілька рядків або в один рядок, в такий спосіб: З тих пір як SQL використовує крапку з комою щоб вказувати кінець команди, більшість програм SQL обробляють повернення (через натиск Повернення або клавішу ENTER) як пропуск. Це - хороша ідея щоб використовувати повернення і вирівнювання що ми робили це раніше, щоб зробити ваші команди більш легкими для читання та більш правильними.

Вибирайте ЗАВЖДИ НАЙБІЛЬШИЙ ПРОСТИЙ СПОСІБ

Якщо ви хочете бачити кожен стовпець таблиці, є необов'язкове скорочення яке ви можете використовувати. Зірочка (*) може застосовуватися для виведення повного списку стовпців наступним чином: Це призведе до того ж результату що і наша попередня команда.

ОПИС SELECT

У загальному випадку, команда SELECT починається з ключового слова SELECT, супроводжуваного прогалиною. Після цього повинен слідувати список імен стовпців які ви хочете бачити, відокремлюються комами. Якщо ви хочете бачити всі стовпці таблиці, ви можете замінити цей список зірочкою (*). Ключове слово FROM наступне далі, супроводжується пропуском і ім'ям таблиці запит до якої робиться. На закінчення, крапка з комою (;) повинна бути звичайно закінчити запит і вказати що команда готова до виконання.

Команда SELECT здатна витягти строго певну інформацію з таблиці. Перш за все, ми можемо надати можливість побачити тільки певні стовпці таблиці. Це виконується легко, простим винятком стовпців які ви не хочете бачити, з частини команди SELECT. Наприклад, запит буде виробляти висновок показаний на рисунку 3.2. Рисунок 3.2: Вибір певних стовпців

Можуть бути таблиці які мають велику кількість стовпців містять дані, не всі з яких є відносяться до поставленого завдання. Отже, ви можете знайти спосіб підбору і вибору тільки корисних для Вас стовпців.

Упорядкування стовпців

Навіть якщо стовпчики таблиці, за визначенням, впорядковані, це не означає що ви будете відновлювати їх у тому ж порядку. Звичайно, зірочка (*) покаже всі стовпці в їх природному порядку, але якщо ви вкажете стовпці окремо, ви можете отримати їх у тому порядку якому хочете. Давайте розглянемо таблицю Порядків, що містить дату придбання (odate), номер продавця (snum), номер порядку (onum), і суми придбання (amt): Висновок цього запиту показаний на рисунку 3.3. Малюнок 3.3: Реконструкція стовпців

Як ви можете бачити, структура інформації в таблицях - це просто основа для активної перебудови структури в SQL.

ВИДАЛЕННЯ НАДЛИШКОВИХ ДАНИХ

DISTINCT (ВІДМІНУ) - аргумент який забезпечує Вас способом усувати подвійні значення з вашої пропозиції SELECT. Припустимо що ви хочете знати які продавці в даний час мають свої порядки в таблиці Порядків. Під порядком (тут і далі) буде розумітися запис в таблицю Порядків, що реєструє придбання зроблені в певний день певним замовником у певного продавця на певну суму). Вам не потрібно знати, скільки порядків має кожен; вам потрібен тільки список номерів продавців (snum). Тому Ви можете ввести: для отримання висновку показаного в рисунку 3.4 Рисунок 3. 4: SELECT з дублюванням номерів продавців.

Для отримання списку без дублікатів, для зручності читання, ви можете ввести наступне: Висновок для цього запиту показаний в рисунку 3.5.

Іншими словами, DISTINCT стежить за тим, які значення були раніше, так що б вони не були продубльовані в списку. Це - корисний спосіб уникнути надмірності даних, але важливо що б при цьому ви розуміли що ви робите. Якщо ви не хочете втратити деякі дані, ви не повинні безоглядно використовувати DISTINCT, тому що це може приховати якусь проблему або якісь важливі дані. Наприклад, ви могли б припустити що імена всіх ваших замовників різні. Якщо хтось поміщає другого Clemens в таблицю Замовників, а ви використовуєте SELECT DISTINCT cname, ви не будете навіть знати про існування двійника. Ви можете отримати не ту Clemens і навіть не знати про це. Так як ви не очікуєте надмірності, в цьому випадку ви не повинні використовувати DISTINCT.

ПАРАМЕТРИ DISTINCT

DISTINCT може вказуватися тільки один раз в даній пропозиції SELECT. Якщо пропозиція вибирає численні підлогу, Малюнок 3.5: SELECT без дублювання

DISTINCT опускає рядки де всі вибрані підлогу ідентичні. Рядки в яких деякі значення однакові а деякі різні - будуть збережені. DISTINCT, фактично, призводить до показу всього рядка висновку, не вказуючи полів (за винятком коли він використовується всередині агрегат- них функцій, як описано в Главі 6), так що немає ніякого сенсу щоб його повторювати.

DISTINCT ЗАМІСТЬ ALL

Замість DISTINCT, ви можете вказати - ALL. Це буде мати протилежний ефект, дублювання рядків виводу збережеться. Так як це - той же самий випадок коли ви не вказуєте ні DISTINCT ні ALL, то ALL - по суті швидше пояснювальний, а не чинний аргумент.

КВАЛІФІКОВАНИЙ ВИБІР ПРИ ВИКОРИСТАННІ ПРОПОЗИЦІЙ

Таблиці мають тенденцію ставати дуже великими, оскільки з плином часу, все більша і більша кількість рядків в неї додається. Оскільки зазвичай з них тільки певні рядки цікавлять вас в даний брешемо, SQL дає можливість вам встановлювати критерії щоб визначити які рядки будуть обрані для виведення.

WHERE - пропозиція команди SELECT, яке дозволяє вам встановлювати предикати, умова яких може бути або вірним або невірним для будь-якого рядка таблиці. Команда витягує тільки ті рядки з таблиці для якої таке твердження вірне. Наприклад, припустимо ви хочете бачити імена і комісійні всіх продавців в Лондоні. Ви можете ввести таку команду: Коли пропозиція WHERE представлено, програма бази даних переглядає всю таблицю по одному рядку і досліджує кожну рядок щоб визначити чи правильно твердження. Отже, для запису Peel, програма розгляне поточне значення стовпця city, визначить що воно дорівнює "London", і включить цей рядок в висновок. Запис для Serres не буде активована, і так далі. Висновок для вищезгаданого запиту показаний в рисунку 3.6. Малюнок 3.6: SELECT c пропозицією WHERE

Давайте спробуємо приклад з числовим полем в реченні WHERE. Поле rating таблиці Замовників призначене щоб розділяти замовників на групи засновані на певних умов які можуть бути отримані в результаті через цей номер. Можливо це - форма оцінки кредиту або оцінки заснованої на томі попередніх придбань. Такі числові коди можуть бути корисні в реляційних базах даних як спосіб підведення підсумків складної інформації. Ми можемо вибрати всіх замовників з рейтингом 100, в такий спосіб: Поодинокі лапки не використовуються тут тому, що оцінка - це числове поле. Результати запиту показані в рисунку 3. 7.

Пропозиція WHERE сумісно з попереднім матеріалом в цьому розділі. Іншими словами, ви можете використовувати номери стовпців, усувати дублікати, або змінювати порядок стовпці в команді SELECT яка використовує WHERE. Однак, ви можете змінювати порядок стовпців для імен тільки в реченні SELECT, але не в реченні WHERE. Малюнок 3.7: SELECT з числовим полем в предикате

Найбільш важливим є те, що ви можете встановлювати умова зване предикатом яке визначає або не визначає зазначену рядок таблиці з тисяч таких же рядків, чи буде вона обрана для виведення.

Предикати можуть ставати дуже складними, надаючи вам високу точність в рішенні, які рядки вам вибирати за допомогою запиту. Саме ця здатність вирішувати точно, що ви хочете бачити, робить запити SQL такими потужними. Наступні кілька глав будуть присвячені, в більшій мірі, особливостям які розширюють потужність предикатів. У розділі 4, вам будуть представлені оператори інші ніж ті які використовуються в умовах предиката, а також способи об'єднання численних умов в єдиний предикат.

РОБОТА З SQL

1. Напишіть команду SELECT яка б вивела номер порядку, суму, і дату для всіх рядків з таблиці Порядків.

2. Напишіть запит який вивів би все рядки з таблиці Замовників для яких номер продавця = 1001.

3 Напишіть запит який вивів би таблицю зі стовпцями в наступному порядку: city, sname, snum, comm.

4. Напишіть команду SELECT яка вивела б оцінку (rating), супроводжувану ім'ям кожного замовника в San Jose.

5. Напишіть запит який вивів би значення snum всіх продавців в поточному порядку з таблиці Порядків без яких би то не було повторень.