Функції основні можливості мови SQL. Функціональні можливості мови SQL. Вибірка даних із використання пропозиції Select

2. описники вільної та зайнятої пам'ятіу сторінках відносин. Ця інформація необхідна для пошуку вільного місця під час занесення кортежу

3. зв'язування сторінок одного компонента. Якщо в одному файлі міститься кілька сторінок стосунків, то ці сторінки треба якось ув'язати. Використання посилань і покажчиків є проблематичним, тому вводять керуючі структури - зв'язування сторінок. Використовує непряме індексування сторінок одного відношення на основіПо-дерев.

Мова SQL. Функції та основні можливості

1. Можливість у запиті групувати кортежі відносин результату за вказаними полями відповідно до умов вибірки на всю групу цілком.

2. У SQL не обов'язково видалятикортежі-дублікати як у результаті, і у проміжному кортежі. Результатом виконання запиту SQL є мультимножинний кортеж. У СУБД System R було реалізовано все теоретикомножественные оператори.

У System R реалізовано 4 оператори маніпулювання даними та 2 оператори створення подання.

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

Визначення обмеження цілісності та тригерів

У System R засоби підтримки цілісності БД – це asserHon (виключення) – логічний вираз, вип-е над всією БД, хибність якого говорила про нецілісність БД. Обмеження цілісності ділилися на 2 класи:

1. перевіряється після виконання оператора маніпулювання (транзакції)

2. на вимогу спеціального оператора INFORCE INTEGRITY

Типи предикатів відрізнялися цих груп. У System R було вперше реалізовано механізм тригерів, які служили автоматичного підтримки цілісності БД. При визначенні тригера ставилася умова його застосування, і за умови true тригер спрацьовував.

Подання БД

Для визначення уявлень використовується апарат операторів вибірки.

Визначення керуючих структур

Визначення керуючих структур представляє індекси та зв'язки. У SQL з'явилося чітке уявлення про те, як представляти індекси та зв'язки.

Основні оператори:

GRANT – «Дозволити

REVOKE - "зібрати" права

Точки збереження та відкату транзакцій. Вбудований SQL

Вбудований SQL – це спеціальні оператори, які підтримують можливість виконання SQL операторів традиційними мовами програмування.

ESQL/C – мова З можливістю написання запитів.

Основна проблема із вбудовуванням – проблема сполученості декларованих та процедурних мов програмування.

Проблема доступу до кортежу в процедурних мовах була вирішена шляхом використання механізму «курсора», який є вказівником на кортеж.

Основні оператори над курсорами: OPEN CURSOR

Динамічний SQL

Механізм, що дозволяє виконувати оператори SQL на етапі компіляції.

1. Обмеження унікальності(Не більше одного первинного ключа)

3. Перевірочне обмеження(специфікує умову, якій має задовольняти кожен рядок таблиці)

Визначення уявлень.

Механізм уявлень view є сильним засобом SQL, що дозволяє приховати від користувача реальну структуру БД, рахунок по суті зберігається в основі запиту з іменованими стовпцями.

Для користування view (або уявлення) нічого не відрізняється від базової таблиці. Подання реально накладається на таблицю щоразу на момент виконання.

Стандарт SQL-89, механізм уявлень визначається так:

::=

CREATE VIEW

[()] AS

< view column list>::= [{}]

Звісно ж деяка таблиця, яка змінюється, тобто. до неї застосовуються оператори DELETE або UPDATE тільки в тому випадку, якщо виконуються такі операції запитів:

1. не вказано ключове слово DISTINCT

2. кожне арифметичний виразу списку вибірки є однією специфікацією стовпця

3. у розділі FROM вказано одну таблицю

4. у розділі WHERE немає підзапитів

5. немає розділів GROUP BY HAVING

Вимога WITH CHECK OPTION має сенс у разі зміненого уявлення з розділом WHERE. Ця вимога забороняє появу в базовій таблиці рядків, які не видно в поданні (тобто ті рядки, які не задовольняють умові WHEREу запитах).

Визначення привілеїв.

У стандарті SQL-89 роздача привілеїв можлива тільки при визначенні таблиці. Користувач, який отримав привілеї від іншого користувача, може їх передати далі лише при визначенні схеми.

Привілеї визначаються так:

< privilege definition >::=

GRAND ON

TO

[g, grante 3…] ::= ALL PRIVILEGES | [{,}..]

::= SELECT | UPTDATE | INSERT | DELETE | REFERENCES [ ]

::= PUBLICK |

Засоби маніпулювання даними.

Структура запитів.

::= []

::= | UNION

::= | ()

::=(SELECT

)

INTO

::= SELECT

::= [] [] [] []

Мова SQL має на увазі 3 типи конструкцій SELECT:

1. cursor specification

2. select statement

3. subquery

table expression – основа всіх синтаксичних конструкцій.

1. Специфікація курсору – курсор конструктора SQL, що дозволяє отримати рядковий доступ до результатів виконання запиту в БД. До табличних виразів, що у специфікації курсора, особливих вимог не пред'являється.

Надіслати свою гарну роботу до бази знань просто. Використовуйте форму нижче

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

План

Вступ………………………………………………...…………………………3

Глава I. Теоретичні відомості про мову запитів SQL……………...………..4

1.1. Поняття про реляційну базу даних…………………………..…………4

1.2. Поняття про SQL-мови…………………………………………...………...10

1.3. Інтерактивний і вкладений SQL……………………………...……….12

1.4. Субпідрозділи SQL……………………………………………...……13

1.5. Типи даних………………………………………………………...…….13

1.6. SQL-неузгодженості……………………………………………...…...16

Розділ II. Використання мови SQL для отримання інформації……………18

2.1. Створення запиту………………………………………………………...….18

2.2. Команда SELECT……………………………………………………...…….19

2.3. Команда DISTINCT..……………………………………………………......22

2.4. Пропозиції команд……………………………………………………….24

Заключение…………………………………………………………………...…..27

Список використаної литературы……………………………………..…….28

Вступ

Більшість сучасних СУБД побудовано на реляційній моделі даних. Для отримання інформації з відносин (таблиць) бази даних як мови маніпулювання даними в теоретичному плані використовуються три абстрактні мови: мова реляційної алгебри; мова реляційного обчислення на кортежах; мова реляційного числення на доменах.

Як практична мова роботи з даними в середині 70-х років фірмою IBM розроблено мову структурних запитів SQL, що згодом став стандартом de-facto при роботі з базами даних. Перехід до великих корпоративних СУБД типу Oracle, Informix, Sybase, DB2, Progress, що намітився в даний час, робить актуальним вивчення мови SQL як у практичному плані, так і суто теоретично, оскільки в основі елементів мови SQL лежать положення теорії відносин, теорії множин і логіки.

Мета курсової роботи – аналіз можливостей мови SQL.

Для досягнення поставленої мети необхідно вирішити такі завдання:

· Вивчити літературу на тему;

· Розглянути структуру SQL;

· Визначити специфікацію та стандарти мови;

· Вивчити застосування SQL для отримання інформації.

ГлаваI. Теоретичні відомості про мову запитівSQL

1.1. Поняття про реляційну базу даних

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

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

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

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

Стандарт SQL визначається ANSI (Американським Національним Інститутом Стандартів) і зараз також приймається ISO (Міжнародною організацією зі стандартизації). Однак більшість комерційних програм баз даних розширюють SQL без повідомлення ANSI, додаючи різні інші особливості в цю мову, які, як вони вважають, будуть дуже корисними. Іноді вони дещо порушують стандарт мови, хоча хороші ідеї мають тенденцію розвиватися і незабаром ставати стандартами "ринку" власними силами через корисність своїх якостей.

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

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

На прикладі адресної книги можна розпочати обговорення бази даних, яка може реально використовуватися в діловій ситуації. Припустимо, що персонажі у першій таблиці (адресної книги) – це пацієнти лікарні. В іншій таблиці ми могли б запам'ятати додаткову інформацію про цих пацієнтів. Стовпці другої таблиці могли б бути позначені як Пацієнт, Лікар, Страховка, і Баланс.

Багато потужних функцій можна виконати витягуючи інформацію з цих таблиць згідно з зазначеними параметрами, особливо коли ці параметри включають фрагменти інформації пов'язані в різних таблицях один з одним. Наприклад, візьмемо – лікарів. Припустимо, доктор Halben захотів отримати номери телефонів усіх своїх пацієнтів. Щоб отримати цю інформацію, він міг би пов'язати таблицю з номерами телефонів пацієнтів (за адресною книгою) з таблицею, яка б вказувала, який із пацієнтів – його. Хоча, в цьому простому прикладі, він міг би пам'ятати і відразу отримувати номери телефонів пацієнтів Grillet і Brock, ці таблиці можуть бути занадто великими і занадто складними. Програми реляційної бази даних розроблялися у тому щоб обробляти великі і складні сукупності даних такого типу, що є більш універсальним методом у діловому світі. Навіть якби база даних лікарні містила сотні або тисячі імен - як це ймовірно і буває на практиці - одна команда SQL могла б видати доктору Halben інформацію, якої він потребував майже негайно.

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

Розглянемо другу таблицю. Іноді необхідно бачити цю інформацію впорядкованою в алфавітному порядку за іменами, іноді у зростаючому чи спадному порядку, а іноді згрупованою по відношенню до якогось лікаря. Накладення порядку набору в рядках стикається зі здатністю замовника змінювати його, тому рядки завжди розглядаються як невпорядковані. З цієї причини, ви не можете просто сказати: "Ми хочемо подивитися п'ятий рядок таблиці." Нехтуючи порядком, в якому дані вводилися або будь-яким іншим критерієм, ми визначимо, не той рядок, хоча він і буде п'ятим. Рядки таблиці, які розглядаються, не будуть у певній послідовності.

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

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

Первинні ключі таблиці є важливим елементом у структурі бази даних. Вони – основа вашої системи запису у файл; і коли ви хочете знайти певний рядок у таблиці, ви посилаєтеся до цього первинного ключа. Крім того, первинні ключі гарантують, що ваші дані мають певну цілісність. Якщо первинний ключ правильно використовується і підтримується, ви знатимете, що немає порожніх рядків таблиці і що кожен рядок відрізняється від будь-якого іншого рядка.

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

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

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

Таблиця 1.1 - Продавці

Таблиця 1.2 – Замовники

Таблиця 1.3 - Порядки

Наприклад, поле snum у таблиці Замовників вказує, якому продавцю призначено цього замовника. Номер поля snum пов'язаний із таблицею Продавців, яка дає інформацію про цих продавців. Очевидно, що продавець якому призначені замовники має вже існувати - тобто значення snum з таблиці Замовників має також бути представлене в таблиці Продавців. Якщо це так, то кажуть, що "система перебуває у стані довідкової цілісності"

Розглянемо ці три таблиці та значення їх полів.

Тут показані стовпці Таблиці 1.1

Таблиця 1.2 містить такі стовпці:

І є стовпці в Таблиці 1.3:

1.2. Поняття проSQL-Мові

SQL це мова, орієнтована спеціально на реляційні бази даних. Він усуває багато роботи, яку ви повинні були б зробити, якби ви використовували універсальну мову програмування, наприклад, C. Щоб сформувати реляційну базу даних на C, вам необхідно було б почати з самого початку. Ви повинні були б визначити об'єкт - званий таблицею, яка могла б рости, щоб мати будь-яке число рядків, а потім створювати поступово процедури для розміщення значень у неї та вилучення з них. Якби ви захотіли знайти деякі певні рядки, вам необхідно було б виконати по кроках процедуру, подібну до наступної:

Розгляньте рядок таблиці.

Виконайте перевірку - чи є цей рядок одним із рядків, який вам потрібний.

Якщо це так, збережіть її десь поки вся таблиця не буде перевірена.

Перевірте, чи є інші рядки в таблиці.

Якщо є, поверніться на крок 1.

Якщо рядків більше немає, вивести всі значення, збережені в кроці 3.

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

Стандарт SQL визначається за допомогою коду ANSI (Американський Національний Інститут Стандартів). SQL не винаходив ANSI. Це, по суті, винахід IBM. Після того, як з'явився ряд конкуруючих програм SQL на ринку, ANSI визначив стандарт, до якого вони повинні бути наведені (визначення таких стандартів і є функцією ANSI).

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

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

Команди або пропозиції є інструкціями, якими ми звертаємося до SQL бази даних. Команди складаються з однієї або більше окремих логічних частин, які називаються пропозиціями. Пропозиції починаються ключовим словом для якого вони є найменованими, і складаються з ключових слів та аргументів. Наприклад пропозиції з якими ми можемо стикатися - це "FROM Salespeople" та "WHERE city = "London".

Аргументи завершують чи змінюють значення пропозиції. У прикладах вище, Salespeople – аргумент, а FROM – ключове слово пропозиції FROM.

Аналогічно, " city = " London " " - аргумент пропозиції WHERE. Об'єкти - структури у базі даних яким дано імена та зберігаються у пам'яті.

Вони включають базові таблиці, уявлення (два типи таблиць), і індекси.

1.3. Інтерактивний та вкладенийSQL

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

Вкладений SQL складається з команд SQL, розміщених усередині програм, які зазвичай написані деякою іншою мовою (типу КОБОЛА або Паскаля).

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

1.4. СубпідрозділиSQL

І в інтерактивній, і у вкладеній формах SQL є численні частини, або субпідрозділи.

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

DDL (Мова Визначення Даних) - так звана Мова Опису Схеми в ANSI, складається з команд, які створюють об'єкти (таблиці, індекси, перегляди, і так далі) у базі даних.

DML (Мова Маніпулювання Даними) - це набір команд, які визначають, які значення представлені в таблицях у будь-який момент часу.

DCD (Мова Управління Даними) складається із засобів, які визначають, чи дозволити користувачеві виконувати певні дії чи ні. Вони є складовими частинами DDL у ANSI. Це не різні мови, а розділи команд SQL згрупованих за їх функціями.

1.5. Типи даних

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

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

Усі значення у цьому полі повинні мати однаковий тип. У таблиці Замовників, наприклад cname і city - містять рядки тексту для оцінки, snum, і cnum - це вже номери. З цієї причини, ви не можете ввести значення Highest (Найвищий) або None (Ніякий) у полі rating, яке має числовий тип даних. Це обмеження успішне, оскільки воно накладає деяку структурність на ваші дані. Ви часто порівнюєте деякі або всі значення в даному полі, тому ви можете виконувати дію тільки на певних рядках, а не на всіх. Ви не можете зробити це, якби значення полів мали змішаний тип даних.

На жаль, визначення цих типів даних є основною областю, в якій більшість комерційних програм баз даних та офіційний стандарт SQL не завжди збігаються. ANSI SQL стандарт розпізнає лише текст і тип номера, тоді як більшість комерційних програм використовують інші спеціальні типи. Такі як DATA (ДАТА) і TIME (ЧАС) - фактично майже стандартні типи (хоча точний формат їх змінюється). Деякі пакети також підтримують такі типи, як MONEY (ГРОШІ) і BINARY (ДВОЇЧНІ). (MONEY - це спеціальна система обчислення, що використовується комп'ютерами. Вся інформація в комп'ютері передається двійковими числами і потім перетворюються на інші системи, щоб ми могли легко використовувати їх і розуміти).

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

Складність числових типів ANSI можна, по крайнього заходу частково, пояснити зусиллям зробити вкладений SQL, сумісним із низкою інших мов.

Два типи чисел ANSI, INTEGER (ЦЕЛЕ ЧИСЛО) і DECIMAL (ДЕСЯТИЧНЕ ЧИСЛО) (які можна скорочувати як INT і DEC, відповідно), будуть адекватні для наших цілей, так само як і для більшості практичних ділових прикладних програм. Природно, що тип ЦІЛЕ можна уявити як ДЕСЯТИЧНЕ ЧИСЛО, яке містить ніяких цифр праворуч від десяткової точки.

Тип для тексту – CHAR (або СИМВОЛ), який відноситься до рядка тексту. Поле типу CHAR має певну довжину, яка визначається максимальною кількістю символів, які можуть бути введені в поле.

Найбільше реалізацій також мають нестандартний тип званий VARCHAR (ЗМІННЕ ЧИСЛО СИМВОЛІВ), який є текстовим рядком, який може мати будь-яку довжину до певного реалізацією максимуму (зазвичай 254 символи). CHARACTER і VARCHAR значення включаються в одиночні лапки як "текст". Відмінність між CHAR та VARCHAR у тому, що CHAR повинен резервувати достатню кількість пам'яті для максимальної довжини рядка, а VARCHAR розподіляє пам'ять, оскільки це необхідно.

Символьні типи складаються із усіх друкованих символів, включаючи числа.

Однак, номер 1 не те саме, що символ "1". Символ "1" - лише інший друкований фрагмент тексту, який не визначається системою як наявність числового значення 1.

Наприклад 1 + 1 = 2, але "1" + "1" не дорівнює "2".

Символьні значення зберігаються в комп'ютері як двійкові значення, але вони відображаються як друкований текст. Перетворення слідує за форматом, що визначається системою, яку ви використовуєте. Цей формат перетворення буде одним із двох стандартних типів (можливо з розширеннями), що використовуються в комп'ютерних системах: в ASCII коді (використовується у всіх персональних і малих комп'ютерах) та EBCDIC коді (Розширеному Двійково-Десятичному Коді Обміну Інформації) (використовується у великих комп'ютерах). Певні операції, такі як впорядкування в алфавітному порядку значень поля, змінюватимуться разом із форматом.

1.6. SQLнеузгодженості

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

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

SQL слідує цьому прикладу. Дії в більшості середовищ SQL приведені до спеціального доступного Ідентифікатора, який точно відповідає певному користувачеві. Таблиця або інший об'єкт належить користувачеві, який має повну владу. Користувач може або не може мати привілеї, щоб виконувати дію над об'єктом.

Спеціальне значення - USER (КОРИСТУВАЧ) може використовуватися як аргумент у команді. Воно вказує на доступний Ідентифікатор користувача, який видав команду.

Висновки на чолі I:

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

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

ГлаваII. Використання мовиSQLдля отримання інформації з таблиць

2.1. Створення запиту

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

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

Запити зазвичай розглядаються як частина мови DML. Однак, оскільки запит не змінює інформацію в таблицях, а просто показує її користувачу, ми будемо розглядати запити як самостійну категорію серед команд DML, які здійснюють дію, а не просто показують зміст бази даних.

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

2.2. ДоомандаSELECT

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

SELECT snum, sname, sity, comm

FROM Salespeople;

Висновок для цього запиту відображається в таблиці 2.1.

Таблиця 2.1 – Команда SELECT

SQL Execution Log

SELECT snum, sname, sity, comm FROM Salespeople;

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

Є пояснення кожної частини цієї команди:

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

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

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

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

У деяких системах похильна риса вліво (\) у рядку є індикатором кінця команди.

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

Використання повернення (Клавіша ENTER) є довільним. Потрібно точно встановити, як зручніше скласти запит, у кілька рядків або в один рядок, таким чином:

SELECT snum, sname, city, comm FROM Salespeople;

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

Зірочка (*) може застосовуватися для виведення повного списку стовпців таким чином:

FROM Salespeople;

Це призведе до того ж результату, що й попередня команда.

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

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

SELECT sname, comm

FROM Salespeople;

робитиме висновок, показаний у Таблиці 2.2:

Таблиця 2.2 – Вибір певних стовпців

SQL Execution Log

SELECT snum, comm FROM Salespeople;

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

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

SELECT odate, snum, onum, amt

Висновок цього запиту показано у Таблиці 2.3.

Таблиця 2.3 – Реконструкція стовпців

SQL Execution Log

SELECT odate, snum, onum, amt FROM Orders;

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

2.3. КомандаDISTINCT

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

для отримання висновку, показаного в Таблиці 2.4.

Таблиця 2.4 - SELECT із дублюванням номерів продавців

SQL Execution Log

SELECT snum FROM Orders;

Для отримання списку без дублікатів, для зручності читання, можна ввести наступне:

SELECT DISTINCT snum

Висновок для цього запиту наведено в Таблиці 2.5.

Іншими словами, DISTINCT стежить за тим, які значення були раніше, так що вони не були продубльовані в списку. Це корисний спосіб уникнути надмірності даних. Щоб не втратити деякі дані, не потрібно використовувати DISTINCT безоглядно, тому що це може приховати якусь проблему або якісь важливі дані.

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

Таблиця 2.5 – SELECT без дублювання

SQL Execution Log

SELECT DISTINCT snum FROM Orders;

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

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

2.4. Пропозиції команд

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

WHERE - пропозиція команди SELECT, яка дозволяє встановлювати предикати, умова яких може бути вірною або невірною для будь-якого рядка таблиці. Команда витягує ті рядки з таблиці для якої таке твердження правильне. Наприклад, нам потрібно бачити імена та комісійні всіх продавців у Лондоні. Можна ввести таку команду:

SELECT sname, city

FROM Salespeople;

WHERE city = "LONDON";

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

Висновок для вищезазначеного запиту наведено в Таблиці 2.6.

Таблиця 2.6 - SELECT з пропозицією WHERE

SQL Execution Log

SELECT sname, city FROM Salespeople WHERE city = "London"

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

WHERE rating = 100;

Поодинокі лапки не використовуються тут тому, що оцінка – це числове поле. Результати запиту наведено в Таблиці 2.7.

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

Таблиця 2.7 - SELECT із числовим полем у предикаті

SQL Execution Log

SELECT * FROM Customers WHERE rating = 100;

Увисновки на чолі II:

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

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

Висновок

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

Мова SQL зазвичай використовується разом з універсальними мовами програмування Сі, Паскаль та ін, або мовами управління базами даних Fox, dBASE IV та ін.

переліквикористаноюлітератури

1. Ф. Андон, В. Резніченко Мова запитів SQL: Навчальний курс. – СПб: Пітер, 2006.

2. К. Дейт Посібник з реляційної СУБД DB2. - М.: Фінанси та статистика, 1988. - 320 с.

3. В.В. Кирилів Основи проектування реляційних баз даних. Навчальний посібник. - СПб.: ІТМО, 1994. - 90 с.

4. М. Мейєр Теорія реляційних баз даних. - М: Мир, 1987. - 608 с.

5. Розподілені СУБД. Informix. Ч.1. Основи роботи з базами даних – Методичні вказівки для виконання лабораторних робіт/В.М. Стасишин – Новосибірськ: НДТУ, 1995.

6. Дж. Ульман Бази даних на Паскалі. - М: Машинобудування, 1990. - 386 с.

Подібні документи

    Загальні дані про основних операторів мови SQL. Інтерактивний режим роботи. Використання мови SQL для вибору інформації з таблиць, для вставки, редагування та видалення даних у них. Зв'язок між операціями реляційної алгебри та операторами мови SQL.

    реферат, доданий 06.02.2015

    Поняття та загальна характеристика мови програмування РНР, принципи та етапи його роботи, синтаксис та асоційовані масиви. Обробка винятків у мові Java. Робота з базами даних за допомогою JDBC. Вивчення порядку розробки графічного інтерфейсу.

    презентація , доданий 13.06.2014

    Поняття реляційної моделі даних, цілісність її сутності та посилань. Основні етапи створення бази даних, зв'язування таблиць на схемі даних. Проектування бази даних книжкового каталогу "Books" за допомогою СУБД Microsoft Access та мови запитів SQL.

    курсова робота , доданий 25.11.2010

    Загальні відомості про історію створення та стандарти SQL: міжнародний стандарт 1989, 1992 (SQL2), стандарт SQL: 1999 (SQL3). Інтерактивний та вкладений SQL. Субпідрозділи SQL. Структурована мова запитів для створення та зміни таблиць.

    реферат, доданий 14.10.2011

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

    реферат, доданий 29.03.2012

    Теоретичні відомості та основні поняття баз даних. Системи управління базами даних: склад, структура, безпека, режими роботи, об'єкти. Робота з базами даних OpenOffice.Org BASE: створення таблиць, зв'язків, запитів за допомогою майстра запитів.

    курсова робота , доданий 28.04.2011

    Відмінність між існуючими діалектами SQL. Стандартизація мови SQL. Концепція бази даних. Ефективність організації даних. Структура мови SQL. Наближені числові типи. Інтервальний тип даних. Обробка складно структурованої інформації.

    курсова робота , доданий 29.05.2014

    Загальні відомості про системи керування базами даних MS Access. Використання мови QBE для створення запитів на вибір даних. Параметричні та перехресні запити. Запити з автопідстановкою, на вибірку дублікатів та записів, що не мають відповідності.

    курсова робота , доданий 03.06.2015

    Проектування реляційної бази даних за допомогою прикладного програмного засобу MS ACCESS. Опис особливостей використання запитів для вилучення, зміни та видалення інформації з бази даних. Характеристика структури користувача інтерфейсу.

    курсова робота , доданий 19.11.2012

    Аналіз предметної галузі з використанням моделей методології ARIS та розробка ER-діаграми. Опис вхідної та вихідної інформації для проектування реляційної бази даних. Розробка керуючих запитів та зв'язків між ними за допомогою мови SQL.

  • Переклад
  • Tutorial
Потрібно "SELECT * WHERE a = b FROM c" або "SELECT WHERE a = b FROM c ON *"?

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


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


SELECT members.firstname || " " || members.lastname AS "Full Name" FROM borrowings INNER JOIN members ON members.memberid=borrowings.memberid INNER JOIN books ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN(SELECT bookid FROM books ) FROM books)) GROUP BY members.firstname, members.lastname;

Буе! Таке злякає будь-якого новачка або навіть розробника середнього рівня, якщо він бачить SQL вперше. Але не все так погано.


Інтуїтивно зрозуміло, і за допомогою цього посібника я сподіваюся знизити поріг входу в SQL для новачків, а вже досвідченим запропонувати по-новому поглянути на SQL.


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

1. Три чарівні слова

У SQL багато ключових слів, але SELECT , FROM і WHERE є практично у кожному запиті. Трохи пізніше ви зрозумієте, що ці три слова є найбільш фундаментальними аспектами побудови запитів до бази, а інші, складніші запити, є лише надбудовами над ними.

2. Наша база

Давайте поглянемо на базу даних, яку ми будемо використовувати як приклад у цій статті:







У нас є книжкова бібліотека та люди. Також є спеціальна таблиця для обліку виданих книг.

  • У таблиці "books" зберігається інформація про заголовок, автора, дату публікації та наявність книги. Все просто.
  • У таблиці "members" - імена та прізвища всіх людей, що записалися в бібліотеку.
  • У таблиці "borrowings" зберігається інформація про взяті з бібліотеки книги. Колонка bookid відноситься до ідентифікатора взятої книги в таблиці "books", а колонка memberid відноситься до відповідної людини з таблиці "members". Ми також маємо дату видачі та дату, коли книгу потрібно повернути.

3. Простий запит

Почнемо з простого запиту: нам потрібні іменаі ідентифікатори(id) всіх книг, написаних автором “Dan Brown”


Запит буде таким:


SELECT bookid AS "id", title FROM books WHERE author="Dan Brown";

А результат таким:


id title
2 The Lost Symbol
4 Inferno

Досить просто. Давайте розберемо запит, щоб зрозуміти, що відбувається.

3.1 FROM - звідки беремо дані

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


FROM вказує на таблицю, за якою потрібно робити запит. Це може бути вже існуюча таблиця (як у прикладі вище) або таблиця, створювана на льоту через з'єднання або підзапити.

3.2 WHERE – які дані показуємо

WHERE просто поводиться як фільтр рядківми хочемо вивести. У нашому випадку ми хочемо бачити лише ті рядки, де значення в колонці author - це Dan Brown.

3.3 SELECT – як показуємо дані

Тепер, коли у нас є всі потрібні колонки з потрібної нам таблиці, потрібно вирішити, як саме показувати ці дані. У нашому випадку потрібні лише назви та ідентифікатори книг, тож саме це ми і оберемоза допомогою SELECT. Заодно можна перейменувати колонку використовуючи AS.


Весь запит можна візуалізувати за допомогою простої діаграми:


4. З'єднання (джойни)

Тепер ми хочемо побачити назви (не обов'язково унікальні) всіх книг Дена Брауна, які були взяті з бібліотеки, і коли ці книги треба повернути:


SELECT books.title AS "Title", borrowings.returndate AS "Return Date" FROM borrowings JOIN books ON borrowings.bookid=books.bookid WHERE books.author="Dan Brown";

Результат:


Title Return Date
The Lost Symbol 2016-03-23 00:00:00
Inferno 2016-04-13 00:00:00
The Lost Symbol 2016-04-19 00:00:00

Здебільшого запит схожий на попередній за виняткомсекції FROM. Це означає, що ми запитуємо дані з іншої таблиці. Ми не звертаємось ні до таблиці “books”, ні до таблиці “borrowings”. Натомість ми звертаємося до нової таблиці, що утворилася з'єднанням цих двох таблиць.


borrowings JOIN books ON borrowings.bookid=books.bookid - це, вважай, нова таблиця, яка була сформована комбінуванням всіх записів з таблиць "books" та "borrowings", в яких значення bookid збігаються. Результатом такого злиття буде:



А потім ми запитуємо до цієї таблиці так само, як у прикладі вище. Це означає, що при з'єднанні таблиць потрібно дбати лише про те, як провести це з'єднання. А потім запит стає таким самим зрозумілим, як у випадку із «простим запитом» з пункту 3.


Спробуємо трохи складніше з'єднання з двома таблицями.


Тепер ми хочемо отримати імена та прізвища людей, які взяли з бібліотеки книги автора Dan Brown.


На цей раз давайте підемо знизу вгору:


Крок Step 1- Звідки беремо дані? Щоб отримати потрібний нам результат, потрібно з'єднати таблиці “member” та “books” із таблицею “borrowings”. Секція JOIN виглядатиме так:


borrowings JOIN books ON borrowings.bookid=books.bookid JOIN members ON members.memberid=borrowings.memberid

Результат з'єднання можна побачити за посиланням.


Крок 2- Які дані показуємо? Нас цікавлять лише ті дані, де автор книги – “Dan Brown”


WHERE books.author="Dan Brown"

Крок 3- Як показуємо дані? Тепер, коли дані отримані, потрібно просто вивести ім'я та прізвище тих, хто взяв книги:


SELECT members.firstname AS "First Name", members.lastname AS "Last Name"

Супер! Залишилося лише об'єднати три складові і зробити потрібний нам запит:


SELECT members.firstname AS "First Name", members.lastname AS "Last Name" FROM borrowings JOIN books ON borrowings.bookid=books.bookid JOIN members ON members.memberid=borrowings.memberid WHERE books.author="

Що дасть нам:


First Name Last Name
Міке Willis
Ellen Horton
Ellen Horton

Чудово! Але імена повторюються (вони унікальні). Ми скоро це виправимо.

5. Агрегування

Грубо кажучи, агрегування потрібні для конвертації кількох рядків в один. При цьому під час агрегування для різних колонок використовується різна логіка.


Давайте продовжимо наш приклад, в якому з'являються імена, що повторюються. Видно, що Ellen Horton взяла більше за одну книгу, але це не самий кращий спосібпоказати цю інформацію. Можна зробити інший запит:


SELECT members.firstname AS "First Name", members.lastname AS "Last Name", count(*) AS "Number of books rowed" FROM borrowings JOIN books ON borrowings.bookid=books.bookid JOIN members ON members.memberid= .memberid WHERE books.author="Dan Brown" GROUP BY members.firstname, members.lastname;

Що дасть нам потрібний результат:


First Name Last Name Номер books borrowed
Міке Willis 1
Ellen Horton 2

Майже всі агрегації йдуть разом із виразом GROUP BY. Ця штука перетворює таблицю, яку можна було б отримати запитом у групи таблиць. Кожна група відповідає унікальному значенню (або групі значень) стовпчика, який ми вказали в GROUP BY . У нашому прикладі ми конвертуємо результат із минулого вправи до групи рядків. Ми також проводимо агрегування з count, яка конвертує кілька рядків у ціле значення (у нашому випадку це кількість рядків). Потім це значення приписується кожній групі.


Кожен рядок в результаті є результатом агрегування кожної групи.



Можна дійти логічного висновку, що всі поля в результаті повинні бути або вказані в GROUP BY , або за ними має здійснюватись агрегування. Тому що всі інші поля можуть відрізнятись один від одного в різних рядках, і якщо вибирати їх SELECT "ом", то незрозуміло, які з можливих значень потрібно брати.


У прикладі вище функція count обробляла всі рядки (оскільки ми вважали кількість рядків). Інші функції на кшталт sum чи max обробляють лише зазначені рядки. Наприклад, якщо ми хочемо дізнатися кількість книг, написаних кожним автором, то потрібен такий запит:


SELECT author, sum(stock) FROM books GROUP BY author;

Результат:


author sum
Robin Sharma 4
Dan Brown 6
John Green 3
Amish Tripathi 2

Тут функція sum обробляє лише колонку stock і рахує суму всіх значень у кожній групі.

6. Підзапити


Підзапити це звичайні SQL-запити, вбудовані у більші запити. Вони поділяються на три види за типом результату, що повертається.

6.1 Двовимірна таблиця

Є запити, які повертають кілька колонок. Хорошим прикладом є запит з минулого вправи з агрегування. Будучи підзапит, він просто поверне ще одну таблицю, за якою можна робити нові запити. Продовжуючи попередню вправу, якщо ми хочемо дізнатися кількість книг, написаних автором “Robin Sharma”, то одна з можливих способів- Використовувати підзапити:


SELECT * FROM (SELECT author, sum(stock) FROM books GROUP BY author) AS results WHERE author="Robin Sharma";

Результат:



Можна записати як: ["Robin Sharma", "Dan Brown"]


2. Тепер використовуємо цей результат у новому запиті:


SELECT title, bookid FROM books WHERE author IN (SELECT author FROM (SELECT author, sum(stock) FROM books GROUP BY author) AS results WHERE sum > 3);

Результат:


title bookid
The Lost Symbol 2
Who Will Cry When You Die? 3
Inferno 4

Це те саме, що:


SELECT title, bookid FROM books WHERE author IN ("Robin Sharma", "Dan Brown");

6.3 Окремі значення

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


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


Середню кількість можна отримати таким чином:


select avg(stock) from books;

Що дає нам:


7. Операції запису

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

7.1 Update

Синтаксис запиту UPDATE семантично збігається із запитом читання. Єдина відмінність у тому, що замість вибору колонок SELECT "ом, ми задаємо знання SET".


Якщо всі книги Дена Брауна загубилися, потрібно обнулити значення кількості. Запит для цього буде таким:


UPDATE books SET stock=0 WHERE author="Dan Brown";

WHERE робить те саме, що раніше: вибирає рядки. Замість SELECT , який використовувався під час читання, ми тепер використовуємо SET . Однак тепер потрібно вказати не тільки ім'я колонки, але й нове значення для цієї колонки у вибраних рядках.


7.2 Delete

Запит DELETE це просто запит SELECTабо UPDATE без назв колонок. Серйозно. Як і у випадку з SELECT і UPDATE, блок WHERE залишається таким самим: він вибирає рядки, які потрібно видалити. Операція видалення знищує весь рядок, тому немає сенсу вказувати окремі колонки. Отже, якщо ми вирішимо не обнулювати кількість книг Дена Брауна, а взагалі видалити всі записи, то можна зробити такий запит:


DELETE FROM books WHERE author="Dan Brown";

7.3 Insert

Мабуть, єдине, що відрізняється від інших типів запитів, це INSERT. Формат такий:


INSERT INTO x (a, b, c) VALUES (x, y, z);

Де a, b, c це назви колонок, а x, y і z це значення, які потрібно вставити в ці колонки, в тому самому порядку. Ось, у принципі, і все.


Погляньмо на конкретний приклад. Ось запит із INSERT , який заповнює всю таблицю "books":


INSERT INTO books (bookid,title,author,published,stock) VALUES (1,"Scion of Ikshvaku","Amish Tripathi","06-22-2015",2), (2,"The Lost Symbol"," Dan Brown","07-22-2010",3), (3,"Who Will Cry When You Die?","Robin Sharma","06-15-2006",4), (4,"Inferno" "Dan Brown", "05-05-2014",3), (5, "The Fault in our Stars", "John Green", "01-03-2015",3);

8. Перевірка

Ми добігли кінця, пропоную невеликий тест. Подивіться на запит на самому початку статті. Чи можете розібратися в ньому? Спробуйте розбити його на секції SELECT , FROM , WHERE , GROUP BY і розглянути окремі компоненти підзапитів.


Ось він у більш зручному для читання вигляді:


SELECT members.firstname || " " || members.lastname AS "Full Name" FROM borrowings INNER JOIN members ON members.memberid=borrowings.memberid INNER JOIN books ON books.bookid=borrowings.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books ) FROM books)) GROUP BY members.firstname, members.lastname;

Цей запит виводить список людей, які взяли з бібліотеки книгу, у якої загальна кількість вища за середнє значення.


Результат:


Full Name
Lida Tyler

Сподіваюся, вам удалося розібратися без проблем. Але якщо ні, то буду радий вашим коментарям та відгукам, щоб я міг покращити цей пост.

Теги: Додати теги

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

· Інтерактивний режим (використовується для створення питань користувача та отримання результатів в інтерактивному режимі).

· Вбудований режим (складається з команд SQL вбудованих всередину програм написаних іншою мовою програмування.)

Основу мови SQL складають оператори, розподілені між 3 компонентами цієї мови:

1. Мова маніпулювання даними – призначена для підтримки БД і включає оператори додавання, зміни, видалення та вибірки даних.

2. Мова визначення даних – призначений до створення зміни, видалення таблиць і всієї БД загалом.

3. Мова управління даних – призначений для забезпечення захисту від різноманітних пошкоджень (СУБД гарантує деякий захист автоматично).

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

Ключові слова у виразах на SQL можуть прописуватися як малими, так і великими, і літерами в один або кілька рядків. Кожен запит має закінчуватися «;». Зарезервовані словане можуть використовуватися як назва об'єктів БД.

Вибір даних з використання пропозиції Select.

Виберіть список_стовпцівз ім'я_таблиці.

Select * from товар where prise< 50000;

У конструкції, де можуть застосовуватися такі оператори:

2. IsNULL – вибираються всі рядки, що не мають значення у вказаному полі. select * fromTovarwheresrok_godisnull.

3. Between – дозволяє перевірити входження будь-якого значення діапазон визначається граничними значеннями. select * звідео,придбанняміж 100000 і 1000000.

4. In – перевіряє входження будь-якого значення до списку значень. Список значень вказується в круглих дужках, значення перераховуються через кому.

5. Like – відповідність – переглядає рядкові значення з метою визначення чи входить заданий в операторі likeрядок у символьний рядок поля, що перевіряється. select * fromTovarwherenamelike'ірис'; в операторі Like можуть використовуватися наступні символи для вказівки шаблону рядка:

А)? - Заміщає будь-який ОДИН символ

Б) * - допускає у вказаному місці наявність будь-якої послідовності символів.

Сортування даних у таблиці

Selectspisokfromimya_tabl orderbyім'я_стовпця . Якщо сортування проводиться за кількома стовпцями, їх вказуємо через кому. Ask - зростання, desc - зменшення. Select * fromTovarorderbyprice

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

Selectсписок_стовпцівfrомім'я_таблиціgroupbyстовпчик_угруповання.

Виберіть avg (price) з Tovar group by kod_proiz;

Selectсписок_стовпцівпро ім'я_таблиціgroupbyстовпчик_угрупованняhavingумова; (Угруповання за умовою).

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

Виберіть avg (price) from Tovar group by kod_proizv having kod_proizv=1 or kod_proizv=2;

Sportsman
Id
Fio
Pol
vozrASt
Club
sport

Select fio, sport, club from sportsman;

Select * from sportsman where vozrast<18;

Select * from sportsman where pol like 'ж*';

Select * from sportsman where club like 'спартак';

Select * from sportsman where vozrast between 18 and 25;

Select avg(vozrast) from sportsman where sport like 'волейбол';

Select count(fio) from sportsman group by club;

Select * from sportsman where vozrast>25;

Select count(fio) від спортсмен group by club having vozrast>25;

Вкладені запити

Select * from Tovar where kod_proiz in (select id from proizv where name like'А%');

Select avg(price) from Tovar where kod_proiz in (select id from proizv where country like 'Франція');

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

Напишіть назву, ціну, kol від Оцінка товару > 50000

select name, price,kol from Tovar where kod_proizv in (select id from proizv where country like 'Франція');

Маніпулювання даними

До операторів маніпулювання даними відносяться вставка (insert), оновлення (update) та видалення (delete).

Вставлення запису.

Insertintoім'я_таблиці[(поле1, …, полеn)] values ​​(значення1, …, значення n);

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

Insert into Tovar values ​​(1, 'шоколад', 100, 10500, '1 рік', 2);

Insertinto Tovar (id,name, price,kod_proizv values ​​(2,"bhbc",500,1));

Updateім'я_таблиціsetзначення_стовпця=значення ;

updateзастосовується до всіх записіві якщо немає where, якщо whereприсутня то updasteзастосовується до записів задовольняючих умов.

Update Tovar set kol=kol+100;

Update Tovar set price=price*2 де kod_proizin(select id from proizvwhere country like 'Франція');

Delete from имя_таблицы;

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

Delete from Tovar where srok_god is NULL;

Delete from proiz where license like '%2012';

Організація даних у InterBase. Робота з доменами та таблицями.

Типи даних SQL:

Символьні типи даних:

1. char - один символ

2. char(n) –символьний рядок фіксованої довжини, де n – довжина рядка. Для зберігання таких даних завжди приділяється n байт незалежно від реальної довжини.

3. varchar(n) – символьний рядок змінної довжинидля зберігання даних цього типу відводиться число байт відповідне реальній довжині рядка.

Цілочисленні дані:

1.integer/int – (-2147483647 - +2147483648) для зберігання цілих даних відводиться, як правило, 4 байти з вказаним діапазономзначень.

2. smallint - (-32767 - +32768) коротке ціле для зберігання якого відводиться 2 байти.

Речові типи дані:

1. float- речовий тип даних для зберігання якого відводиться 8 байт.

2. smallfloat – для зберігання даних відводиться 4 байти.

4. decimal(p,n)-аналогічний floatр - кількість значущих цифр, n – кількість цифр після коми.

Грошові типи даних:

1.money(p,n) – аналогічний типу даних decimal(p,n).Вводится лише у деяких СУБД, що з нього використовують спеціальні методи форматування.

Дата та час:

1. date – зберігання дати.

2. time – зберігання часу.

3. interval – зберігання часового інтервалу.

4. datetime – зберігання моментів часу (рік, місяць, число, години, хвилини, секунди, частки секунд).

Двійкові типи даних – дозволяє зберігати дані будь-якого обсягу у двійковому коді:

Для всіх типів даних є одне значення NULL, тобто. значення не визначено. Це значення має кожен елемент стовпця, доки не будуть внесені дані.

Створення БД при допомоги SQLзапитів.

Create database имя_БД;

Приклад: create database shop;

Drop database имя_БД;

Приклад: Drop database shop;

Роботастаблицями

Createtableім'я_таблиці (ім'я_полятип_поля, ...);

Create table proizvod (id int primary key, name varchar (20) no null, address varchar (30) no null, telvarchar (15) no null, country varchar (20) no null, license datetime);

Create table Tovar (id int primary key, name varchar (20) not null, kolsmallint not null, price int not null, srok_godvarchar(40) not null, kod_proizvint references proizvod (id));

Notnull – якщо вказано цю конструкцію, то елементи стовпця завжди повинні мати певне значення (не null)

Unique – значення кожного елемента стовпця має бути унікальним

Primarykey – стовпець є первинним ключем

Параметри Unique та Primarykey є взаємовиключними.

Referencesім'я_таблиці (ім'я_стовпця) - даний стовпецьє зовнішнім ключем, вказується ім'я таблиці і стовпець який він посилається.

Видалення таблиці

Droptable<имя_таблицы>;

Приклад: droptableTovar - видалення таблиці "товар"

Модифікація таблиці

Додавання стовпців до таблиці:

Altertable<имя_таблицы>

ADD (<имя_столбца>тип даних , …);

Alter table Tovar

Add (sostavvarchar (100) not null, opt_priceint not null);

Видалення стовпців з таблиці:

Altertable<имя_таблицы>

Drop (ім'я_рядку1б ім'я_рядку2, …);

Alter table Tovar

Drop (sostav, opt_price);

Зміна стовпців у таблиці

Altertable<имя_таблицы>

Modify (ім'я_стовпцатип_даних, ...);

Modify (srok_goddatetime not null);

Функціональні можливості мови SQL

Основні функціональні можливості мови SQL наведені нижче.

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

Створення бази даних. Для створення нової базиданих використовується оператор CREATE DATABASE. У структурі оператора вказується ім'я бази даних, що створюється.

Створення таблиць.Базова таблиця створюється з допомогою оператора CREATE TABLE. У цьому операторі вказуються імена полів, типи даних для них, довжина (для деяких типів даних). У SQL використовуються такі типи даних:

INTEGER – ціле число;

CHAR – символьне значення;

VARCHAR – символьне значення, зберігаються лише непусті символи;

DECIMAL – десяткове число;

FLOAT - число з плаваючою комою;

DOUBLE PRECISION – подвоєна точність з плаваючою точкою;

DATETIME – дата та час;

BOOL – булеве значення.

У операторі створення таблиці вказуються обмеження значення стовпців і таблицю. Можливі обмеження показані у табл. 4.8

Таблиця 4.8 Обмеження на визначені дані

Для реляційної моделі даних суттєвим є вказівки зовнішнього ключа (FOREIGNKEY). При оголошенні зовнішніх ключів необхідно накласти відповідні обмеження стовпець, наприклад, NOT NULL.

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

Не можна використовувати оператор створення таблиці кілька разів для однієї й тієї ж таблиці. Якщо після її створення виявилися неточності у її визначенні, то зміни можна внести за допомогою оператора ALTER TABLE. Цей оператор призначений для зміни структури існуючої таблиці: Ви можете видалити або додати поле до існуючої таблиці.

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

Вставка нових данихє процедурою додавання рядків до бази даних та виконується за допомогою оператора INSERT.

Модифікація данихпередбачає зміни значень в одному або кількох стовпцях таблиці та виконується за допомогою оператора UPDATE. Приклад:

SET сума = сума +1000.00

WHERE сума>0

Видалення рядківіз таблиці здійснюється за допомогою оператора DELETE. Синтаксис оператора має вигляд:

FROM таблиця

Пропозиція WHERE не є обов'язковою, проте, якщо її не включити, будуть видалені всі записи таблиці. Корисно використовувати оператор SELECT з тим же синтаксисом, що й оператор DELETE, щоб перевірити, які записи будуть видалені.

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

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

У SQL можна створювати вкладені послідовності запитів (підзапити). Існують певні типи запитів, які краще реалізовувати за допомогою підзапиту. До таких запитів належать звані перевірки існування. Припустимо, що потрібно отримати дані про студентів, які не мають оцінки «сім балів». Якщо буде повернена порожня множина, то це означає лише одне – у кожного студента є принаймні одна така оцінка.

Зв'язування таблиць. Оператори мови SQL дозволяють отримувати дані з більш ніж однієї таблиці. Одна з можливостей зробити це полягає у зв'язуванні таблиць по одному загальному полю.

В операторі SELECT має бути обмеження на збіг значень певного стовпця (поля). Тоді з пов'язаних таблиць будуть вилучатися ті рядки, у яких значення заданого стовпця збігаються. Назва стовпця вказується лише разом із назвою таблиці; інакше оператор буде неоднозначним.

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

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

Доступ до даних у розрахованому на багато користувачів середовищі регулюється за допомогою операторів GRANT і REVOKE. У кожному операторі необхідно вказати користувача, об'єкт (таблицю, подання), стосовно якого задаються повноваження, і повноваження. Наприклад, оператор GRANT задає користувачеві можливість проводити вибірку даних з таблиці ТОВАР:

GRANT SELECT ON ТОВАР TO X

Оператор REVOKE анулює всі надані раніше повноваження.

Вбудовування SQL у прикладні програми. Реальні програмизазвичай написані іншими мовами, що генерують код на мові SQL і передають їх у СУБД як тексту форматі ASCII.

Стандартом фірми IBM для SQL-продуктів регламентовано використання вбудованої мови SQL. При написанні прикладної програми її текст є сумішшю команд основної мови програмування (наприклад, C, Pascal, Cobol, Fortran, Assembler) і команд SQL зі спеціальним префіксом, наприклад. ExecSQL. Структура SQL-пропозицій розширена розміщення змінних основного мови в SQL-конструкции.



SQL-процесор видозмінює вигляд програми відповідно до вимог компілятора основної мови програмування. Функція компілятора полягає у трансляції (переклад) програми з вихідної мови програмування на мову, близьку до машинного. Після компіляції прикладна програма (додаток) є самостійним модулем.

Діалекти мови SQL

У сучасних реляційних СУБД для опису та маніпулювання даними використовуються діалекти мови SQL. Підмножина мови SQL, що дозволяє створювати та описувати БД, називається DDL (Data Definition Language).

Спочатку мова SQL називалася SEQUEL (Structured English Query Language), потім SEQUEL / 2, а потім просто - SQL. Сьогодні мова SQL - фактичний стандарт для реляційних СУБД.

Перший стандарт мови з'явився у 1989 р. – SQL-89 та підтримувався практично всіма комерційними. реляційними СУБД. Він мав загальний характері допускав широке тлумачення. Перевагами SQL-89 можна вважати стандартизацію синтаксису та семантики операторів вибірки та маніпулювання даними, а також фіксацію засобів обмеження цілісності бази даних. Однак у ньому був такий важливий розділ як маніпулювання схемою бази даних. Неповнота стандарту SQL-89 призвела до появи 1992г. Наступна версія SQL.

SQL2 (або SQL-92) охоплює практично всі необхідні проблеми: маніпулювання схемою бази даних, управління транзакціями та сесіями, підтримує архітектуру клієнт-сервер або засоби розробки додатків.

Подальшим кроком розвитку є варіант SQL 3. Ця версія мови доповнюється механізмом тригерів, визначенням довільного типу даних, об'єктним розширенням.

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

Таблиця 4.9 Діалекти мови SQL

СУБД Мова запитів
СУБД System R SQL
DB2 SQL
Access SQL
SYBASE SQL Anywhere Watcom-SQL
SYBASE SQL Server Transact_SQL
My SQL SQL
Oracle PL/SQL

В об'єктно-орієнтованих БД використовують мову об'єктних запитів OQL (Object Query Language). За основу мови OQL було взято команду SELECT мови SQL2 і додано можливість надсилати запит до об'єкта або колекції об'єктів, а також можливість викликати методи в рамках одного запиту.

Сумісність багатьох діалектів SQL обумовлює сумісність СУБД. Так, СУБД SYBASE SQL Anywhere максимально, наскільки це можливо для СУБД такого класу, сумісна з СУБД SYBASE SQL Server. Однією із сторін такої сумісності є підтримка в SYBASE SQL Anywhere такого діалекту мови SQL як Transact-SQL. Цей діалект використовується в SYBASE SQL Server і може застосовуватися в SYBASE SQL Anywhere поряд з власним діалектом мови SQL - Watcom-SQL.

Контрольні питання

1. Як можна класифікувати СУБД?

2. Які моделі баз даних існують?

3. Що основними елементами інфологічних моделей?

4. Які типи зв'язків між сутностями існують?

5. Що таке ER-діаграми та для чого вони використовуються?

6. Що дозволяє робити процедуру нормалізації таблиць?

7. Назвіть мовні та програмні засоби СУБД?

8. До якого типу належить СУБД MS Access?

9. Назвіть основні об'єкти СУБД MS Access?

10. Навіщо використовуються основні оператори мови SQL?