Для отримання даних з бази даних використовується мова SQL (Structured Query Language - мова структурованих запитів). SQL - це мова програмування, який дуже нагадує англійський, але призначений для програм управління базами даних. Знати мову SQL важливо, оскільки він використовується в кожному запиті в Microsoft Access. Розуміння принципів роботи SQL допомагає створювати поліпшені запити і спрощує виправлення запитів, які повертають неправильні результати.
Примітка: Змінити команду SQL для веб-запиту можна.
В цій статті
Що таке SQL?
SQL - це мова програмування, призначений для роботи з наборами фактів і відносинами між ними. У програмах керування базами даних, таких як Access, мова SQL використовується для роботи з даними. Як і багато мов програмування, SQL є міжнародним стандартом, визнаним такими комітетами по стандартизації, як ISO та ANSI.
Мовою SQL описуються набори даних, що допомагають отримати відповіді на питання. При використанні SQL необхідно застосовувати правильний синтаксис. Синтаксис - це набір правил, що дозволяють правильно поєднувати елементи мови. Синтаксис SQL заснований на синтаксисі англійської мови і має багато спільних елементів з синтаксисом мови Visual Basic для додатків (VBA).
Наприклад, проста інструкція SQL, витягує список прізвищ контактів з ім'ям Mary, може виглядати наступним чином:
Примітка: Мова SQL використовується не тільки для виконання операцій над даними, але ще і для створення і зміни структури об'єктів бази даних, наприклад таблиць. Та частина SQL, яка використовується для створення та зміни об'єктів бази даних, називається мовою опису даних DDL. Мова DDL не розглядається в цьому розділі. Додаткові відомості див. У статті Створення та зміна таблиць і індексів з використанням запитів визначення даних.
інструкції SELECT
Інструкція SELECT служить для опису набору даних на мові SQL. Вона містить повний опис набору даних, які необхідно отримати з бази даних, включаючи наступне:
таблиці, в яких містяться дані;
зв'язку між даними з різних джерел;
поля або обчислення, на основі яких відбираються дані;
умови відбору, яким повинні відповідати дані, що включаються в результат запиту;
необхідність і спосіб сортування.
пропозиції SQL
Інструкція SQL складається з декількох частин, які називаються пропозиціями. Кожна пропозиція в інструкції SQL має своє призначення. Деякі пропозиції є обов'язковими. У наведеній нижче таблиці вказані пропозиції SQL, використовувані найчастіше.
Загальний формат інструкції SQL:
Кожна інструкція SELECT закінчується крапкою з комою (;). Крапка з комою може стояти як в кінці останньої пропозиції, так і на окремому рядку в кінці інструкції SQL.
Приклад в Access
У наведеному нижче прикладі показано, як в Access може виглядати інструкція SQL для простого запиту на вибірку.
1. Пропозиція SELECT
2. Пропозиція FROM
3. Пропозиція WHERE
Розберемо приклад за пропозиціями, щоб зрозуміти, як працює синтаксис SQL.
пропозиція SELECT
У реченні SELECT не потрібно вказувати таблиці, в яких містяться поля, і не можна задати умови відбору, яким повинні відповідати дані, що включаються в результати.
В інструкції SELECT пропозицію SELECT завжди стоїть перед пропозицією FROM.
пропозиція FROM
Ця пропозиція FROM. Воно містить оператор (FROM), за яким слідує ідентифікатор (Контакти).
У реченні FROM не вказуються поля для вибірки.
пропозиція WHERE
Ця пропозиція WHERE. Воно містить оператор (WHERE), за яким слідує вираз (Місто = "Ростов").
Примітка: На відміну від пропозицій SELECT і FROM пропозицію WHERE є необов'язковим елементом інструкції SELECT.
За допомогою пропозицій SELECT, FROM і WHERE можна виконувати безліч дій. Додаткові відомості про використання цих пропозицій см. В розділах, зазначених в кінці цієї статті.
Сортування результатів: пропозиція ORDER BY
Як і в Microsoft Office Excel, в Access можна сортувати результати запиту в таблиці. Використовуючи пропозицію ORDER BY, в запиті також можна вказати спосіб сортування результатів при виконанні запиту. Якщо використовується пропозицію ORDER BY, воно повинно знаходитися в кінці інструкції SQL.
Пропозиція ORDER BY містить список полів, для яких потрібно виконати сортування, в тому ж порядку, в якому будуть застосована сортування.
Примітка: За замовчуванням в Access виконується сортування за зростанням (від А до Я, від найменшого до найбільшого). Щоб замість цього виконати сортування значень за спаданням, необхідно вказати ключове слово DESC.
Додаткові відомості про пропозицію ORDER BY см. В статті Пропозиція ORDER BY.
Робота зі зведеними даними: пропозиції GROUP BY і HAVING
Можливість вживання тієї чи іншої статистичної функції залежить від типу даних в поле або використовуваного вираження. Додаткові відомості про доступні статистичних функціях см. В статті Статистичні функції SQL.
Завдання полів, які не використовуються в статистичній функції: пропозиція GROUP BY
При використанні статистичних функцій зазвичай необхідно створити пропозицію GROUP BY. У реченні GROUP BY вказуються всі поля, до яких не застосовується статистична функція. Якщо статистичні функції застосовуються до всіх полів в запиті, пропозиція GROUP BY створювати не потрібно.
Пропозиція GROUP BY повинне слідувати відразу ж за пропозицією WHERE або FROM, якщо пропозиція WHERE відсутня. У реченні GROUP BY поля вказуються в тому ж порядку, що і в реченні SELECT.
GROUP BY Company
Додаткові відомості про пропозицію GROUP BY см. В статті Пропозиція GROUP BY.
Обмеження статистичних значень за допомогою умов угруповання: пропозиція HAVING
Якщо необхідно вказати умови для обмеження результатів, але поле, до якого їх потрібно застосувати, використовується в статистичній функції, пропозиція WHERE використовувати не можна. Замість нього слід використовувати пропозицію HAVING. Пропозиція HAVING працює так само, як і WHERE, але використовується для статистичних даних.
Припустимо, наприклад, що до першого поля в реченні SELECT застосовується функція AVG (яка обчислює середнє значення):
Примітка: Запит може включати і пропозиція WHERE, і пропозиція HAVING, при цьому умови відбору для полів, які не використовуються в статистичних функціях, вказуються в пропозиції WHERE, а умови для полів, які використовуються в статистичних функціях, - в пропозиції HAVING.
Додаткові відомості про пропозиції HAVING см. В статті Пропозиція HAVING.
Об'єднання результатів запиту: оператор UNION
Оператор UNION дозволяє об'єднати дві інструкції SELECT в одну. Об'єднуються інструкції SELECT повинні мати однакове число і порядок вихідних полів з такими ж або сумісними типами даних. При виконанні запиту дані з кожного набору відповідних полів об'єднуються в один вихідний поле, тому вихідні дані запиту мають стільки ж полів, скільки і кожна інструкція SELECT окремо.
Примітка: У запитах на об'єднання числовий і текстовий типи даних є сумісними.
Використовуючи оператор UNION, можна вказати, чи повинні в результати запиту включатися повторювані рядки, якщо такі є. Для цього слід використовувати ключове слово ALL.
Запит на об'єднання двох інструкцій SELECT має наступний базовий синтаксис:
Припустимо, наприклад, що є дві таблиці, які називаються «Товари» і «Послуги». Обидві таблиці містять поля з назвою товару або послуги, ціною і відомостями про гарантії, а також поле, в якому вказується ексклюзивність пропонованого товару або послуги. Незважаючи на те, що в таблицях «Продукти» і «Послуги» передбачені різні типи гарантій, основна інформація одна й та ж (чи надається на окремі продукти або послуги гарантія якості). Для об'єднання чотирьох полів з двох таблиць варто виконати такий запит на об'єднання:
Додаткові відомості про пропозицію SELECT
В інструкції SELECT в реченні SELECT перераховуються поля з даними, які потрібно використовувати.
Висновок ідентифікаторів в квадратні дужки
Ім'я поля в реченні SELECT можна зробити висновок в прямокутні дужки. Якщо ім'я не містить пробілів або спеціальних знаків (наприклад, розділових знаків), прямокутні дужки можна не використовувати. Якщо ім'я містить прогалини або спеціальні знаки, прямокутні дужки необхідні.
Порада: Ім'я, що містить прогалини, зручніше для сприйняття. Такий спосіб іменування може допомогти заощадити час при розробці форм і звітів, але при складанні інструкцій SQL доведеться вводити більше символів. Цей факт слід враховувати при присвоєнні імен об'єктам в базі даних.
Якщо інструкція SQL містить кілька полів з однаковими іменами, в реченні SELECT до імені кожного поля необхідно додати ім'я відповідного джерела даних. Як ім'я джерела даних потрібно використовувати той же ім'я, що і в реченні FROM.
Вибірка всіх полів
Щоб включити в запит всі поля з джерела даних, можна вказати їх все окремо в реченні SELECT або використовувати знак підстановки - зірочку (*). Якщо використовується зірочка, при виконанні запиту Access визначає, які поля містить джерело даних, і включає всі ці поля в запит. Це дозволяє забезпечити актуальність запиту в разі додавання в джерело даних нових полів.
Примітка: За використанням зірочки потрібно уважно стежити. Якщо пізніше в джерело даних будуть додані поля, які використовувати не планувалося, результати пошуку можуть виявитися не такими, як очікувалося.
Вибірка окремих значень
SELECT DISTINCT [txtCustomerPhone]
Використання псевдонімів полів або виразів: ключове слово AS
SELECT [txtCustPhone] AS [Customer Phone]
Примітка: Ім'я поля необхідно використовувати, якщо в реченні SELECT використовується вираз.
Використання виразу при вибірці
Іноді необхідно вивести результати обчислень, заснованих на обираних даних, або витягти лише частина даних поля. Припустимо, наприклад, що необхідно повернути рік народження для всіх клієнтів, використовуючи дані поля «деньнародженнєвий». Пропозиція SELECT може виглядати наступним чином:
SELECT DatePart ( "yyyy", [BirthDate]) AS [Birth Year]
Цей вислів містить функцію DatePart і два аргументи. "Yyyy" (константа) і [деньнародженнєвий] (ідентифікатор).
Як поля можна використовувати будь-яке припустиме вираз, якщо, беручи одне значення, воно повертає також одне значення.
Додаткові відомості про пропозицію FROM
У реченні FROM інструкції SELECT вказуються таблиці або запити, в яких містяться дані, які використовуються пропозицією SELECT.
Висновок ідентифікаторів в квадратні дужки
Ім'я можна зробити висновок в прямокутні дужки. Якщо ім'я не містить пробілів або спеціальних знаків (наприклад, розділових знаків), прямокутні дужки можна не використовувати. Якщо ім'я містить прогалини або спеціальні знаки, прямокутні дужки необхідні.
Порада: Ім'я, що містить прогалини, зручніше для сприйняття. Такий спосіб іменування може допомогти заощадити час при розробці форм і звітів, але при складанні інструкцій SQL доведеться вводити більше символів. Цей факт слід враховувати при присвоєнні імен об'єктам в базі даних.
Використання псевдонімів джерел даних
Для звернення до джерела даних в інструкції SELECT можна використовувати її псевдонім, вказавши його в реченні FROM. Ім'я користувача таблиці - це ім'я, призначене джерела даних в запиті при використанні в якості джерела даних вираження або для спрощення введення і прочитання інструкції SQL. Така можливість корисна, якщо ім'я джерела даних занадто довге або його важко вводити, особливо якщо є кілька полів з однаковими іменами з різних таблиць.
Наприклад, якщо необхідно вибрати дані з двох полів з ім'ям «ВД», одне з яких міститься в таблиці «таблКліент», а інше - в таблиці «таблЗаказ», пропозиція SELECT може виглядати наступним чином:
SELECT [tblCustomer]. [ID], [tblOrder]. [ID]
Використовуючи псевдоніми таблиць в реченні FROM, можна спростити введення запиту. Пропозиція FROM з псевдонімами таблиць може виглядати наступним чином:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
Ці псевдоніми таблиць можна використовувати в реченні SELECT наступним чином:
Примітка: При використанні псевдонімів на джерело даних можна посилатися в інструкції SQL як за псевдонімом, так і по його повного імені.
Об'єднання пов'язаних даних
Якщо в результатах запиту необхідно об'єднати пари записів з двох джерел даних в одинарні записи, можна виконати об'єднання. Об'єднання - це операція SQL, яка вказує спосіб зв'язку двох джерел даних і необхідність включення в результати даних з одного джерела в разі відсутності відповідних даних в іншому.
Для об'єднання даних з двох джерел слід виконати операцію об'єднання за загальним полю. Якщо значення цього поля збігаються, дані записів в результатах запиту об'єднуються.
Крім об'єднання даних операція об'єднання також використовується для вказівки того, чи потрібно включати в результати записи з будь-якої таблиці, якщо в пов'язаної з нею таблиці відсутня відповідна запис.
Припустимо, наприклад, що в запиті необхідно використовувати дані з двох таблиць - «таблКліент» і «таблЗаказ». Обидві таблиці містять поле «КліентІД», що визначає клієнта. Кожен запис в таблиці «таблКліент» може мати одну або кілька відповідних записів в таблиці «таблЗаказ», а відповідні значення визначаються значеннями в полі «КліентІД».
Якщо необхідно об'єднати таблиці таким чином, щоб в запиті об'єднувалися записи з цих таблиць за винятком тих записів, для яких відсутні відповідні записи в одній з таблиць, пропозиція FROM може виглядати наступним чином (розрив рядка доданий заради зручності читання):
У Microsoft Office Access оператор об'єднання вказується в пропозиції FROM інструкції SELECT. Існує два типи об'єднань - внутрішні і зовнішні. Вони описані в наступних розділах.
внутрішнє об'єднання
Внутрішнє об'єднання - це найпоширеніший тип об'єднання. При виконанні запиту з внутрішнім об'єднанням в результат включаються тільки ті записи, які мають однакові значення в обох об'єднуються таблицях.
Внутрішнє об'єднання має наступний синтаксис (розрив рядка доданий заради зручності читання):
У наведеній нижче таблиці представлені різні компоненти операції INNER JOIN.