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

Мова програмування

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

Мова була створена в 1970-х роках під назвою "SEQUEL" для системи управління базами даних (СУБД) System R. Пізніше вона була перейменована в "SQL", щоб уникнути конфлікту торгових марок. В 1979 SQL був вперше опублікований у вигляді комерційного продукту Oracle V2.

Перший офіційний стандарт мови було прийнято ANSI у 1986 році та ISO — у 1987. З того часу було створено ще кілька версій стандарту, деякі з них повторювали попередні з незначними варіаціями, інші набували нових суттєвих рис.

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

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

SQL складається з чотирьох окремих частин:

  1. мова визначення даних (DDL) використовується визначення структур даних, які у базі даних. Оператори DDL дозволяють створювати, змінювати та видаляти окремі об'єкти в БД. Допустимі типи об'єктів залежать від СУБД і зазвичай включають бази даних, користувачів, таблиці і ряд дрібніших допоміжних об'єктів, наприклад, ролі та індекси.
  2. Мова маніпуляції даними (DML) використовується для вилучення та зміни даних у БД. Оператори DML дозволяють вилучати, вставляти, змінювати та видаляти дані в таблицях. Іноді оператори вилучення даних не розглядаються як частина DML, оскільки вони не змінюють стан даних. Усі оператори DML мають декларативний характер.
  3. мова визначення доступу до даних (DCL) використовується контролю доступу до даних у БД. Оператори DCL застосовуються до привілеїв та дозволяють видавати та відбирати права на застосування певних операторів DDL та DML до певних об'єктів БД.
  4. мова управління транзакціями (TCL) використовується контролю обробки транзакцій в БД. Зазвичай оператори TCL включають commit для підтвердження змін, зроблених у ході транзакції, rollback для їх скасування та savepoint для розбиття транзакції на кілька менших частин.

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

Приклади:

Hello, World!:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Рядок 'Hello, World!' вибирається із вбудованої таблиці dual , що використовується для запитів, що не вимагають звернення до цих таблиць.

select "Hello, World!" from dual;

Факторіал:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

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

  • псевдостовпець level для створення псевдотаблиць t1 і t2 , що містять числа від 1 до 16,
  • агрегатну функцію sum , що дозволяє підсумовувати елементи множини без явного використання циклу,
  • і математичні функції ln і exp , дозволяють замінити твір (необхідне обчислення факторіалу) у сумі (надану SQL).

Рядок “0! = 1” не ввійде у набір рядків, отриманий результаті, т.к. спроба обчислити ln(0) призводить до виключення.

Числа Фібоначчі:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

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

  • формулу Біне та математичні функції ROUND, POWER та SQRT для обчислення n-ого числа Фібоначчі;
  • псевдостовпець level для створення псевдотаблиці t1, що містить числа від 1 до 16;
  • вбудовану функцію SYS_CONNECT_BY_PATH для впорядкованої конкатенації отриманих чисел.

SELECT REPLACE (MAX (SYS_CONNECT_BY_PATH (fib || ", ", "/")), "/", "") || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM (select n , round ((power ((1 + sqrt (5 )) * 0 . 5 , n ) - power) ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib from (select level n from dual connect by level<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Hello, World!:

Приклад для версій Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

select "Hello, World!" ;

Факторіал:

Приклад для версій Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Використовується рекурсивне визначення факторіалу, реалізоване через рекурсивний запит. Кожен рядок запиту містить два числові поля — n і n!, і кожен наступний рядок обчислюється з використанням даних з попереднього.

Можна обчислити цілочисленні факторіали лише до 20! При спробі вирахувати 21! з'являється помилка “Arithmetic overflow error”, тобто. відбувається переповнення розрядної сітки.

Для дійсних чисел обчислюється факторіал 100! (Для цього в прикладі необхідно замінити bigint на float у 3-му рядку)

Числа Фібоначчі:

Приклад для версій Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

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

Факторіал:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Цей приклад демонструє використання оператора model , доступного починаючи з версії Oracle 10g і дозволяє обробляти рядки запиту як елементів масиву. Кожен рядок містить два поля - номер рядка n та його факторіал f.

select n || "!=" || f factorial from dual model return all rows dimension by (0 d) measures (0 f, 1 n) rules iterate (17) , n [iteration_number] = iteration_number);

Числа Фібоначчі:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Цей приклад демонструє використання оператора model , доступного починаючи з версії Oracle 10g і дозволяє обробляти рядки запиту як елементів масиву. Кожен рядок містить два поля — саме число Фібоначчі та конкатенація всіх чисел, менших або рівних йому. Ітеративна конкатенація чисел у тому ж запиті, в якому вони генеруються, виконується простіше та швидше, ніж агрегація як окрема дія.

select max (s) || ", ..." from (select s from dual model return all rows dimension by ( 0 d ) measures ( cast (" " as varchar2 (200 )) s , 0 f ) rules iterate (16 ) ( f [ iteration_number ] = decode (iteration_number , 0 , 1 , 1 , 1 , f [ iteration_number - 1 ] + f [ iteration_number - 2 ]), s [ iteration_number ] = decode (iteration_number , 0 , to_char ( f [ iteration 1] ||", "||to_char(f[iteration_number])))));

Факторіал:

Приклад для версій MySQL 5

select concat (cast (t2 . n as char ), "! = " , cast (exp (sum (log (t1 . n ) ))) as char )) from ( select @ i : = @ i + 1 AS n from TABLE , (select @ i : = 0 ) as sel1 limit 16 ) t1 , ( select @ j : = @ j + 1 AS від TABLE , ( select @ j : = 0 ) as sel1 limit 16 ) t2 , де t1 . n<= t2 . n group by t2 . n

Числа Фібоначчі:

Приклад для версій MySQL 5

Замініть TABLE на будь-яку таблицю, до якої є доступ, наприклад mysql.help_topic .

select concat (group_concat (f separator ", "), ", ...") from (select @ f : = @ i + @ j as f , @ i : = @ j , @ j : = @ f from TABLE , (select @ i: = 1, @ j: = 0) sel1 limit 16) t

Hello, World!:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

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

begin dbms_output . put_line ("Hello, World!"); end;

Факторіал:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Цей приклад демонструє ітеративне обчислення факторіалу засобами PL/SQL.

declare n number: = 0; f number: = 1; begin while (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Числа Фібоначчі:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Цей приклад використовує ітеративне визначення чисел Фібоначчі. Вже обчислені числа зберігаються в структурі даних varray - аналог масиву.

declare type vector is varray (16 ) of number ; fib vector : = vector(); i number; s varchar2 (100); begin fib. extend (16); fib (1): = 1; fib (2): = 1; s: = fib (1) | "," || fib (2) || ","; for i in 3 .. 16 loop fib (i): = fib (i - 1) + fib (i - 2); s: = s || fib (i) || ","; end loop; dbms_output. put_line (s | | "..."); end;

Квадратне рівняння:

Приклад для версій Oracle 10g SQL, Oracle 11g SQL

Цей приклад тестувався в SQL*Plus, TOAD та PL/SQL Developer.

Чистий SQL дозволяє вводити змінні у процесі виконання запиту у вигляді змінних змінних. Для визначення такої змінної її ім'я (в даному випадку A, B та C) слід використовувати з амперсандом & перед ним щоразу, коли потрібно послатися на цю змінну. Коли запит виконується, користувач отримує запит на введення значень всіх змінних змінних, які були використані в запиті. Після введення значень кожне посилання на таку змінну замінюється її значення, і отриманий запит виконується.

Існує кілька способів ввести значення для змінних змінних. У цьому прикладі перше посилання на кожну змінну передує не одинарним, а подвійним амперсандом && . Таким чином значення для кожної змінної вводиться тільки один раз, а всі наступні посилання на неї будуть замінені тим самим значенням (при використанні одиночного амперсанда в SQL * Plus значення для кожного посилання на одну і ту ж змінну доводиться вводити окремо). У PL/SQL Developer посилання на всі змінні повинні передувати одиночний знак & , інакше буде виникати помилка ORA-01008 "Not all variables bound".

Перший рядок прикладу визначає символ для десяткового роздільника, який використовується при перетворенні чисел-коренів у рядки.

Сам запит складається із чотирьох різних запитів. Кожен запит повертає рядок, що містить результат обчислень, в одному з випадків (A=0, D=0, D>0 та D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

alter session set NLS_NUMERIC_CHARACTERS = "."; select "Не quadratic equation." ans from dual where && A = 0 union select "x = " || to_char (-&& B / 2 /& A ) від dual where & A != 0 and & B *& B - 4 *& A *&& C = 0 union select "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = "| to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A from dual where & A != 0 and & B *& B - 4 *& A *& C > 0 union select "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" від dual where & A != 0 and & B *& B - 4 *& A *& C< 0 ;

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

Що таке база даних SQL?

Структурована мова запитів ( S tructured Q uery L anguage) – стандарт комунікації з базою даних, підтриманий ANSI. Остання версія - SQL-99, хоча новий стандарт вже знаходиться в розробці. Більшість баз даних твердо дотримуються стандарту ANSI-92. Було багато обговорень з приводу введення більш сучасних стандартів, але виробники комерційних баз даних відхиляються від цього, розвиваючи свої нові концепції маніпуляції даних, що зберігаються. Майже кожна окрема база даних використовує деякий унікальний набір синтаксису, хоч і дуже подібного до стандарту ANSI. У більшості випадків цей синтаксис є розширенням базового стандарту, хоча бувають випадки, коли такий синтаксис призводить до різних результатів для різних баз даних. Завжди непоганою ідеєю буде перегляд документації до бази даних, особливо якщо виходять несподівані результати.

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

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

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

Кожен стовпець є атрибутом або сукупністю атрибутів об'єктів, наприклад ідентифікаційні номери службовців, зростання, колір машин тощо. Часто щодо стовпця використовується термін полеіз зазначенням імені, наприклад "у полі Name". Поле рядка мінімальний елемент таблиці. Кожен стовпець у таблиці має певне ім'я, тип даних та розмір. Імена стовпців мають бути унікальні в межах таблиці.

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

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

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

Типи запитів даних

Є чотири основні типи запитів даних у SQL, які відносяться до так званого мови маніпулювання даними(Data Manipulation Language або DML):

  • SELECT- Вибрати рядки з таблиць;
  • INSERT– додати рядки до таблиці;
  • UPDATE- Змінити рядки в таблиці;
  • DELETE- Видалити рядки в таблиці;

Кожен із цих запитів має різні оператори та функції, які використовуються для того, щоб зробити якісь дії з даними. Запит SELECT має найбільшу кількість опцій. Існують також додаткові типи запитів, які використовуються разом із SELECT, типу JOIN та UNION. Але поки що, ми зосередимося лише на основних запитах.

Використання запиту SELECT для вибору потрібних даних

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

SELECT column1, column2 FROM table_name;

Також можна отримати всі стовпці з таблиці, використовуючи знак підстановки *:

SELECT * FROM table_name;

Це може бути корисним у тому випадку, коли ви збираєтеся вибрати дані з певною умовою WHERE. Наступний запит поверне всі стовпці з усіх рядків, де "column1" містить значення "3":

Крім = (рівно), існують такі умовні оператори:

Додатково можна використовувати умови BITWEEN і LIKE для порівняння з умовою WHERE, а також комбінації операторів AND та OR.

Що в перекладі російською мовою означає: вибрати всі рядки з таблиці table_name, де значення стовпця age більше або дорівнює 18, а також значення стовпця LastName знаходиться в алфавітному проміжку від Іванів до Сидорів включно, або значенням стовпця Company є Motorola.

Використання запиту INSERT для вставлення нових даних

Запит INSERT використовується для створеннянового рядка даних. Для оновлення вже існуючих даних або порожніх полів рядка необхідно використовувати запит UPDATE.

Зразковий синтаксис запиту INSERT:

INSERT INTO table_name (column1, column2, column3) VALUES ("data1", "data2", "data3");

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

Змінюється вже існуюча інформація у базі даних дуже схожим чином.

Запит UPDATE та умова WHERE

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

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

Будьте обережні! Запит DELETE видаляє цілі рядки

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

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

Тепер ви знаєте основи SQL запитів

SQL – мова баз даних, і ми розглянули найважливіші та базові команди, які у запитах даних. Багато основних концепцій не були порушені (SUM і COUNT наприклад), але ті небагато команд, які вдалося перерахувати вище, повинні спонукати вас до активних дій і глибшого вивчення чудової мови запитів під ім'ям SQL.

Останнє оновлення: 24.06.2017

SQL Server є однією з найпопулярніших систем управління базами даних (СУБД) у світі. Ця СУБД підходить для різних проектів: від невеликих додатків до великих високонавантажених проектів.

SQL Server було створено компанією Microsoft. Перша версія вийшла 1987 року. А поточною версією є версія 16, яка вийшла у 2016 році і яка використовуватиметься у поточному посібнику.

SQL Server довгий час був виключно системою керування базами даних для Windows, проте починаючи з версії 16 ця система доступна і на Linux.

SQL Server характеризується такими особливостями як:

    Продуктивність. SQL Server працює дуже швидко.

    Надійність та безпека. SQL Server надає шифрування даних.

    Простота. З цієї СУБД щодо легко працювати та вести адміністрування.

Центральним аспектом у MS SQL Server, як і будь-який СУБД, є база даних. База даних представляє сховище даних, організованих певним способом. Нерідко фізично база даних представляє файл на жорсткому диску, хоча така відповідність необов'язково. Для зберігання та адміністрування баз даних застосовуються системи управління базами даних (database management system) або СУБД (DBMS). І саме MS SQL Server є однією з таких СУБД.

Для організації баз даних MS SQL Server використовує реляційну модель. Ця модель баз даних була розроблена ще в 1970 Едгаром Коддом. А на сьогодні вона фактично є стандартом для організації баз даних.

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

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

Через ключі одна таблиця може бути пов'язана з іншою, тобто між двома таблицями можуть бути організовані зв'язки. А сама таблиця може бути представлена ​​у вигляді відношення ("relation").

Для взаємодії з базою даних використовується мова SQL (Structured Query Language). Клієнт (наприклад, зовнішня програма) надсилає запит мовою SQL за допомогою спеціального API. СУБД належним чином інтерпретує та виконує запит, а потім надсилає клієнту результат виконання.

Спочатку мова SQL була розроблена в компанії IBM для системи баз даних, яка називалася System/R. При цьому сама мова називалася SEQUEL (Structured English Query Language). Хоча в результаті ні база даних, ні сама мова не згодом були офіційно опубліковані, за традицією сам термін SQL нерідко вимовляють як "сіквел".

1979 року компанія Relational Software Inc. розробила першу систему управління баз даних, яка називалася Oracle і використовувала мову SQL. У зв'язку з успіхом цього продукту компанія була перейменована на Oracle.

Згодом почали з'являтися інші системи баз даних, які використовували SQL. У результаті в 1989 році Американський Національний Інститут Стандартів (ANSI) кодифікував мову та опублікував її перший стандарт. Після цього стандарт періодично оновлювався та доповнювався. Останнє його оновлення відбулося у 2011 році. Але незважаючи на наявність стандарту нерідко виробники СУБД використовують власні реалізації мови SQL, які трохи відрізняються один від одного.

Виділяються два різновиди мови SQL: PL-SQL та T-SQL. PL-SQL використовується у таких СУБД як Oracle та MySQL. T-SQL (Transact-SQL) застосовується у SQL Server. Саме тому в рамках поточного керівництва розглядатиметься саме T-SQL.

Залежно від завдання, яке виконує команда T-SQL, він може належати до одного з таких типів:

    DDL (Data Definition Language/Мова визначення даних). До цього типу належать різні команди, які створюють базу даних, таблиці, індекси, процедури, що зберігаються і т.д. Загалом визначають дані.

    Зокрема, до цього типу ми можемо віднести такі команди:

    • CREATE : створює об'єкти бази даних (саму базу даних, таблиці, індекси тощо)

      ALTER : змінює об'єкти бази даних

      DROP: видаляє об'єкти бази даних

      TRUNCATE: видаляє всі дані з таблиць

    DML (Data Manipulation Language/Мова маніпуляції даними). До цього типу відносять команди з вибору даних, їх оновлення, додавання, видалення - загалом усі команди, з допомогою якими ми можемо управляти даними.

    До цього типу належать такі команди:

    • SELECT : отримує дані з БД

      UPDATE : оновлює дані

      INSERT: додає нові дані

      DELETE: видаляє дані

    DCL (Data Control Language/Мова керування доступу до даних). До цього типу відносять команди, які керують правами доступу до даних. Зокрема, це такі команди:

    • GRANT : надає права на доступ до даних

      REVOKE: відкликає права на доступ до даних

Програми клієнти

Протокол TFTP

TFTP -теж протокол FTP, але поверх протоколу UDP (тобто протокол без гарантованої доставки). Може використовуватися в локальній мережі, де швидкість передачі важливіша. Насправді використовується рідко.

FTP -програма запускається з командного рядка.

Windows Comander- може працювати як FTP-клієнт. Дозволяє працювати з віддаленими каталогами як і з локальними.

NetVampire -Спеціалізований FTP-клієнт, який дозволяє качати великі файли та качати поганими каналами.

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

Запити виконуються системою управління базою даних (СУБД). Якщо ви не є фахівцем з розробки та адміністрування баз даних, то цілком можете бути їх користувачем, який переглядає або змінює дані в наявних таблицях. У багатьох випадках ці та інші операції з базою даних виконуються за допомогою спеціальних програм, що надають користувачеві зручний інтерфейс. Зазвичай додатки пишуться спеціальними мовами програмування (С, Pascal, Visual Basic тощо) і найчастіше створюються за допомогою інтегрованих середовищ розробки, наприклад, Delphi, C++ Builder та ін. Однак доступ до бази даних можна отримати і без них - за допомогою лише SQL. Слід зазначити також, як і спеціалізовані додатки зазвичай використовують SQL-фрагменты коду при зверненнях до бази даних.

Таким чином, SQL - поширена стандартна мова роботи з реляційними базами даних. Синтаксис цієї мови досить простий, щоб його могли використовувати рядові користувачі, а не лише програмісти. В даний час звичайний користувач комп'ютера повинен володіти принаймні текстовим редактором (наприклад, Microsoft Word) та електронними таблицями (наприклад, Microsoft Excel). Непогано, якщо він також вміє скористатися базами даних. Різних СУБД існує багато, а універсальний засіб роботи з базами даних один - SQL. Знання SQL, хоча його основ, і вміння його застосовувати для пошуку та аналізу даних є фундаментальної частиною комп'ютерної грамотності навіть пересічних користувачів.

Перші розробки систем управління реляційними базами даних (реляційних СУБД) були виконані в IBM на початку 1970-х років. Тоді ж була створена мова даних, призначена для роботи в цих системах. Експериментальна версія цієї мови називалася SEQUEL – від англ. Structured English QUEry Language (структурована англійська запитів). Однак офіційна версія була названа коротшою - SQL (Structured Query Language). Точніше, SQL - це підмова даних, оскільки СУБД містить інші мовні засоби.

1981 року IBM випускає реляційну СУБД SQL/DS. На той час компанія Relation Software Inc. (Сьогодні це Oracle Corporation) вже випустила свою реляційну СУБД. Ці продукти відразу стали стандартом систем, призначених для управління базами даних. До складу цих продуктів увійшов і SQL, який фактично став стандартом для підмов даних. Виробники інших СУБД випустили свої версії SQL. Вони були як основні можливості продуктів IBM. Щоб отримати деяку перевагу для "своєї" СУБД, виробники вводили деякі розширення SQL. Разом з тим почалися роботи зі створення загальновизнаного стандарту SQL.

У 1986 році Американський національний інститут стандартів (American National Standards Institute, ANSI) випустив офіційний стандарт SQL-86, який у 1989 році був оновлений і отримав нову назву SQL-89. 1992 року цей стандарт був названий SQL-92 (ISO/IEC 9075:1992). Останньою версією стандарту SQL є SQL:2003 (ISO/IEC 9075X:2003).

Будь-яка реалізація SQL у конкретній СУБД дещо відрізняється від стандарту, відповідність якому оголошено виробником. Так, багато СУБД (наприклад, Microsoft Access 2003, PostgreSQL 7.3) підтримують SQL-92 не повною мірою, а лише з деяким рівнем відповідності. Крім того, вони підтримують елементи, які не входять до стандарту. Однак розробники СУБД прагнуть того, щоб нові версії їх продуктів якомога більшою мірою відповідали стандарту SQL.

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

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

На практиці з базою даних зазвичай працюють за допомогою додатків, написаних програмістами на процедурних мовах, наприклад, С, Visual Basic, Pascal, Java і ін. Часто програми створюються в спеціальних середовищах візуальної розробки, таких як Delphi, Microsoft Access, Visual dBase і т.д. п. При цьому розробнику програми практично не доводиться писати коди програм, оскільки за нього це робить система розробки. У всякому разі, робота з програмним кодом виявляється мінімальною. Ці програми мають зручний графічний інтерфейс, який не змушує користувача безпосередньо вводити запити на мові SQL. Замість нього це робить програму. Втім, додаток може використовувати, так і не використовувати SQL для звернення до бази даних. SQL не єдиний, хоч і дуже ефективний засіб отримання, додавання та зміни даних, і якщо є можливість використовувати його в додатку, то це слід робити.

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

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

Наприклад, для того щоб вибрати з таблиці співробітники відомості про прізвища та посади співробітників 102 відділу, достатньо виконати наступний запит:

SELECT Прізвище, Посада FROM Співробітники WHERE Відділ = 102;

По-російськи цей вираз звучить так:

ВИБРАТИ Прізвище, Посада З Співробітники ЗА УМОВИ, ЩО Відділ = 102;

Щоб змінити значення " Іванов "на" Петров стовпця Прізвище , достатньо виконати наступний запит:

UPDATE Співробітники SET Прізвище = "Петрів" WHERE Прізвище = "Іванів";

По-російськи цей вираз виглядає так:

ОБНОВИТИ Співробітники УСТАНОВИВ Прізвище РІВНИМ " Петров "ДЕ Прізвище = "Іванов" ;

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

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

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

· DML (Data Manipulation Language - мова маніпулювання даними ) призначений для підтримки бази даних: вибору ( SELECT ), додавання ( INSERT ), зміни ( UPDATE ) та видалення ( DELETE ) даних із таблиць. Ці оператори (команди) можуть містити вирази, у тому числі обчислювані, а також підзапити - запити, що містяться всередині іншого запиту. Загалом вираз запиту може бути настільки складним, що й не скажеш, що він робить. Однак складний запит можна розбити подумки на частини, які легше аналізувати. Аналогічно, складні запити створюються відносно простих для розуміння виразів (підзапитів).

· DDL (Data Definition Language - мова визначення даних ) призначений для створення, модифікації та видалення таблиць і всієї бази даних. Прикладами операторів, що входять до DDL, є CREATE TABLE (Створити Таблицю)," CREATE VIEW (Створити уявлення), CREATE SHEMA (Створити схему), ALTER TABLE (Змінити таблицю), DROP (Видалити) та ін.

· DCL (Data Control Language - мова управління даними ) призначений для забезпечення захисту бази даних від різноманітних пошкоджень. СУБД передбачає деякий захист даних автоматично. Однак у ряді випадків слід передбачити додаткові заходи, що надаються DCL.

Функціональні можливості мови 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?