Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Загальна характеристика мови структурованих запитів SQL. Синтаксис команди select.

Поиск

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

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

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

Розрізняють два основних методи використання SQL:

Статистичне використання мови в тексті програми присутні виклики функцій мови SQL, які строго включаються в виконуваний модуль після компіляції.

Динамічне використання припускає динамічну побудову викликів SQL-функій і інтерпретацію даних викликів.

Основним призначенням мови SQL є підготовка і виконання запитів.

Команда SELECT

Команда SELECT присутня в будь-якiй реалiзацiї мови SQL. Її призначення — створення запиту на вибирання даних з однiєї чи декiлькох таблиць БД. Результатом виконання запиту є таблиця (ми будемо називати її результуючою).

Загальний синтаксис команди SELECT наступний:

SELECT список полiв

FROM список таблиць

WHERE умова вибору рядка

GROUP BY специфiкацiя групування

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

ORDER BY специфiкацiя сортування

Взагалi кажучи, синтаксис команди SELECT досить гнучкий, не всi її елементи обов’язково вказувати. Нижче на прикладах будуть розглянутi рiзнi варiанти запитiв — вiд простих до складних. Введемо наступний текст:

SELECT *

FROM Товари

та натиснемо на панелi iнструментiв кнопку, щоб виконати запит. Вiдразу з’явиться таблиця, в якiй будуть вiдображенi результати виконання запиту. Щоб повернутись до редагування тексту запиту, потрiбно знову клацнути поблизу першої кнопки на панелi iнструментiв та вибрати пункт Режим SQL у випадаючому меню; iнший спосiб — клацнути правою кнопкою мишки на заголовку вiкна з результуючою таблицею та у локальному меню вибрати пункт Режим SQL. При наступних сеансах роботи з ACCESS збережений запит можна вiдкрити, клацнувши двiчi на його iменi на вкладцi Запросы. Введений нами запит дуже простий — вiн заставляє СУБД вибрати всi поля та всi записи з таблицi Товари, а тому результат запиту буде тотожнiм самiй таблицi Товари. Це робиться тому, що ми не вказали, нi якi саме поля потрiбно вибирати, нi за яким критерiєм вiдбирати записи. Символ * означає, що потрiбно вибрати всi поля таблицi, але в командi SELECT можна явно вказати, якi поля потрiбно вибрати. Наприклад, для того, щоб до результатiв запиту потрапили лише поля Найменування та Цiна, змiнимо запит наступним чином:

SELECT Найменування, Цiна

FROM Товари

Треба зробити зауваження. ACCESS допускає, щоб в iменах полiв та іменах таблиць зустрiчались спецiальнi символи та пробiл. В цьому випадку в командi SELECT iм’я поля потрiбно помiстити в квадратнi дужки. Наприклад, якби поле КатегорiяТовару писалося через пробiл, то в запит мiг би бути таким:

SELECT Найменування, Цiна, [Категорiя Товару]

FROM Товари

В принципi, в квадратнi дужки можна помiстити кожне iм’я поля:

SELECT [Найменування], [Цiна], [КатегорiяТовару]

FROM Товари

Є можливiсть змiнювати назви полiв в результуючiй таблицi. Наприклад, якщо ми бажаємо, щоб поля Найменування та Цiна увiйшли до результуючої таблицi пiд псевдонiмами Name та Price, напишемо такий запит:

SELECT Найменування AS Name, Цiна AS Price

FROM Товари

Треба бути уважним при введеннi запиту. Достатньо помилково ввести назву таблицi чи поля, як ACCESS вважатиме її за назву параметру i перед виконанням запиту видасть дiалогове вiкно, в якому запропонує ввести значення параметру.


 

Групування записів та використання агрегуючих функцій мови SQL.

Групування записів

При розгляді деякої таблиці Товари. Кожний з видiв товару, перерахований в нiй, вiдноситься до певної категорiї, а тому записи можна об’єднати в групи на основi значення поля Категорiя. Оскiльки поле Категорiя мiстить 7 рiзних значень, то i груп повинно утворитися також 7. Щоб вказати, що повинно здiйснюватись групування, потрiбно до тексту запиту включити рядок

GROUP BY Категорiя

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

Для iлюстрацiї сказаного виконаємо такий запит:

SELECT Категорiя,

Count(*) AS Кiлькiсть,

Min(Цiна) AS [Мiнiмальна цiна],

Max(Цiна) AS [Максимальна цiна]

FROM Товари

GROUP BY Категорiя

Результуюча таблиця має 7 рядкiв — по кiлькостi груп. В першому полi йдуть значення категорiй. Ще раз пiдкреслимо, що групування здійснюється за полем Категорiя, а тому в окрему групу потрапляють записи з однаковим значенням поля Категорiя. Функцiя Count(*), застосована до кожної групи, дає кiлькiсть записiв, якi потрапили в окрему групу — цi значення перерахованi в другому стовпцi. Функцiї Min та Max обчислюють мiнiмальне та максимальне значення в полi Цiна для записiв в окремiй групi.

В принципi, групування можна здiйснювати за будь-яким полем таблицi; при цьому буде утворюватись стiльки ж груп, скiльки унiкальних значень мiстить поле. Зокрема, якщо всi значення в полi рiзнi

Дещо модифiкуємо запит, а саме: пiсля ключового слова WHERE додамо умову Цiна<=1000:

SELECT Категорiя,

Count(*) AS Кiлькiсть,

Min(Цiна) AS [Мiнiмальна цiна],

Max(Цiна) AS [Максимальна цiна]

FROM Товари

WHERE Цiна <= 1000

GROUP BY Категорiя

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

Умова, вказана пiсля HAVING, застосовується пiсля групування; в даному випадку вона означає, що до результуючої таблицi будуть включенi данi лише про тi групи, якi складаються з трьох та бiльше записiв.

Взагалi, умова HAVING дiє аналогiчно умовi WHERE, але застосовується до груп. WHERE накладає умови на записи, а HAVING — на групи, а тому в умовi WHERE не можуть стояти агрегуючi функцiї. Спiльна робота GROUP BY та WHERE вiдбувається наступним чином. Спочатку в таблицi шукаються всi записи, якi вiдповiдають умовам WHERE, а потiм GROUP BY роздiляє вiдiбранi записи на групи. Аж пiсля цього серед створених груп вiдбираються тi, якi задовольняють умовi HAVING.

Агрегуючі функції

Замiсть списку полiв, який фiгурує в командi SELECT, можна вписати спецiальнi функцiї, якi називаються агрегуючими i застосовуються для отримання узагальнюючих значень — наприклад, суми або середнього значення по стовпцю. Найважливiшi серед агрегуючих функцiй такi:

Функцiя Призначення
Avg(поле) Середнє арифметичне непустих значень, якi мiстяться у вказаному полi
Count(поле) Кiлькiсть непустих значень у вказаному полi
Count(*) Загальна кiлькiсть записiв у таблицi, включаючи записи, якi мiстять пустi значення
Sum(поле) Сума значень у вказаному полi
Min(поле) Найменше значення серед значень, якi мiстяться в полi
Max(поле) Найбiльше значення серед значень, якi мiстяться в полi
First(поле) Значення поля з першого рядка таблицi
Last(поле) Значення поля з останнього рядка таблицi

Виконаємо такий запит:

SELECT Count(*) AS [Кiлькiсть записiв],

Sum(Цiна) AS Сума,

Avg(Цiна) AS [Середня цiна]

FROM Товари

Як бачимо, в цiй таблицi три поля: перше мiстить кiлькiсть записiв в таблицi Товари, обчислене за допомогою функцiї Count(*), друге — суму значень з поля Цiна _, третє — середнє значення поля Цiна.

 



Поделиться:


Последнее изменение этой страницы: 2016-07-11; просмотров: 384; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.37.178 (0.008 с.)