Imath wiki - мова sql, історія, базові оператори
Як вже говорилося, в 1970-х роках Едгар Кодд запропонував використовувати реляційну модель. Крім самої моделі, він так само запропонував мову для роботи з даними в рамках цієї моделі, названий DSL / Alpha. Згодом, на основі DSL / Alpha з'явилася мова SQUARE, а на його основі, в свою чергу, мова SEQUEL, який (зважаючи на деяку плутанину в торгових марках) був перейменований пізніше в SQL.
Результатом запиту SQL є таблиця (або, якщо завгодно, відношення), і більшість запитів оперують над відносинами. Можна говорити про те, що SQL в значній мірі показує реляционную алгебру.
Останнє зауваження. SQL історично не є акронімом, хоча його нерідко розшифровують як Structured Query Language. Новомосковскется або по буквах, або як "sequel" (сиквел).
Багато з вас знайомі з імперативними мовами програмування. SQL не є імперативною мовою, і зараз його прийнято відносити до декларативних. Інші декларативні мови - це, наприклад, різні мови розмітки, скажімо, HTML або XML.
Декларативність SQL полягає в тому, що, замість того, щоб вказувати, як досягти результату (як в імперативних мовах), ви вказуєте, якого результату треба досягти і на основі яких вхідних даних. Всю іншу роботу виконує компонент СУБД, званий оптимізатором.
На SQL досить складно писати "повні" програми - звичайно потрібно вбудовувати SQL-виклики в якийсь імперативний (або функціональний) мову.
Спочатку SQL був основним способом роботи користувача з базою даних і дозволяв виконувати наступний набір операцій:
- створення в базі даних нової таблиці;
- додавання в таблицю нових записів;
- зміна записів;
- видалення записів;
- вибірка записів з однієї або декількох таблиць (відповідно до заданого умовою);
- зміна структур таблиць.
Згодом SQL ускладнився - збагатився новими конструкціями, забезпечив можливість опису та управління новими збереженими об'єктами (наприклад, індекси, уявлення, тригери і процедури) - і став набувати рис, властиві мовам програмування загального призначення.
При всіх своїх змінах SQL залишається єдиним механізмом зв'язку між прикладним програмним забезпеченням і базою даних. У той же час сучасні СУБД, а також інформаційні системи, що використовують СУБД, надають користувачеві розвинені засоби візуального побудови запитів.
Кожна пропозиція SQL - це або запит даних з бази, або звернення до бази даних, яке призводить до зміни даних в базі. Розрізняють такі типи запитів, відповідно до змін, що відбуваються в базі даних в результаті їх виконання:
- запити на створення або зміна в базі даних нових або існуючих об'єктів (при цьому в запиті описується тип і структура створюваного або змінюваного об'єкта);
- запити на отримання даних;
- запити на додавання нових даних (записів);
- запити на видалення даних;
- звернення до СУБД.
В основному, всі вирази SQL мають наступний синтаксис:
Основним об'єктом зберігання реляційної бази даних є таблиця, тому всі SQL-запити - це операції над таблицями. Відповідно до цього, запити діляться на:
- запити, які оперують самими таблицями (створення і зміна таблиць);
- запити, які оперують з окремими записами (або рядками таблиць) або наборами записів.
Кожна таблиця описується в вигляді перерахування своїх полів (стовпців таблиці) із зазначенням
- типу збережених в кожному полі значень;
- зв'язків між таблицями (завдання первинних і вторинних ключів);
- інформації, необхідної для побудови індексів.
Запити першого типу в свою чергу діляться на запити, призначені для створення в базі даних нових таблиць, і на запити, призначені для зміни вже існуючих таблиць. Запити другого типу оперують з рядками, і їх можна розділити на запити наступного виду:
- вставка нового рядка;
- зміна значень полів рядка або набору рядків;
- видалення рядка або набору рядків.
Найголовніший вид запиту - це запит, який повертає (користувачеві) певний набір рядків, з яким можна здійснити одну з трьох операцій:
Таким чином використання SQL зводиться, по суті, до формування всіляких вибірок рядків і здійсненню операцій над усіма записами, що входять в набір.
Мова SQL представляє собою сукупність
- операторів,
- інструкцій,
- і обчислюваних функцій.
Переваги і недоліки
переваги
недоліки
Невідповідність реляційної моделі даних
Творці реляційної моделі даних Едгар Кодд, Крістофер Дейт і їх прихильники вказують на те, що SQL не є істинно реляційних мовою. Зокрема, вони вказують на такі дефекти SQL з точки зору реляційної теорії:
- SQL дозволяє в таблицях рядки-дублікати, що в рамках реляційної моделі даних неможливо і неприпустимо;
- SQL підтримує невизначені значення (NULL) і багатозначну логіку;
- SQL використовує порядок колонок і посилання на колонки за номерами;
- SQL дозволяє колонки без імені і дублюються імена колонок.
Складність Хоча SQL і замислювався як засіб роботи кінцевого користувача, врешті-решт він став настільки складним, що перетворився в інструмент програміста. Відхилення від стандартів Незважаючи на наявність міжнародного стандарту ANSI багато розробників СУБД вносять зміни в мову SQL, застосовуваний в розроблюваної СУБД, тим самим відступаючи від стандарту. Таким чином з'являються специфічні для кожної конкретної СУБД діалекти мови SQL.
У SQL існує чотири великі групи операторів.
Оператори управління схемою даних
це оператори, які можна створювати, редагувати і видаляти таблиці (відносини), бази даних, обмеження, індекси і т.п. а так само отримувати інформацію про існуючою схемою даних.
- CREATE створює об'єкт БД (саму базу, таблицю, уявлення, користувача і т. Д.),
- ALTER змінює об'єкт,
- DROP видаляє об'єкт;
це оператори, які дозволяють отримувати, створювати, змінювати і видаляти дані з створених таблиць.
- SELECT зчитує дані, що задовольняють заданим умовам,
- INSERT додає нові дані,
- UPDATE змінює існуючі дані,
- DELETE видаляє дані;
це оператори, що дозволяють налаштовувати СУБД, управляти дозволами, створювати користувачів, і т.п.
- GRANT надає користувачеві (групі) дозволу на певні операції з об'єктом,
- REVOKE відкликає раніше видані дозволи,
- DENY задає заборона, має пріоритет над вирішенням;
дозволяють визначати групи операцій, які можуть бути скасовані або вчинені тільки "все разом". Тобто при помилку однієї операції, автоматично скасовується вся транзакція.
- COMMIT застосовує транзакцію,
- ROLLBACK відкочується все зміни, зроблені в контексті поточної транзакції,
- SAVEPOINT ділить транзакцію на більш дрібні ділянки.
Розглянемо деякі з них більш детально.
Оператори управління схемою даних
Оператори створення елементів схеми в загальному називаються CREATE.
Оператори створення
Створення бази даних