Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Авт_ПМП / Tema_SQL.doc
Скачиваний:
10
Добавлен:
05.02.2016
Размер:
462.34 Кб
Скачать

Мова sql(Structured Query Language) – як універсальний засіб створення баз даних, маніпулювання данними та отримамання потрібної інформації.

SQL - це аббревіатура від Structured Query Language, що в перекладі з англійської означає мова структурованих запитів. Мова SQL орієнтована на реляційні бази даних, про які велась мова в попередніх лекціях. В ідеалі, люба мова для роботи з базами повинна надавати користувачеві такі можливості:

  • створюватибази даних і таблиці з повним описом їх структури;

  • виконувати основні операції маніпулювання даними (вставка, поновлення, видалення даних з таблиць);

  • виконувати прості і складні запити, що здійснюють перетворення необроблених даних в необхідну інформацію.

Крім того, мова роботи з базами даних повинна вирішувати всі вищезгадані при мінімальних зусиллях зі сторони користувача, а структура і синтаксис її команд повина бути простою і доступною для вивчення. Також мова повинна бути універсальною, тобто повинна відповідати загальновизнаному стандарту, що дозволить використовувати один і той же синтаксис і структуру команд при переході від однієї СУБД до іншої. Мова SQL задовольняє практично всім цим вимогам. Мова SQL має дві основні компоненти:

  • мова DDL (Data Definition Language), засобами якої визначаються структури бази;

  • мова DML (Data Manipulation Language), засобами якої здійснюється виборка і поновлення даних.

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

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

Термінологія SQL. Стандарт ISO SQL не підтримує таких формальних термінів як “відношення”, “атрибут” і “кортеж”, замість них вживаються терміни “таблиця”, “стовпчик” і “рядок”. Ми будемо притримуваться термінології ISO.

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

Слова в операторі розташовуються у порядку визначеному синтаксичними правилами мови. Більшість компонентів SQL-оператора не чутливі до регістру. Це означає, що можна використовувати як малі так і великі букви. Наприклад, зарезервоване слово Select можна записати і так: SELECT – обидва записи еквівалентні. В подальшому ми будемо притримуватиись таких правил:

  • Великі букви використовуватимемо для написання зарезервованих слів мови SQL.

  • Малі букви латинського алфавіту будемо використовуватимемо для написання слів, які визначаються користувачем.

  • Вертикальна риска ( | ) вказує на необхідність вибору одного з декількох наведених значень – наприклад, a | b | c.

  • Фігурні дужки визначають обов’язковий елемент – наприклад, { a }.

  • Квадратні дужки визначають необов’язковий елемент – наприклад, [a].

  • Трикрапка ( … ) використовується для необовязкового повтору певної конструкції від 0 до декількох раз – наприклад, {a|b}[,c…]. Цей запис означає, що після a або b записується від нуля до декількох повторів с, відокремлених комами.

На практиці для визначення таблиць використовуються DDL-оператори, а для заповнення цих таблиць даними і виборки з них використовуються DML-оператори. Спочатку ми розглянемо DML-оператори, а потім DDL-оператори.

До DML-операторів мови SQL відносяться такі оператори:

  • SELECT – виборка даних з бази;

  • INSERT – вставка даних у таблицю;

  • UPDATE – поновлення (заміна) даних в таблиці;

  • DELETE – видалення даних з таблиці.

Числові константи SQL. Любе число є константою, наприклад, 200,3,0.9 – є числовими константами.

Символьні або текстові константи. Люба послідовність букв і цифр є символьною константою. Символьні константи поміщаються в одинарні кавички, наприклад, ‘Школа’,’5-та школа’,’200’. Зауважимо, що константи 200 і ‘200’ є різними в SQL. В мові SQL константи як числові так і нечиислові називають одним словом – літерал.

Приклад використання літералів в операторі INSERT:

INSERT INTO ustanova(kod,nazva) VALUES(10234,’Академія ДПС України’)

Цей оператор вставляє в таблицю ustanova новий рядок значення першої колонки стає 10234 (ця колонка має числовий формат), а другої колонки (вона має текстовий формат) – “Академія ДПС України”.

В мові SQL діють арифметичні операції – додавання, віднімання, множення і ділення. Ці операції позначаються:

  • + - додавання (сума);

  • - - віднімання (різниця);

  • * - множення (добуток);

  • / - ділення (частка).

Алгебричні вирази. Люба числова константа є алгебричним виразом. Люба назва стовпчика таблиці є алгебричним виразом. Алгебричні вирази називають сумісними по типу, якщо вони мають однаковий тип (символьний, числовий). Якщо A i B алгебричні вирази числового типу , то A+B, A-B, A*B, A/B - алгебричні вирази числового типу. Наприклад, 100/2, (column_name*0.2)/1.2, column_name1*column_name2+100. Якщо вирази А і B мають строковий тип, то A+B є строковим виразом. Наприклад, ‘Академія’+’ ДПСУ’, column_name3 + ’зараховано’, column_name3+ column_name4. У вище наведених прикладах column_name1, column_name2 означали назви стовпчиків числового типу, а column_name3, column_name3 – назви стовпчиків символьного типу.

В мові SQL можна використовувати такі оператори зрівнювання:

=

рівність

<

менше

>

більше

<=

менше або дорівнює

>=

більше або дорівнює

<>

не рівно

Якщо вирази A i B вирази одного типу, то вирази:

A = B, A < B, A > B, A <= B, A >= B, A <> B

називатимемо предикатами. Предикати приймають 2 значення: ІСТИНА і НЕІСТИНА. Наприклад, column_name1>1000, column_name3=‘Академія’.

Більш складні предикати будуються з допомогою булевих операцій AND, OR або NOT.

Якщо P1, P2 – предикати, то

P1 AND P2 , P1 OR P2 , NOT P1

також предикати.

Нижче в таблиці наведені результати застосування булевих операцій.

P1

P2

P1 AND P2

P1 OR P2

NOT P1

Істина

Істина

Істина

Істина

Неістина

Істина

Неістина

Неістина

Істина

Неістина

Істина

Неістина

Істина

Істина

Неістина

Неістина

Неістина

Неістина

Прості запити

Призначення оператора SELECT полягає в тому, щоб вибирати необхідні дані з однієї або декількох таблиць. Це виключно потужний оператор, який здатний виконувати дії, еквівалентні операторам реляційної алгебри selection, projection i join. Загальнний формат оператора SELECT має вид:

SELECT [DISTINCT | ALL] {* | column_expression [ AS new_name][,…]}

FROM table_name [alias][,…]

[WHERE condition]

[GROUP BY column_list] [HAVING condition]

[ORDER BY column_list]

Параметр column_expression – це і’мя стовпчика або виразу з декількох імен. Параметр table_name – це є і’мя існуючої в базі таблиці або представлення, до яких потрібно доступитись. Необов’язковий параметр alias – це скорочення для імені таблиці table_name. Обробка елементів оператора SELECT виконується в такій послідовності:

  1. FROM - Визначаються імена таблиць, які використовуються

  2. WHERE - Виконується фільтрація рядків згідно заданої умови відбору

  3. GROUP BY - Утворюються групи рядків з однаковими значеннями в зазначених колонках

  4. HAVING – Фільтруються групи рядків обєкту згідно вказаної умови

  5. SELECT – Встановлюється, які стовпчики повині бути у вихідних даних

  6. ORDER BY – Визначається порядок результату виконання оператора.

Порядок фраз в операторі SELECT не можна змінювати. Тільки дві фрази –SELECT і FROM є обов’язковими, всі інші можуть бути пропущеними. Результат запиту до таблиць є таблиця. Символ * в операторі SELECT означає, що будуть вибрані всі стовпчики таблиці.

Приклади. Нехай в таблиці table_a зберіігається інформація про покупки товарів, а в table_b – про продаж цих товарів. Ці таблиці мають таакий вид:

table_a table_b

kod

suma

data

kod

suma

data

1

100

1.1.2002

1

50

12.1.2002

2

150

2.1.2002

1

47

14.1.2002

1

55

10.1.2002

2

35

10.1.2002

1

40

15.1.2002

2

80

1.2.2002

2

89

2.2.2002

3

28

10.2.2002

В стовпчики “kod” в обох таблицях заноситься код товару. В стовпчик “suma” таблиці table_a заноситься вартість закупленого товару, а в таблиці table_b – сума проданого товару. В стовчик “data” таблиці table_a заноситься дата закупки товару, а в table_b – дата продажу товару.

Задача. Одержати перелік товарів з відповідними сумами і датами, які були закуплені. Відповідний оператор SELECT матиме вид:

SELECT kod,suma,data

FROM table_a

Оскільки не задана умова відбору фраза WHERE не потрібна. Результат запиту матиме вид:

kod

suma

data

1

100

1.1.2002

2

150

2.1.2002

1

55

10.1.2002

1

40

15.1.2002

2

89

2.2.2002

3

28

10.2.2002

Точно такий же результат буде після виконання такого SELECT’у:

SELECT *

FROM table_a

Якщо потрібно відобразити лише код товару і відповідну суму, причому в першій колонці результату має бути сума а у другій - код, оператор SELECT матиме вид:

SELECT suma, kod

FROM table_a

Результат запиту матиме вид:

suma

Kod

100

1

150

2

55

1

40

1

89

2

28

3

(6 рядків)

Використання ключового слова DISTINCT. Задача. Потрібно скласти перелік кодів товарів які закуповувались. Якщо оператор SELECT задати таким чином:

SELECT kod

FROM table_a

Результат запиту матиме вид:

Kod

1

2

1

1

2

3

(6 рядків)

Зверніть увагу на дубльовані рядки, поскільки, на відміну від операції реляційної алгебри projection, оператор SELECT не виключає дубльованих рядків. Для видалення з результуючої таблиці дубльованих рядків використовується ключове слово DISTINCT. Відредагований запит матиме вид:

SELECT DISTINCT kod

FROM table_a

Результат запиту матиме вид:

Kod

1

2

3

(3 рядки)

При використанні ключового слова ALL оператор SELECT повертає всі рядки.

За змовчуванням (не вказано ні DISTINCT ні ALL), вважається, що діє ALL.

Обчислювальні поля. Задача. Одержати перелік товарів з відповідними сумами і відповідними сумами податку ПДВ, які закладені у вартість закуплених товарів. Відповідний оператор SELECT матиме вид:

SELECT kod,suma,(suma*0.2)/(1+0.2) AS pdv

FROM table_a

Результат запиту матиме вид:

kod

suma

Pdv

1

100

16.666666

2

150

25

1

55

9.3333333

1

40

6.6666666

2

89

27.666666

3

28

4.6666666

(6 рядків)

Соседние файлы в папке Авт_ПМП