Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpori.docx
Скачиваний:
26
Добавлен:
14.02.2016
Размер:
271.14 Кб
Скачать

5, Мова sql.Загальна характеристика.

SQL (англ. Structured query language — мова структурованих запитів) — декларативна мова програмування для взаємодії користувача з базами даних, що застосовується для формування запитів, оновлення і керування реляційними БД, створення схеми бази даних і її модифікації, системи контролю за доступом до бази даних. Сам по собі SQL не є ні системою керування базами даних, ні окремим програмним продуктом. Не будучи мовою програмування в тому розумінні, як C або Pascal, SQL може формувати інтерактивні запити або, будучи вбудованою в прикладні програми, виступати в якості інструкцій для керування даними. Стандарт SQL, крім того, вміщує функції для визначення зміни, перевірки і захисту даних.

SQL — це діалогова мова програмування для здійснення запиту і внесення змін до бази даних, а також управління базами даних. Багато баз даних підтримує SQL з розширеннями до стандартної мови. Ядро SQL формує командна мова, яка дозволяє здійснювати пошук, вставку, обновлення, і вилучення даних, використовуючи систему управління і адміністративні функції. SQL також включає CLI (Call Level Interface) для доступу і управління базами даних дистанційно.

Перша версія SQL була розроблена на початку 1970-х років у IBM. Ця версія носила назву SEQUEL і була призначена для обробки і пошуку даних, що містилися в реляційній базі даних IBM, System R . Мова SQL пізніше була стандартизована Американськими Держстандартами (ANSI) в 1986. Спочатку SQL розроблялась як мова запитів і управління даними, пізніші модифікації SQL створено продавцями системи управління базами даних, які додали процедурні конструкції, control-of-flow команд і розширення мов. З випуском стандарту SQL:1999 такі розширення були формально запозичені як частина мови SQL через Persistent Stored Modules (SQL/PSM).

Критики SQL включає відсутність крос-платформенності , невідповідною обробкою відсутніх даних (дивіться Null (SQL)), і іноді неоднозначна граматика і семантика мови.

7. Використання агрегатних функцій

В інформатиці, агрегатна функція (дослівно - функція складеного значення) — функція, яка повертає одинарне значення з колекції вхідних значень такої як множина (set), мультимножина (multiset) або список (list).

Серед набільш поширених агрегатних функцій:

  • Average()

  • Count()

  • Maximum()

  • Median()

  • Minimum()

  • Mode()

  • Sum()

Агрегатні функції широко вживані в багатьох мовах програмування, наприклад, Ruby, в електронних таблицях, в реляційній алгебрі.

Агрегатні функції в SQL

В SQL агрегатні функції повертають одинарне значення, обчислене зі значень в стовпці.

Деякі корисні агрегатні функції:

* AVG() - Повертає середнє значення

* COUNT() - Повертає кількість рядків

* FIRST() - Повертає перше значення

* LAST() - Повертає останнє значення

* MAX() - Повертає найбільше значення

* MIN() - Повертає найменше значення

* SUM() - Повертає суму

8. Вибір з кількох таблиць

Використання об'єднань для запитів до кількох

таблиць

За умов нормалізованої бази даних, коли дані зберігаються не в одній, а в цілому наборі

таблиць, можливість вибору даних тільки з однієї таблиці, звичайно ж, є великим

обмеженням. Добре спроектована реляційна база даних стає цікавим об'єктом через

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

кількох таблиць такі зв'язки називають

об'єднаннями

. Розглянемо запити, в яких

об'єднуються дві таблиці.

Об'єднання двох таблиць

Розглянемо такий запит:

select knygy.nazva, grupy.nazvaGrupy

from knygy, grupy

where knygy.grupID = grupy.grupID;

Тут у виразі FROM замість однієї таблиці вказані дві. У цьому випадку ми хотіли б

відшукати в базі даних назви книг разом з назвами груп, до яких вони відносяться.

У першому запиті, що використовує вираз

WHERE

, відобразилися назви книг з

відповідними назвами груп, а в другому — всі можливі комбінації книг і назв груп. Проте

це не дає можливості з'ясувати, які рядки несуть правильну інформацію, а які —

помилкову. Результуючу множину, що містить всі можливі комбінації даних з двох

таблиць, називають

декартовим добутком

цих

таблиць.

Вираз

WHERE

важливий з погляду отримання потрібного результату. Набір умов,

використаних при створенні зв'язку для об'єднання таблиць, називають

умовою

об'єднання

.

У цьому випадку ми використовували умову

knygy

.

grupID

=

grupy

.

grupID

,

що

зв'язує таблиці за зовнішнім ключем.

Об'єднання кількох таблиць

Об'єднання кількох таблиць аналогічне об'єднанню двох таблиць.

Розглянемо випадок, коли вимагається з'ясувати, книги якиї тематики (групи) читає

відвідувач

Гарбузинський Володимир

. Як знайти ці дані?

Ми знаємо ім'я відвідувача і, знайшовши його в таблиці відвідувачів, можна з'ясувати його

кодовий номер (

vidvID

). Це можна використати для того, щоб знайти відповідні

замовлення в таблиці замовлень і побачити, які книги читав відвідувач. З таблиці

замовлень ми одержимо кодові номери книг

(

knygaID

)

, а з таблиці книг можна з'ясувати

номери груп, до яких віднесені ці книги. За цими даними ми можемо звернутися до

таблиці

grupy

і знайти назву відповідної групи.

Запит може виглядати так:

Нам довелося вказати спочатку всі таблиці шляху, що ми спланували, а потім умови

об'єднань, що зв'язують ці таблиці одна з одною. Ми тут маємо і одну звичайну умову —

vidviduvachi

.

imja

='Гарбузинський Володимир'

— і кілька умов об'єднання. Для об’єднання

чотирьох таблиць нам знадобилися три умови об'єднання.

Якщо вимагається об'єднати

n

таблиць, то, як правило, кожна умова зв'язуватиме пару

таблиць, тому потрібно вказати

n

-1

умову об'єднання. Об'єднання таблиць з наведеного

прикладу показані на рис. 1, з якого зрозуміло, чому для чотирьох таблиць потрібні три

умови об'єднання.

vidviduvachi.vidvID = zamovlennya.vidvID

zamovlennya.knygaID = knygy.knygaID

vidviduvachi

zamovlennya

knygy

grupy

knygy.grupID = grupy.grupID

Рис. 1 Для об’єднання чотирьох таблиць потрібно три умови об’єднання

Самооб’єднання таблиць

Аналогічно об'єднанню таблиці з іншою таблицею,

можна

об'єднати таблицю саму з

собою. Але навіщо це робити? Припустимо, що ви хочете з'ясувати назви книг групи, до

якої належить «

Сталкер»

. Для цього необхідно знайти в таблиці

knygy

номер групи

(

grupID

), до якої належить «

Сталкер»

, а потім подивитися в таблиці

knygy

, які книги ще

належать до цієї групи.

У цьому запиті для таблиці

knygy

ми визначили два різні псевдоніми. По суті ми

«повідомили» MySQL, що хотіли б мати дві окремі таблиці,

k

l і

k

2, що мають містити

однакові дані. Після цього ми об'єднуємо їх так само, як будь-які інші таблиці. Знаходимо

рядок «Сталкера»

в таблиці

Тут представлені всі книги, що належать до однієї групи з «Сталкером», включаючи іцю

книжку. Дуже просто додати умову, що виключить її із результуючого списку:

Типи об'єднань

Існують різні типи об'єднань, що можуть використовуватися в MySQL.

Основне об'єднання

У попередньому розділі ми згадали поняття декартового добутку. У цьому контексті його

іноді називають повним або перехресним об'єднанням, але, незалежно від термінології,

таке об'єднання повертає повний набір комбінацій рядків. При додаванні до об'єднання

деякого умовного виразу (типу

knygy

.

grupID

=

grupy

.

grupID

) ми перетворюємо його на

об'єднання за еквівалентністю

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

До тепер ми використовували набір таблиць, записаних у виразі

FROM

і розділених

комами. Це визначало, як було показано вище, перехресне об'єднання, що

перетворювалося на об'єднання за еквівалентністю за допомогою виразу

WHERE

. MySQL

пропонує різні форми синтаксису для об'єднань такого типу.

Розглянемо запит:

При використанні цього типу об'єднання MySQL знаходить зв'язані таблиці і намагається

об'єднати їх оптимально, не обов'язково в тому порядку, в якому їх записує користувач.

Іноді така оптимізація запиту виявляється не зовсім правильною. Якщо необхідно

відмінити оптимізацію і «примусити» MySQL зв'язати таблиці у вказаному порядку, слід

використати вказівку

STRAIGHT

_

JOIN

(безпосереднє об'єднання), вставивши її відразу

після слова

select

.

Ліві і праві об'єднання

При об'єднанні за еквівалентністю в попередньому розділі ми використовували

JOIN

,

CROSS

JOIN

,

INNER

JOIN

або, можливо,

STRAIGHT

JOIN

і шукали рядки, що

задовольняють критеріям пошуку для двох або кількох таблиць.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]