Ms SQL Server запити. Приклад створення запиту (Query) у базі даних MS SQL Server

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

У минулій темі в SQL Management Studio була створена простенька база даних з однією таблицею. Тепер визначимо та виконаємо перший SQL-запит. Для цього відкриємо SQL Management Studio, натиснемо правою кнопкою миші на елемент найвищого рівня в Object Explorer (назва сервера) і в контекстному меню виберемо пункт New Query :

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

Виконаємо запит до таблиці, яка була створена в минулій темі, зокрема, отримаємо всі дані з неї. База даних у нас називається university, а таблиця - dbo.Students, тому для отримання даних з таблиці введемо наступний запит:

SELECT * FROM university.dbo.Students

Оператор SELECT дозволяє вибирати дані. FROM вказує джерело, звідки брати дані. Фактично цим запитом ми кажемо "ВИБРАТИ всі З таблиці university.dbo.Students". Варто зазначити, що для назви таблиці використовується повний її шлях із зазначенням бази даних та схеми.

Після введення запиту натисніть на панелі інструментів кнопку Execute , або можна натиснути клавішу F5 .

В результаті виконання запиту в нижній частині програми з'явиться невелика таблиця, яка відображатиме результати запиту - тобто всі дані з таблиці Students.

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

USE university SELECT * FROM Students

В даному випадку ми виконуємо запит у цілому для сервера, ми можемо звернутися до будь-якої бази даних на сервері. Але ми можемо виконувати запити лише у межах конкретної бази даних. Для цього необхідно натиснути правою кнопкою миші на потрібну бд і в контекстному меню вибрати пункт New Query:

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

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

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

Редактор запитів

Щоб відкрити панель редактора запитів Query Editor (Редактор запитів), на панелі інструментів середовища SQL Server Management Studio натисніть кнопку New Query (Створити запит). Цю панель можна розширити, щоб відобразити кнопки створення всіх можливих запитів, а не лише запитів компонента Database Engine. За замовчуванням створюється новий запит компонента Database Engine, але натиснувши відповідну кнопку на панелі інструментів, можна також створювати запити MDX, XMLA та ін.

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

Редагування запитів в автономному режимі надає більше гнучкості, ніж під час підключення до сервера. Для редагування запитів не обов'язково підключатися до сервера, і вікно редактора запитів можна відключити від одного сервера (виконавши команду меню Query -> Connection -> Disconnect) і підключити до іншого, не відкриваючи іншого вікна редактора. Щоб вибрати автономний режим редагування, у діалоговому вікні підключення до сервера, що відкривається під час запуску редактора певного виду запитів, просто натисніть кнопку Cancel (Скасувати).

Редактор запитів можна використовувати для виконання наступних завдань:

    створення та виконання інструкцій мови Transact-SQL;

    збереження створених інструкцій мови Transact-SQL у файл;

    створення та аналізування планів виконання загальних запитів;

    графічне ілюстрування плану виконання обраного запиту.

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

У першій інструкції запиту USE вказується використовувати базу даних SampleDb як поточну базу даних. Друга інструкція – SELECT – витягує всі рядки таблиці Employee. Щоб виконати цей запит і вивести результати, натисніть кнопку Execute (Виконати) або клавішу F5 на панелі інструментів редактора запитів.

Можна відкрити кілька вікон редактора запитів, тобто. виконати кілька підключень до одного або кількох примірників компонента Database Engine. Нове підключення створюється натисканням кнопки New Query на панелі інструментів середовища SQL Server Management Studio.

У рядку стану у нижній частині вікна редактора запитів відображається наступна інформація, пов'язана з виконанням інструкцій запиту:

    стан поточної операції (наприклад, "Запит успішно виконано");

    ім'я сервера бази даних;

    ім'я поточного користувача та ідентифікатор серверного процесу;

    ім'я поточної бази даних;

    час, витрачений виконання останнього запита;

    кількість знайдених рядків.

Однією з основних переваг середовища SQL Server Management Studio є легкість її використання, що також відноситься і до редактора запитів Query Editor. Редактор запитів підтримує безліч можливостей, що полегшують завдання кодування інструкцій Transact-SQL. Зокрема, в ньому використовується підсвічування синтаксису, щоб покращити читання інструкцій Transact-SQL. Усі зарезервовані слова відображаються синім кольором, змінні – чорним, рядки – червоним, а коментарі – зеленим.

Крім цього, редактор запитів оснащений контекстно-залежною довідкою, що називається Dynamic Help, за допомогою якої можна отримати інформацію про конкретну інструкцію. Якщо ви не знаєте синтаксису інструкції, перейдіть до редактора, а потім натисніть клавішу F1 . Також можна виділити параметри різних інструкцій Transact-SQL, щоб отримати довідку з електронної документації.

У SQL Management Studio підтримується інструмент SQL Intellisense, який є видом засобу автозавершення. Іншими словами, цей модуль пропонує найбільш ймовірне завершення частково введених елементів Transact-SQL інструкцій.

З редагуванням запитів може також допомогти браузер об'єктів (object Explorer). Наприклад, якщо ви хочете дізнатися, як створити інструкцію CREATE TABLE для таблиці Employee, клацніть правою кнопкою цю таблицю в браузері об'єктів і в контекстному меню виберіть пункти Script Table As --> CREATE to --> New Query Editor Window (Створити скрипт для таблиці -> Використовуючи CREATE -> Нове вікно редактора запитів). Вікно редактора запитів, яке містить створену таким чином інструкцію CREATE TABLE, показано на малюнку нижче. Ця можливість також застосовується і з іншими об'єктами, такими як процедури та функції, що зберігаються.

Оглядач об'єктів дуже корисний для графічного відображення плану виконання конкретного запиту. Планом виконання запиту називається варіант виконання, обраний оптимізатором запиту серед кількох можливих варіантів виконання конкретного запиту. Введіть потрібний запит у верхню панель редактора, виберіть послідовність команд з меню Query --> Display Estimated Execution Plan (Запит --> Показати гаданий план виконання) і в нижній панелі вікна редактора буде показаний план виконання цього запиту.

Оглядач рішень

Редагування запитів у SQL Server Management Studio базується на методі рішень (solutions). Якщо створити порожній запит за допомогою кнопки New Query, він буде заснований на порожньому рішенні. Це можна побачити, виконавши послідовність команд з меню View --> Solution Explorer відразу після відкриття порожнього запиту.

Рішення може бути пов'язане з жодним, з одним або з кількома проектами. Порожнє рішення, не пов'язане з жодним проектом. Щоб зв'язати проект із рішенням, закрийте порожнє рішення, браузер рішень і редактор запитів і створіть новий проект, виконавши послідовність команд з меню File --> New --> Project. У вікні New Project, що відкрилося, виберіть у середній панелі опцію SQL Server Scripts. Проект - це спосіб організації файлів у певному місці. Проекту можна присвоїти ім'я та вибрати місце для його розташування на диску. Під час створення нового проекту автоматично запускається нове рішення. Проект можна додати до існуючого рішення за допомогою браузера рішень.

Для кожного створеного проекту в браузері рішень відображаються папки Connections (З'єднання), Queries (Запити) та Miscellaneous (Різне). Щоб відкрити нове вікно редактора запитів для даного проекту, клацніть правою кнопкою його папку Queries і в контекстному меню виберіть New Query.

Налагодження SQL Server

SQL Server, починаючи з версії SQL Server 2008, оснащений вбудованим кодом налагодження. Щоб розпочати сеанс налагодження, виберіть у головному меню середовища SQL Server Management Studio наступну послідовність команди Debug --> Start Debugging (Налагодження --> Почати налагодження). Ми розглянемо роботу налагоджувача на прикладі з використанням пакета команд. Пакетом називається послідовність інструкцій SQL і процедурних розширень, що становлять логічне ціле, що відправляється компоненту Database Engine для виконання всіх інструкцій, що містяться в ній.

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

Щоб зупинити виконання пакета на певній інструкції, можна встановити точки зупинки, як показано на малюнку. Для цього потрібно клацнути ліворуч від рядка, на якому потрібно зупинитись. На початку налагодження виконання зупиняється на першій лінії коду, що відзначається жовтою стрілкою. Щоб продовжити виконання та налагодження, виконайте команду меню Debug --> Continue (Налагодження --> Продовжити). Виконання інструкцій пакета продовжиться до першої точки зупинки, і жовта стрілка зупиниться на цій точці.

Інформація, пов'язана з процесом налагодження, відображається у двох панелях у нижній частині вікна редактора запитів. Інформація про різні типи інформації про налагодження згрупована в цих панелях на декількох вкладках. Ліва панель містить вкладку Autos (Автоматичні), Locals (Локальні) та до п'яти вкладок Watch (Видимі). Права панель містить вкладки Call Stack (Стек викликів), Threads (Потоки), Breakpoints (Точки зупинки), Command Window (Вікно команд), Immediate Window (Вікно інтерпретації) та Output (Висновок). На вкладці Locals відображаються значення змінних, на вкладці Call Stack - значення стека викликів, а вкладки Breakpoints - інформація про точках зупинки.

Щоб завершити процес налагодження, виконайте послідовність команд із головного меню Debug --> Stop Debugging або натисніть синю кнопку на панелі інструментів відладчика.

У SQL Server 2012 функціональність вбудованого в SQL Server Management Studio відладчика розширена кількома новими можливостями. Тепер у ньому можна виконувати низку наступних операцій:

    Вказувати умову точки зупинки. Умова точки зупинки- це SQL-вираз, обчислене значення якого визначає, буде виконання коду зупинено у цій точці чи ні. Щоб вказати умову точки зупинки, клацніть червоний значок потрібної точки правою кнопкою та в контекстному меню виберіть Condition (Умова). Відкриється діалогове вікно Breakpoint Condition (Умова точки зупинки), в якому потрібно ввести необхідний логічний вираз. Крім цього, якщо необхідно зупинити виконання, якщо вираз правильно, то слід встановити перемикач Is True. Якщо ж виконання потрібно зупинити, якщо вираз змінилося, потрібно встановити перемикач When Changed (Змінилося).

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

    1. безумовна (дія за замовчуванням) (Break always);

      якщо кількість влучень дорівнює зазначеному значенню (Break when the his count equals a specified value);

      якщо кількість влучень кратно зазначеному значенню (Break when the hit count equals a multiple of a specified value);

      якщо число попадань дорівнює або більше зазначеного значення (Break when the his count is greater or equal to a specified value).

    Щоб задати кількість влучень у процесі налагодження, клацніть правою кнопкою значок потрібної точки зупинки на вкладці Breakpoints, у контекстному меню виберіть пункт Hit Count (Кількість влучень), потім у діалоговому вікні Breakpoint Hit Count (Кількість влучень в точку зупинки) виберіть одну з умов. із наведеного раніше списку. Для опцій, які потребують значення, введіть його в текстове поле праворуч від розкривного списку умов. Щоб зберегти ці умови, натисніть кнопку OK.

    Вказувати фільтр точки зупинки. Фільтр точки зупинки обмежує роботу зупинки лише на вказаних комп'ютерах, процесах або потоках. Щоб встановити фільтр точки зупинки, клацніть правою кнопкою потрібну точку та в контекстному меню виберіть пункт Filter. Потім у діалоговому вікні Breakpoint Filters (Фільтр точки зупинки) вкажіть ресурси, якими потрібно обмежити виконання цієї точки зупинки. Щоб зберегти ці умови, натисніть кнопку ОК.

    Вказувати дію в точці зупинки. Умова When Hit (При попаданні) вказує дію, яку потрібно виконати, коли виконання пакета потрапляє до цієї точки зупинки. За умовчанням, коли задовольняються як умова кількості влучень, і умова зупинки, тоді виконання переривається. Альтернативно можна вивести наперед зазначене повідомлення.

    Щоб вказати дію при попаданні в точку зупинки, клацніть правою кнопкою червоний значок потрібної точки та виберіть When Hit у контекстному меню. У діалоговому вікні When Breakpoint is Hit (При попаданні в точку зупинки) виберіть потрібну дію. Щоб зберегти ці умови, натисніть кнопку OK.

    Використовуйте вікно швидкої перевірки Quick Watch. У вікні QuickWatch (Швидка перевірка) можна переглянути значення виразу Transact-SQL, а потім зберегти цей вираз у вікні перегляду значень Watch (Перегляд значень). Щоб відкрити вікно Quick Watch, у меню Debug виберіть пункт Quick Watch. Вираз у цьому вікні можна або вибрати зі списку Expression (Вираз), або ввести його в це поле.

    Використовувати спливаючу підказку Quick Info. Якщо вказувати мишу на ідентифікатор коду, засіб Quick Info (Коротка інформація) відображає його оголошення у спливаючому вікні.

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

    похідні таблиці;

    узагальнені табличні вирази.

Ці дві форми табличних виразів розглядаються у наступних підрозділах.

Похідні таблиці

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

USE SampleDb; SELECT MONTH(EnterDate) як enter_month FROM Works_on GROUP BY enter_month;

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

Msg 207, Level 16, State 1, Line 5 Invalid column name "enter_month". (Повідомлення 207: рівень 16, стан 1, рядок 5 Неприпустиме ім'я стовпця enter_month)

Причиною помилки є те, що пропозиція GROUP BY обробляється до обробки відповідного списку інструкції SELECT, і при обробці цієї групи псевдонім стовпця enter_month невідомий.

Цю проблему можна вирішити, використовуючи похідну таблицю, що містить попередній запит (без пропозиції GROUP BY), оскільки пропозиція FROM виконується перед пропозицією GROUP BY:

USE SampleDb; SELECT enter_month FROM (SELECT MONTH (EnterDate) як enter_month FROM Works_on) AS m GROUP BY enter_month;

Результат виконання цього запиту буде таким:

Зазвичай, табличний вираз можна розмістити в будь-якому місці інструкції SELECT, де може з'явитися ім'я таблиці. (Результатом табличного виразу завжди є таблиця або, в особливих випадках, вираз.) У прикладі нижче показано використання табличного виразу у списку вибору інструкції SELECT:

Результат виконання цього запиту:

Узагальнені табличні вирази

Узагальненим табличним виразом (OTB) (Common Table Expression - скорочено CTE)називається іменований табличний вираз, що підтримується мовою Transact-SQL. Узагальнені табличні вирази використовуються у двох типах запитів:

    нерекурсивних;

    рекурсивних.

Ці два типи запитів розглядаються в наступних розділах.

OTB та нерекурсивні запити

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

USE AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue)HEREDE 5 ")/2.5;

Запит у цьому прикладі вибирає замовлення, чиї загальні суми податків (TotalDue) більші, ніж середнє значення з усіх податків, і плату перевезення (Freight) яких більше 40% середнього значення податків. Основною властивістю цього запиту є його об'ємність, оскільки вкладений запит потрібно писати двічі. Одним із можливих способів зменшити обсяг конструкції запиту буде створити уявлення, що містить вкладений запит. Але це рішення дещо складно, оскільки вимагає створення подання, а потім його видалення після закінчення запиту. Найкращим підходом буде створити OTB. У прикладі нижче показано використання нерекурсивного OTB, яке скорочує визначення запиту, наведеного вище:

USE AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE Total_Due > (SELECT ear_2005 FROM price_calc) /2.5;

Синтаксис пропозиції WITH у нерекурсивних запитах має такий вигляд:

Параметр cte_name представляє ім'я OTB, яке визначає результуючу таблицю, а параметр column_list – список стовпців табличного виразу. (У прикладі вище OTB називається price_calc і має один стовпець - year_2005.) Параметр inner_query представляє інструкцію SELECT, яка визначає результуючий набір відповідного табличного виразу. Після цього певний табличний вираз можна використовувати у зовнішньому запиті outer_query. (Зовнішній запит у прикладі вище використовує OTB price_calc та її стовпець year_2005, щоб спростити вживаний двічі вкладений запит.)

OTB та рекурсивні запити

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

Параметри cte_name і column_list мають таке ж значення, як і OTB для нерекурсивних запитів. Тіло пропозиції WITH складається із двох запитів, об'єднаних оператором UNION ALL. Перший запит викликається лише один раз, і він починає накопичувати результат рекурсії. Перший операнд оператора UNION ALL не посилається на OTB. Цей запит називається опорним запитом чи джерелом.

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

Оператор UNION ALL з'єднує рядки, що накопичилися на даний момент, а також додаткові рядки, додані поточним викликом рекурсивного члена. (Наявність оператора UNION ALL означає, що рядки, що повторюються, не будуть видалені з результату.)

Нарешті, outer_query визначає зовнішній запит, який використовує OTB для отримання всіх викликів об'єднання обох членів.

Для демонстрації рекурсивної форми OTB ми використовуємо таблицю Airplane, визначену та заповнену кодом, наведеним у прикладі нижче:

USE SampleDb; CREATE TABLE Airplane (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSERT INTO Airplane VALUES ("Літак", "Фюзеляж", 1, 10); INSERT INTO Airplane VALUES ("Літак", "Крила", 1, 11); INSERT INTO Airplane VALUES ("Літак", "Хвіст", 1, 12); INSERT INTO Airplane VALUES ("Фюзеляж", "Салон", 1, 13); INSERT INTO Airplane VALUES ("Фюзеляж", "Кабіна", 1, 14); INSERT INTO Airplane VALUES ("Фюзеляж", "Ніс", 1, 15); INSERT INTO Airplane VALUES ("Салон", NULL, 1,13); INSERT INTO Airplane VALUES ("Кабіна", NULL, 1, 14); INSERT INTO Airplane VALUES ("Ніс", NULL, 1, 15); INSERT INTO Airplane VALUES ("Крила", NULL,2, 11); INSERT INTO Airplane VALUES ("Хвіст", NULL, 1, 12);

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

Таблиця Airplane складається з наступних 11 рядків:

У прикладі нижче показано застосування пропозиції WITH для визначення запиту, який обчислює загальну вартість кожної збірки:

USE SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly,A.QuantityASCain. ) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Деталь", quantity "Кількість", cost "Ціна" FROM list_of_parts;

Пропозиція WITH визначає список OTB з ім'ям list_of_parts, що складається з трьох стовпців: assembly1, quantity та cost. Перша інструкція SELECT у прикладі викликається лише один раз, щоб зберегти результати першого кроку процесу рекурсії. Інструкція SELECT в останньому рядку прикладу відображає наступний результат.

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

Але, незважаючи на постійне використання баз даних, навіть для багатьох розробників програмних систем залишається багато «білих плям» через різне тлумачення тих самих термінів. Ми надамо коротке визначення основних термінів баз даних перед розглядом мови SQL. Отже.

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

Таблиця - уявімо папку, в якій зберігаються документи, згруповані за певною ознакою, наприклад список замовлень за останній місяць. Це і є таблиця в комп'ютерній. Окрема таблиця має своє унікальне ім'я.

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

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

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

Що таке SQL?

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

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

  • створення баз та таблиць;
  • вибірка даних;
  • додавання записів;
  • модифікація та видалення інформації.

Типи даних SQL

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

Створюємо таблиці та бази даних

Створювати нові бази, таблиці та інші запити SQL можна двома способами:

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

Створюється нова база даних оператором CREATE DATABASE<наименование базы данных>; . Як бачимо, синтаксис простий та лаконічний.

Таблиці всередині бази даних створюємо оператором CREATE TABLE з наступними параметрами:

  • найменування таблиці
  • імена та типи даних стовпців

Як приклад створимо таблицю Commodity з такими стовпцями:

Створюємо таблицю:

CREATE TABLE Commodity

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

commodity_name CHAR(254) NULL,

commodity_price DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Таблиця складається із п'яти стовпців. Після назви йде тип даних, стовпці поділяються комами. Значення стовпця може приймати порожні значення (NULL) або обов'язково заповнено (NOT NULL), і це визначається при створенні таблиці.

Вибірка даних із таблиці

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

SELECT commodity_name FROM Commodity

Після оператора SELECT вказуємо ім'я стовпця для отримання інформації, а FROM визначає таблицю.

Результатом виконання запиту будуть усі рядки таблиці зі значеннями Commodity_name у порядку, у якому вони були внесені до бази даних тобто. без жодного сортування. Для упорядкування результату використовується додатковий оператор ORDER BY.

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

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Є можливість отримати як наслідок запиту значення всіх стовпців рядка. Для цього використовується знак "*":

SELECT * FROM Commodity

  • Додатково SELECT підтримує:
  • Сортування даних (оператор ORDER BY)
  • Вибір згідно з умовами (WHERE)
  • Угруповання термін (GROUP BY)

Додаємо рядок

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

  • додаємо новий цілий рядок;
  • частина рядка;
  • результати запиту.

Щоб додати повний рядок, необхідно вказати ім'я таблиці та значення стовпців (полів) нового рядка. Наведемо приклад:

INSERT INTO Commodity VALUES("106", "50", "Coca-Cola", "1.68", "No Alcogol,)

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

У разі додавання лише частини рядка необхідно явно вказати назви стовпців, як у прикладі:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", '50", "Coca-Cola",)

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

Додавання результатів запиту

В основному INSERT використовується для додавання рядків, але може використовуватися для додавання результатів оператора SELECT.

Зміна даних

Щоб змінити інформацію в полях таблиці бази даних, необхідно використовувати оператор UPDATE. Оператор може застосовуватися двома способами:

  • Оновлюються усі рядки в таблиці.
  • Тільки для певного рядка.

UPDATE складається із трьох основних елементів:

  • таблиця, у якій необхідно проводити зміни;
  • імена полів та їх нові значення;
  • умови вибору рядків зміни.

Розглянемо приклад. Допустимо, у товару з ID=106 змінилася вартість, тому цей рядок необхідно оновити. Пишемо наступний оператор:

UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

Ми вказали ім'я таблиці, в нашому випадку Commodity, де буде проводитись оновлення, потім після SET - нове значення стовпця і знайшли потрібний запис, вказавши WHERE потрібне значення ID.

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

UPDATE Commodity SET commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

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

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Видалення рядків

SQL запити видалення рядків у таблиці виконуються оператором DELETE. Є два варіанти використання:

  • у таблиці видаляються певні рядки;
  • видаляються всі рядки у таблиці.

Приклад видалення одного рядка з таблиці:

DELETE FROM Commodity WHERE commodity_id = "106"

Після DELETE FROM вказуємо ім'я таблиці, у якій видалятимуться рядки. Оператор WHERE містить умову, за якою вибиратимуться рядки для видалення. У прикладі ми видаляємо рядок товару ID=106. Вказувати WHERE дуже важливо. пропуск цього оператора призведе до видалення всіх рядків у таблиці. Це стосується й зміни значення полів.

В операторі DELETE не вказуються найменування стовпців та метасимволи. Він повністю видаляє рядки, а видалити окремий стовпець не може.

Використання SQL у Microsoft Access

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

Також підтримується режим доступу до сервера, при якому СУБД Access може використовуватися як генератор SQL-запитів до будь-якого джерела ODBC даних. Ця можливість дозволяє програмам Access взаємодіяти з будь-якого формату.

Розширення SQL

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

Найбільш поширені діалекти мови:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL – PL/pgSQL.

SQL в Інтернет

СУБД MySQL поширюється під вільною ліцензією GNU General Public License. Є комерційна ліцензія з можливістю розробки модулів. Як складова частина входить до найбільш популярних збірок Інтернет-серверів, таких як XAMPP, WAMP та LAMP, і є найпопулярнішою СУБД для розробки додатків у мережі Інтернет.

Була розроблена компанією Sun Microsystems і зараз підтримується корпорацією Oracle. Підтримуються бази даних розміром до 64 терабайт, стандарт синтаксису SQL:2003, реплікація баз даних та хмарних сервісів.

SQL - Структурована Мова Запитів.
У цьому огляді ми розглянемо найпоширеніші види SQL-запитів.
Стандарт SQL визначається ANSI(Американським Національним Інститутом Стандартів).
SQL - це мова, орієнтована спеціально на реляційні бази даних.

Поділ SQL:


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

Типи даних:

SQL Server - Типи даних

Опис

bigint (int 8)

bigint (int 8)

binary(n)

binary(n) або image

character
(синонім char)

national characterабо ntext

character varying(синонім char varying varchar)

national character varyingабо ntext

Datetime

datetime

decimal

він же numeric

double precision

double precision

integer (int 4) (Синонім: int)

integer (int 4)

national character(Синонім: national character, nchar)

national character

Numeric(синініми: decimal, dec)

national character varying(синоніми: national char varying, nvarchar)

National character varying

Smalldatetime

datetime

smallint (int 2)

smallint (int 2)

Smallmoney

sql_variant

Більше не тремтить

Ntext
Починаючи з SQL Server 2005, не рекомендується для використання.

Timestamp

Не тремтить

tinyint (int 1)

tinyint (int 1)

Uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n) або image

smalldatetime

datetime

smallint (int 2)

smallint (int 2)

smallmoney

sql_variant

Не підтримується

timestamp

Не підтримується

tinyint (int 1)

tinyint (int 1)

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n) або image

Таблиця типів даних у SQL Server 2000

ЩО ТАКЕ ЗАПИТ?

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

Команда SELECT:

SELECT“Вибір” - найчастіше використовувана команда, з її йде вибірка даних із таблиці.
Вигляд запиту із застосуванням SELECT:

SELECT id, user_name, city, birth_day FROM users_base;

Такий запит виведе з таблиці users_base всі значення стовпців, вказаних через кому після команди SELECT. Також можна виводити всі стовпці одним символом, тобто. SELECT * FROM users_base; - такий запит виведе усі дані із таблиці.

Структура команди SELECT:

SELECT (Імена стовпців через кому які необхідно вивести в запиті) FROM (ім'я таблиці в базі даних)
- це найпростіший вид запиту. Існують додаткові команди для зручності отримання даних (див. далі “Функції”)

DML команди:

Значення можуть бути поміщені та видалені з полів, трьома командами мови DML (Мова маніпулювання даними):
INSERT(Вставка)
UPDATE(Оновлення, модифікація),
DELETE(Видалення)

Команда INSERT:

INSERT INTO users_base (user_name, city, birth_day) VALUES ('Олександр', 'Ростов', '20.06.1991');

Команда INSERT йде разом з приставкою INTO (in to - в), далі в дужках йдуть імена стовпців, в які ми повинні вставити дані, далі йде команда VALUES (значення) і в дужках по черзі йдуть значення (обов'язково потрібно дотримуватися черговості значень зі стовпцями , значення повинні йти в тій же черговості, як і стовпці, вказані вами).

Команда UPDATE:

UPDATE users_base SET user_name = 'Олексій';

Команда UPDATE оновлює значення таблиці. Спочатку йде сама команда UPDATE потім ім'я таблиці, після команда SET (встановить) далі ім'я стовпця та його значення в лапках (лапки ставляться в тому випадку якщо значення має string формат, якщо це числове значення та стовпець не прив'язаний до типу даних vchar та будь-яких інших рядкових типів, то лапки не мають сенсу.)

Команда DELETE:

DELETE FROM users_base WHERE user_name = 'Василь';

Команда DELETE видаляє рядок повністю, визначає рядок за критерієм WHERE (Де). В даному випадку цей запит видалив би всі рядки, в яких значення стовпця user_name було б Василем. Про критерії WHERE та інших ми поговоримо трохи згодом.

Критерії, функції, умови тощо. що допомагає нам у SQL:

WHERE - пропозиція команди SELECT та інших DML команд, яка дозволяє вам встановлювати предикати, умова яких може бути або вірною або невірною для будь-якого рядка таблиці. Команда витягує лише рядки з таблиці, котрим таке твердження правильне.
Приклад:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Олексій';- такий запит виведе лише ті рядки, які будуть відповідати умові WHERE, а саме всі рядки, у яких стовпець user_name має значення Олексій.

ORDER BY – умова для сортування вибраних рядків. Має 2 критерії ASC та DESC. ASC (сортування від А до Я або від 0 до 9)

DESC (протилежно від ASC).
Приклад:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - такий запит виведе значення відсортовані стовпцем user_name від А до Я (A-Z; 0-9)

Також цю умову можна використовувати разом із умовою WHERE.
Приклад:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Олексій' ORDER BY id ASC;

DISTINCT (Відмінний) – аргумент, який забезпечує вас способом усувати подвійні значення з вашої пропозиції SELECT. Тобто. якщо у вас є повторні значення в стовпці, припустимо, user_name то DISTINCT виведе вам тільки одне, наприклад у вас в базі є 2 особи на ім'я Олексій, то запит з використанням функції DISTINCT виведе вам тільки 1 значення, яке зустріне першим...
Приклад:
SELECT DISTINCT user_name FROM users_base;- такий запит виведе нам значення всіх записів у стовпці user_name але вони повторюватимуться, тобто. якщо ви мали нескінченну кількість значень, що повторюються, то вони показані не будуть…

AND - бере два Булі (у формі A AND B) як аргументи і оцінює їх по відношенню до істини, чи вони вірні обидва.
Приклад:
SELECT * FROM users_base WHERE city = 'Ростов' AND user_name = 'Олександр';- виведе всі значення з таблиці, де в одному рядку зустрічається назва міста (в даному випадку Ростов та ім'я користувача Олександр).

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

SELECT * FROM users_base WHERE city = 'Ростов' OR user_name = 'Олександр';- виведе всі значення з таблиці, де в рядку зустрічається назва міста Ростов або Ім'я користувача Олександр.

NOT - бере одиночний Булев (у формі NOT A) як аргументи та замінює його значення з невірного на вірне чи вірне на невірне.
SELECT * FROM users_base WHERE city = 'Ростов' OR NOT user_name = 'Олександр';- виведе всі значення з таблиці де в одному рядку зустрінеться ім'я міста Ростов або ім'я користувача не буде Олександр.

IN - визначає набір значень, у яке дане значення може або не може бути включене.
SELECT * FROM users_base WHERE city IN (Владивосток, Ростов);- такий запит виведе всі значення з таблиці, в яких зустрінуться найменування зазначених міст у стовпці city

Between – схожий на оператор IN. На відміну від визначення номерів з набору, як це робить IN, BETWEEN визначає діапазон, значення якого повинні зменшуватися що робить предикат вірним.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10;- виводить усі значення з таблиці, які будуть знаходитися в діапазоні від 1 до 10 у стовпці id

COUNT - здійснює номери рядків або не NULL значення полів, які вибрали запит.
SELECT COUNT (*) FROM users_base ;- виведе кількість рядків у цій таблиці.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- виведе кількість рядків з іменами користувачів (не повторюваних)

SUM - здійснює арифметичну суму всіх вибраних значень даного поля.
SELECT SUM (id) FROM users_base;- Виведе суму значень всіх рядків стовпця id.

AVG - робить усереднення всіх вибраних значень цього поля.
SELECT AVG (id) FROM users_base;- виведе середнє значення всіх вибраних значень стовпця id

MAX – виробляє найбільше з усіх вибраних значень даного поля.

MIN - виробляє найменше зі всіх обраних значень даного поля.

Створення таблиць:

CREATE TABLE users_base (id integer, user_name text, city text, birth_day datetime);- Виконання такої команди приведе до створення таблиці, за якою я наводив приклади ... Тут все просто, пишемо команду CREATE TABLE далі ім'я таблиці, яку хочемо створити, далі в дужках через кому імена стовпців і їх тип даних. Це стандартний вид створення таблиці SQL. Зараз я наведу приклад створення таблиць SQL Server 2005:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (

NOT NULL,
NOT NULL,
NOT NULL,
PRIMARY KEY CLUSTERED
ASC


END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON TEXTIMAGE_ON
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON
END

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

При виникненні питань на цю тему, пишіть мені на мило