Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

10.9. Синтаксис оператора вибору Select

Оператор вибору SELECT

З цієї інструкції повертає дані з бази даних у вигляді набору записів.

Синтаксис

SELECT {DISTINCT | ALL | TOP n [PERCENT]]}

{ * | таблиця.* | [таблиця.] поле [AS псевдонім_1]

[, вираз [AS псевдонім_2] [, ...]]}

FROM <список таблиць>.,..

[WHERE <умова відбору записів>]

[GROUP BY <рівні групування>.,..]

[HAVING <predicate>]

[ORDER BY <рівні сортування> [ASC | DESC].,..]

Перелік параметрів оператору SELECT наведено у табл. 10.11.

Таблиця 10.11

Перелік параметрів оператору SELECT

*

Вказує, що вибрано всі поля заданої таблиці або таблиць.

таблиця

Ім'я таблиці, з якої повинні бути відібрані записи.

поле

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

псевдонім_1, псевдонім_2

Імена, які стануть заголовками стовпців замість вихідних назв стовпців у таблиці.

вираз

Будь-який допустимий вираз

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

Імена однієї або декількох таблиць, які містять відбираємі дані.

Інструкції SELECT не змінюють дані в базі даних. Звичайно слово SELECT є першим словом інструкції SQL. Мінімальний синтаксис інструкції SELECT:

SELECT поля FROM таблиця

Для відбору всіх полів таблиці можна використовувати символ зірочки (*). Наступна інструкція відбирає всі поля з таблиці «Працівники»:

SELECT * FROM Працівники

Якщо кілька таблиць, включених до інструкції FROM, містять однойменні поля, перед ім'ям такого поля слід ввести ім'я таблиці й оператор . (крапка). Припустимо, що поле «Відділ» міститься в таблицях «Працівники» та «Начальники». Наступна інструкція SQL відбере поле «Відділ» з таблиці «Працівники» та поле «Керівник» з таблиці «Керівники»:

SELECT Працівники.Відділ, Керівники.Керівник

FROM Працівники INNER JOIN Керівники

WHERE Працівники.Відділ = Керівники.Відділ;

Якщо потрібно інше ім'я для поля, або вираз, що створює поле, не має імені, використовуйте зарезервоване слово AS. У наступному прикладі заголовок «Дата народження» стає ім'ям об'єкта

SELECT DR AS [Дата народження] FROM Працівники;

При роботі зі статистичними функціями або запитами, які повертають результат виразів, використовуйте інструкцію AS для завдання іншого імені об'єкта.

SELECT COUNT(Ім'я) AS Кількість FROM Працівники;

SELECT (Мат + Фіз + Твір)/3 AS СрБал FROM Екзамен;

Предикати ALL, DISTINCT, TOP

Дозволяють відібрати записи серед вибраних за допомогою запиту на мові SQL.

Синтаксис

SELECT [ALL | DISTINCT [TOP n [PERCENT]]]

FROM таблиця

Нижче перераховані аргументи інструкції SELECT, яка містять ці предикати (табл. 10.12):

Таблиця 10.12

Ключові слова оператору SELECT

ALL

Якщо інструкція SQL не містить жодного предиката, то мається на увазі предикат ALL. Наведені нижче інструкції SQL еквівалентні; вони повертають всі записи з таблиці «Працівники»:

SELECT ALL * FROM Співробітники

SELECT * FROM Співробітники

DISTINCT

Виключає записи, які містять повторювані значення у вибраних полях. Щоб запис був включеним в результат виконання запиту, значення в кожному полі, включеному до інструкції SELECT, повинні бути унікальними. Наприклад, у таблиці «Працівники» є однофамільці. Якщо два записи містять значення «Іванов» в полі «Прізвище», то така інструкція SQL поверне тільки одн із них:

SELECT DISTINCT Прізвище FROM Співробітники;

Якщо опустити предикат DISTINCT, цей запит поверне обидва записи для прізвища Іванов.

Якщо інструкція SELECT містить більше одного поля, то для включення запису в результат виконання запиту необхідно, щоб сукупність значень у всіх цих полях була унікальною.

TOP n [PERCENT]

Повертає певну кількість записів, які перебувають на початку або в кінці діапазону, описаного за допомогою інструкції ORDER BY. Наступна інструкція SQL дозволяє отримати список 25 кращих студентів випуску 2004 року:

SELECT TOP 25 Ім'я, Прізвище FROM Студенти

WHERE РікВипуска = 2004

ORDER BY СреднійБалл DESC;

Якщо інструкцію ORDER BY буде опущено, запит поверне довільний набір 25 записів з таблиці «Студенти», що задовольняють інструкцією WHERE.

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

Крім того, можна використовувати зарезервоване слово PERCENT для повернення певного відсотка записів, які перебувають на початку або в кінці діапазону, описаного за допомогою інструкції ORDER BY. Припустимо, що замість 25 кращих студентів слід відібрати студентів, що потрапили в останні 10 відсотків:

SELECT TOP 10 PERCENT Ім'я, Прізвище

FROM Студенти

WHERE РікВипуска = 2004

ORDER BY СреднійБалл ASC;

Предикат ASC забезпечує повернення останніх значень. Значення, наступне після предиката TOP має бути числовим значенням типу Integer без знака.

Інструкція FROM

Вказує таблиці або запити, які містять поля, перелічені в інструкції SELECT.

Синтаксис

SELECT списокПолів

FROM вираз

вираз

Вираз, що визначає одну або кілька таблиць, звідки беруться дані. Цей вираз може бути ім'ям окремої таблиці, ім'ям збереженого запиту або результатом операції INNER JOIN, LEFT JOIN або RIGHT JOIN.

Інструкція FROM повинна бути присутньою в кожній інструкції SELECT. Порядок проходження імен таблиць в аргументі виразу не суттєвий.

Наступний приклад показує, як відібрати дані з таблиці «Співробітники»:

SELECT Прізвище, Ім'я FROM Співробітники;

Операція INNER JOIN

Внутрішнє об'єднання. Об'єднує записи з двох таблиць, якщо з'єднувані поля цих таблиць містять однакові значення.

Синтаксис (табл. 10.13)

FROM таблиця_1 INNER JOIN таблиця_2 ON таблиця_1.поле_1 оператор таблиця_2.поле_2

Таблиця 10.13

Перелік параметрів операції INNER JOIN

таблиця_1, таблиця_2

Імена таблиць, записи яких підлягають об'єднанню.

поле_1, поле_2

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

оператор

Будь-який оператор порівняння: "=", "<", ">", "<=", "> =" або "<>".

Операцію INNER JOIN можна використовувати в будь-якій інструкції FROM. Це самі звичайні типи зв'язування. Вони об'єднують записи двох таблиць, якщо з'єднувані поля обох таблиць містять однакові значення.

Операцію INNER JOIN можна використовувати з таблицями «Відділи» і «Співробітники» для відбору всіх співробітників кожного відділу. Для відбору ж усіх відділів (у тому числі тих, в яких немає жодного співробітника) або всіх співробітників (у тому числі тих, хто не приписаний до жодного відділу) слід використовувати операцію LEFT JOIN або RIGHT JOIN, яка створює зовнішнє об'єднання.

Спроба поєднати поля Memo або об'єкта OLE призведе до виникнення помилки.

Допускається об'єднання будь-яких двох числових полів подібних типів. Наприклад, поле лічильника можна об'єднати з полем типу «Довге ціле». Однак не можна об'єднати типи полів Single і Double.

Наступна інструкція SQL об'єднує таблиці «Типи» і «Товари» по полю «КодТипу»:

SELECT Категорія, Марка

FROM Типи INNER JOIN Товари

ON Типи.КодТипу = Товари.КодТипу;

Щоб зв'язати кілька інструкцій ON в операторі JOIN, використовуйте такий синтаксис:

SELECT поля

FROM таблиця_1 INNER JOIN таблиця_2

ON таблиця_1.поле_1 оператор таблиця_2.поле_1 AND

ON таблиця_1.поле_2 оператор таблиця_2.поле_2) OR

ON таблиця_1.поле_3 оператор таблиця_2.поле_3)];

Операції JOIN можуть бути вкладеними; в такому разі використовуйте наступний синтаксис:

SELECT поля

FROM таблиця_1 INNER JOIN

(таблиця_2 INNER JOIN [(] таблиця_3

[INNER JOIN [(] таблиця_X [INNER JOIN ...)]

ON таблиця_3.поле_3 оператор таблиця_X.поле_X)]

ON таблиця_2.поле_2 оператор таблиця_3.поле_3)

ON таблиця_1.поле_1 оператор таблиця_2.поле_2;

Операції LEFT JOIN або RIGHT JOIN можуть бути вкладені в операцію INNER JOIN, але операція INNER JOIN не може бути вкладена в LEFT JOIN або RIGHT JOIN.

Операції LEFT JOIN, RIGHT JOIN

Об'єднують записи вихідних таблиць при використанні в будь-якій інструкції FROM.

Синтаксис (табл. 10.14)

FROM таблиця_1 [LEFT | RIGHT] JOIN таблиця_2

ON таблиця_1.поле_1 оператор таблиця_2.поле_2

Таблиця 10.14

Перелік параметрів операцій LEFT JOIN, RIGHT JOIN

таблиця_1, таблиця_2

Імена таблиць, записи яких підлягають об'єднанню.

поле_1, поле_2

Імена об'єднуваних полів. Поля повинні мати однаковий тип даних і містити дані одного роду, однак можуть мати різні імена.

Оператор

Будь-який оператор порівняння: "=", "<", ">", "<=", "> =" або "<>".

Операція LEFT JOIN використовується для створення лівого зовнішнього об'єднання. Ліве зовнішнє об'єднання включає всі записи з першої (лівої) таблиці, навіть якщо немає співпадаючих значень для записів з другої (правої) таблиці.

Операція RIGHT JOIN використовується для створення правого зовнішнього об'єднання. Праве зовнішнє об'єднання включає всі записи з другої (правої) таблиці, навіть якщо немає співпадаючих значень з записами з першої (лівої) таблиці.

Наприклад, операцію LEFT JOIN можна використовувати з таблицею «Відділи» (лівої) і «Співробітники» (правої) для відбору всіх відділень, включаючи ті, в яких немає працівників. Щоб відібрати всіх співробітників, включаючи не приписаних до жодного відділу, використовуйте операцію RIGHT JOIN.

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

SELECT Категорія, Марка

FROM Типи LEFT JOIN Товари

ON Типи.КодТипу = Товари.КодТипу;

Якщо потрібно включити в результат тільки ті записи, які мають однакові значення в сполучних полях, використовуйте операцію INNER JOIN.

Спроба об'єднати поля Memo або об'єкти OLE призведе до виникнення помилки.

Інструкція WHERE

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

Синтаксис

SELECT списокПолів

FROM вираз

WHERE умоваВідбору

Оператор SELECT, що містить інструкцію WHERE, яка складається з трьох частин (табл. 10.15):

Таблиця 10.15

Перелік параметрів інструкції WHERE

списокПолів

Імена одного або декількох полів, з яких відбираються дані, разом із псевдонімами, передикатами відбору (ALL, DISTINCT або TOP) і другими елементами інструкції SELECT.

вираз

Імена однієї або декількох таблиць, з яких відбираються дані.

умоваВідбору

Вираз, яким повинні задовольняти записи, що включаються в результат виконання запиту.

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

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

Інструкція WHERE не є обов'язковою, однак, якщо вона присутня, то має слідувати після інструкції FROM. Наприклад, можна відібрати всіх співробітників відділу продажів (WHERE Відділ = 'Продажі') або всіх клієнтів у віці від 18 до 30 років (WHERE Вік Between 18 And 30).

Інструкція WHERE вказує, які записи повинні бути відібрані. Використовуйте інструкцію WHERE для виключення записів з угрупування, виконуваної інструкції GROUP BY.

Допускається використання різних виразів. Наприклад, така інструкція SQL відбирає всіх співробітників, зарплата яких перевищує 810 000 рублів:

SELECT Прізвище, Оклад

FROM Співробітники

WHERE Оклад> 810000;

Інструкція WHERE може містити до 40 виразів, з'єднаних логічними операторами, такими як And і Or.

Імена полів, які містять пробіли або знаки пунктуації, слід брати у квадратні дужки ([]). Наприклад, в таблицю, яка містить відомості про клієнтів, можна включити відомості про звички клієнтів:

SELECT [Улюблений ресторан]

При вказівці аргументу умоваВідбору літерали дати (символи дат) повинні вводитися в американському форматі, навіть якщо використовується неамериканська версія ядра бази даних Jet. Наприклад, дата 10 травня 1996 записується в Росії як 10.05.96, а в США як 5/10/96. Обов'язково укладіть дати в символи «грати» (#), як показано в наступних прикладах.

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

SELECT *

FROM Замовлення

WHERE ДатаВиконання = #5/10/96#;

Крім того, можна застосовувати функцію DateValue, яка підтримує міжнародні стандарти, задані в Microsoft Windows ®. Наприклад, для відбору записів в американській базі даних створіть текст програми:

SELECT *

FROM Замовлення

WHERE ДатаВиконання = DateValue('5/10/96');

Для російської бази даних текст програми буде виглядати так:

SELECT *

FROM Замовлення

WHERE ДатаВиконання = DateValue('10.5.96');

Примітка. Якщо стовпець, на який є посилання в рядку умов, має тип GUID, використовується інший синтаксис:

WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}

Фігурні дужки і дефіси є обов'язковими.

Оператор Between ... And

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

Синтаксис

вираз [Not] Between значення_1 And значення_2

вираз

Вираз, який визначає поле, значення якого потрібно обчислити.

значення_1, значення_2

Вирази, що задають межі діапазону.

Якщо значення поля, визначеного в аргументі вираз, потрапляє в діапазон, що задається аргументами значення_1 і значення_2 (включно), оператор Between ... And повертає значення True, в іншому випадку повертається значення False. Логічний оператор Not дозволяє перевірити протилежну умову (що вираз знаходиться за межами діапазону, заданого за допомогою аргументів значення_1 і значення_2).

Оператор Between ... And часто використовують для перевірки, чи потрапляє значення поля в зазначений діапазон чисел. У наступному прикладі перевіряється, чи було замовлення відправлене в місце, індекс якого потрапляє у вказаний діапазон. Якщо значення індексу потрапляє в діапазон від 109000 тисяч до 109999, функція IIf повертає значення «Місцевий». В іншому випадку, вона повертає значення «Міжміський».

SELECT IIf (Індекс Between 109000 And 109999, "Місцевий", "Міжміський")

FROM Замовлення

Якщо вираз, значення_1 або значення_2 має значення Null, оператор Between ... And повертає значення Null.

Оскільки символи узагальнення (наприклад, знак *) вважаються текстовими символами, їх не можна використовувати в операторі Between ... And. Наприклад, не можна задати 980* і 989* для пошуку всіх індексів, що починаються з цифр від 980 до 989. Для виконання цього завдання скористайтеся іншими способами. Можна додати вираз до запиту, який відбирає у текстовому полі три лівих знака та застосовує до них оператор Between ... And. Або додайте до значень верхньої та нижньої межі відсутні знаки, в даному випадку від 98000 до 98999 або від 98000 до 98999 - 9999, якщо використовуються додаткові індекси (в США поштовий індекс може мати формат ХХХХХ-ХХХХ). (Для значення нижньої межі знаки - 0000 слід опустити. В іншому випадку індекс 98000 буде пропущено, якщо деякі індекси мають додаткові розділи, а інші ні).

Оператор In

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

Синтаксис

вираз [Not] In (значення_1, значення_2,...)

вираз

Вираз, який визначає поле, значення якого потрібно обчислити.

значення_1, значення_2

Вираз або список виразів, з якими порівнюється вираз.

Якщо вираз міститься у списку значень, оператор In повертає значення True, в іншому випадку повертається значення False. За допомогою логічного оператора Not можна перевірити зворотню умову (тобто, що вираз не належить списку значень).

У наступному прикладі оператор In використаний для визначення, які замовлення відправлені в зазначені області:

SELECT *

FROM Замовлення

WHERE МістоОтримувача In ('Київ', 'Харків', 'Одеса')

Оператор Like

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

Синтаксис

вираз Like "зразок"

вираз

Вираз SQL, що використовується в реченні WHERE.

зразок

Рядок, з яким порівнюється вираз.

Оператор Like використовується для знаходження в полі значень, що відповідають вказаному зразку. Для аргументу зразок можна задавати повне значення (наприклад, Like «Іванов») або використовувати символи узагальнення для пошуку діапазону значень (наприклад, Like «Ів*»).

Оператор Like використовується у виразі для порівняння значеннь поля зі строковим виразом. Наприклад, якщо в запиті SQL ввести Like "C*", запит поверне всі значення поля, що починаються на літеру "C". У запиті з параметрами можна запросити користувача вказати шуканий зразок.

У наступному прикладі повертаються дані, що починаються з літери «Р», за якою слідують будь-які літери від «А» до «Д» і три цифри:

Like "Р[А-Д]###"

Символи узагальнення

Вбудований засіб порівняння із зразком є універсальним інструментом для порівняння рядків. Наступна таблиця демонструє символи узагальнення, які використовуються з оператором Like, і кількість цифр або символів, яким вони відповідають (табл. 10.16).

Таблиця 10.16

Шаблонні символи оператору Like

Знак(и) в зразку

Відповідність у виразі

? або _ (підкреслення)

Будь-який одиночний знак.

* або %

Довільна кількість знаків.

#

Будь-яка одиночна цифра (0 - 9).

[список_знаків]

Будь-який одиночний знак, що входить у список_знаків.

[!список_знаків]

Будь-який одиночний знак, який не входить у список_знаків.

Група з одного або більше знаків (список_знаків), укладених у квадратні дужки ([]), використовується для встановлення співпадання з одним знаком вираження і може містити практично будь-які знаки з набору символів ANSI, включаючи цифри. Спеціальні знаки: відкриваюча квадратна дужка ([), знак питання (?), знак числа (#) і знак зірочки (*), - використовуються для встановлення збігу з ними, тільки будучи взятими в квадратні дужки. Закриваючу квадратну дужку (]) не можна застосовувати в групі для встановлення відповідності з нею самою, але вона може стояти поза групою як окремий знак.

Крім простого списку знаків, укладеного в квадратні дужки, список_знаків дозволяє задати діапазон знаків. Використовуйте знак переносу (-), щоб відокремити верхню межу діапазону від нижньої. Наприклад, позначення [A-Я] у зразку призводить до збігу, якщо відповідний текстовий знак у виразі містить одну з великих літер в діапазоні від A до Я. Кілька діапазонів поміщуються у квадратні дужки без спеціальних роздільників. Наприклад, [a-яA-Я0-9] відповідає будь-якій букві або цифрі.

Важливе зауваження: такі символи узагальнення ANSI SQL, як (%) і (_), доступні тільки при використанні ядра Microsoft ® Jet версії 4.X і програми Microsoft OLE DB Provider для Jet. При роботі з додатками Microsoft Access або DAO ці символи узагальнення сприймаються як рядкові константи.

Нижче перераховані інші важливі правила встановлення співпадання:

• Знак оклику (!) на початку списку_знаків означає, що співпадання настане, якщо у виразі буде знайдено будь-який знак, відсутній у списку. Знак оклику, використаний поза квадратних дужок, відповідає самому собі.

• Знак тире (-) можна використовувати на початку (після окличного знака, якщо він є) або в кінці списку_знаків для установлення відповідності із самим собою. У будь-якому іншому місці знак дефіса означає діапазон символів ANSI.

• Якщо вказаний діапазон знаків, його кордони повинні слідувати у зростаючому порядку (A-Я або 0-100). [A-Я] є правильним зразком, а [Я-A] - неправильним.

• Пара квадратних дужок [] ігнорується; вона розглядається як порожній рядок ("").

У таблиці 10.17 наведемо приклади використання шаблонних символів.

Таблиця 10.17

Приклади використання шаблонних символів оператору Like

Символ

Приклад

Використання

* або %

ст*знаходить «стіл», «стілець» і «стакан»

*ка знаходить «лампочка», «папка» і «миска»

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

? або _

л?пазнаходить «лапа», «липа» і «лупа»

Відповідає будь-якому одиночному символу.

#

1#3знаходить 103, 113, 123

Відповідає будь-якій одиночній цифрі.

[]

л[аи]пазнаходить «лапа» і «липа», але не «лупа»

Відповідає будь-якому символу, розташованому в квадратних дужках.

!

л[!аи]пазнаходить «лупа», але не «лапа» і не «липа»

Відповідає будь-якому символу, не включеного до списку.

-

б[а-в]дзнаходить «бад», «ббд» і «бвд»

Відповідає будь-якому символу з діапазону символів.

Примітка. Символи узагальнення * (зірочка), ? (запитальний знак), # (знак числа) і [ (відкриваюча квадратна дужка) розглядається як зразок для пошуку цього символу тільки при заключені їх у квадратні дужки.

Інструкція GROUP BY

Об'єднує записи з однаковими значеннями в зазначеному списку полів в один запис. Якщо інструкція SELECT містить статистичну функцію SQL, наприклад Sum або Count, то для кожного запису буде обчислено підсумкове значення.

Інструкція GROUP BY не є обов'язковою.

Підсумкові значення не розраховуються, якщо інструкція SELECT не містить статистичної функції SQL.

Значення Null, які знаходяться в полях, заданих в інструкції GROUP BY, групуються і не пропускаються. Проте статистичні функції SQL не обробляють значення Null.

Використовуйте інструкцію WHERE для виключення записів з угрупування, а інструкцію HAVING для застосування фільтра до записів після групування.

Якщо поле, яке включене до інструкції GROUP BY, не є полем типу Memo або об'єктом OLE, воно може містити посилання на всі поля, перераховані в інструкції FROM, навіть якщо це поле не включено до інструкції SELECT, за умови, що інструкція SELECT містить, принаймні, одну статистичну функцію SQL. Ядро бази даних Microsoft ® Jet не підтримує групування полів МЕМО або об'єктів OLE.

При використанні інструкції GROUP BY всі поля у списку полів інструкції SELECT повинні бути або включені в пропозицію GROUP BY, або використовуватися в якості аргументів статистичної функції SQL.

Інструкція HAVING

Визначає, які згруповані записи відображаються при використанні інструкції SELECT з інструкцією GROUP BY. Після того як записи будуть згруповані за допомогою інструкції GROUP BY, HAVING відбере ті з отриманих записів, які задовольняють умовам відбору, зазначеним в інструкції HAVING.

Синтаксис

[HAVING умовиГрупування]

умовиГрупування

Вираз, що визначає, які згруповані записи слід відображати.

Інструкція HAVING є необов'язковою і вона схожа на інструкцію WHERE, яке визначає, які записи повинні бути відібрані. Після того як записи будуть згруповані за допомогою інструкції GROUP BY, HAVING вказує, які з отриманих записів повинні бути відібрані:

SELECT КодТіпа, Sum(НаСкладі)

FROM Товари

GROUP BY КодТипу

HAVING Sum(НаСкладі) > 100 And Like "МА*";

Інструкція HAVING може містити до 40 виразів, об’єднанними логічними операторами, такими як And і Or.

Інструкція ORDER BY

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

Синтаксис

[ORDER BY поле_1 [ASC | DESC] [,

поле_2 [ASC | DESC]] [, ...]]]

поле_1, поле_2

Імена полів, за якими сортуються записи.

Інструкція ORDER BY не є обов'язковою. Проте вона необхідна для відображення даних у порядку сортування.

За замовчуванням використовується порядок сортування за зростанням (від «A» до «Я» і від 0 до 9). Обидві наведені нижче інструкції SQL однаково сортують записи за прізвищами працівників:

SELECT Прізвище, Ім'я

FROM Співробітники

ORDER BY Прізвище;

SELECT Прізвище, Ім'я

FROM Співробітники

ORDER BY Прізвище ASC;

Для сортування за спаданням (від «Я» до «A» і від 9 до 0), слід додати зарезервоване слово DESC після імені кожного поля, яке потрібно відсортувати в спадному порядку. У наведеній нижче інструкції SQL відбір відбувається на основі окладів, які сортуються за спаданням:

SELECT Прізвище, Оклад

FROM Співробітники

ORDER BY Оклад DESC, Прізвище;

При включенні поля Memo або об'єкта OLE в інструкцію ORDER BY виникає помилка.

Інструкція ORDER BY зазвичай є останнім елементом інструкції SQL. Інструкція ORDER BY може містити декілька полів. Спочатку записи сортуються по першому полю в списку ORDER BY. Потім записи, що мають співпадаючі значення в першому полі, сортуються по другому полю і т. д.

Операція UNION

Створює запит на об'єднання, який об'єднує результати кількох незалежних запитів або таблиць.

Синтаксис

[TABLE] запрос_1 UNION [ALL] [TABLE] запрос_2 [UNION [ALL] [TABLE] запрос_n [... ]]

запрос_1-n

Оператор SELECT, ім'я збереженого запиту або ім'я збереженої таблиці, перед яким стоїть зарезервоване слово TABLE.

В одній операції UNION можна об'єднати в будь-якому наборі результати декількох запитів, таблиць і операторів SELECT. У наступному прикладі об'єднується існуюча таблиця «Нові рахунки» та інструкції SELECT:

TABLE [Нові рахунки] UNION ALL

SELECT *

FROM Клієнти

WHERE СуммаЗаказа> 1000;

За замовчуванням повторювані записи не повертаються при ви-користанні операції UNION, проте в неї можна додати предикат ALL, щоб гарантувати повернення всіх записів. Крім того, такі запити виконуються швидше.

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

Використовуйте псевдоніми тільки в першому реченні SELECT, тому що в інших вони пропускаються. У інструкції ORDER BY посилайтеся на поля за їх назвами в першому реченні SELECT.

Примітки

• У кожному аргументі запиту допускається використання інструкції GROUP BY або HAVING для групування даних, що повертаються.

• У кінець останнього аргументу запиту можна включити інструкцію ORDER BY, щоб відсортувати повернені дані.

Інструкція DELETE

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

Синтаксис

DELETE [таблиця .*]

FROM таблиця

WHERE умоваВідбору

таблиця

Ім'я таблиці, з якої видаляються записи.

умоваВідбору

Вираз, що визначає записи для видалення.

Інструкція DELETE особливо зручна для видалення великої кількості записів.

Щоб видалити з бази даних цілу таблицю, можна використовувати метод Execute разом з інструкцією DROP. Однак при такому видаленні таблиці втрачається її структура. Якщо ж застосувати інструкцію DELETE, видаляються тільки дані. При цьому зберігаються структура таблиці і всі інші її властивості, такі як атрибути полів та індекси.

Інструкцію DELETE можна використовувати для видалення записів з таблиць, пов'язаних відношенням "один-до-багатьох" з іншими таблицями. Операції каскадного видалення призводять до видалення записів з таблиць, що знаходяться на стороні відношення "багато", коли в запиті видаляється відповідний їм запис на стороні "один". Наприклад, у відношенні між таблицями "Клієнти" і "Замовлення", таблиця "Клієнти" розташована на стороні "один", а таблиця "Замовлення" на стороні "багато". Якщо дозволено каскадне видалення, то видалення запису з таблиці "Клієнти" призводить до видалення відповідних записів з таблиці "Замовлення".

Запит на видалення видаляє записи цілком, а не тільки вміст вказаних полів. Щоб видалити дані в конкретному полі, слід створити запит на оновлення, який замінює наявні значення на значення Null.

Увага!

• Не можна відновити записи, вилучені з допомогою запиту на видалення. Щоб дізнатися, які записи будуть видалені, перегляньте спочатку результати запиту на вибірку, який використовує ті ж самі умови відбору, а потім виконайте запит на видалення.

• Регулярно виконуйте резервування даних. Ненавмисно видалені записи можуть бути відновлені за резервної копії.

Інструкція UPDATE

Створює запит на оновлення, який змінює значення полів зазначеної таблиці на основі заданої умови відбору.

Синтаксис (табл. 10.18)

UPDATE таблиця

SET новеЗначення

WHERE умоваВідбору;

Таблиця 10.18

Перелік параметрів інструкції UPDATE

таблиця

Ім'я таблиці, дані в якій слід змінити.

новеЗначення

Вираз, що визначає значення, яке має бути вставлено в зазначене поле оновлених записів.

умоваВідбору

Вираз, відбирає записи, які повинні бути змінені. При виконанні цієї інструкції будуть змінені тільки записи, що задовольняють вказаним умовам.

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

Одночасно можна змінити значення декількох полів. Наступна інструкція SQL збільшує вартість замовлення на 10 відсотків, а вартість доставки на 3 відсотки:

UPDATE Замовлення

SET СумаЗаказу = СумаЗаказу * 1.1,

ВартістьДоставки = ВартістьДоставки * 1.03

WHERE КраїнаОтримувача = 'Грузія';

Увага!

• Інструкція UPDATE не призводить до створення результуючого набору записів. Щоб дізнатися, які записи будуть змінені, спочатку перегляньте результати запиту на вибірку, який використовує ті ж самі умови відбору, а потім виконайте запит на оновлення записів.

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

Інструкція INSERT INTO

Додає запис або записи в таблицю. Ця інструкція утворює запит на додавання записів.

Синтаксис (табл. 10.19)

Запит на додавання кількох записів:

INSERT INTO призначення [IN зовнішняБазаДаних] [(поле_1 [, поле_2 [, ...]])]

SELECT [джерело.] Поле_1 [, поле_2 [, ...]

FROM вираз

Запит на додавання одного запису:

INSERT INTO призначення [(поле_1 [, поле_2 [, ...]])]

VALUES (значення_1 [, значення_2 [, ...])

Таблиця 10.19

Перелік параметрів інструкції INSERT INTO

призначення

Ім'я таблиці або запиту, до якого додаються записи.

зовнішняБазаДаних

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

джерело

Ім'я таблиці або запиту, звідки копіюються записи.

поле_1, поле_2

Імена полів для додавання даних, якщо вони слідують за аргументом призначення; імена полів, з яких беруться дані, якщо вони слідують за аргументом джерела.

вираз

Імена таблиці або таблиць, звідки вставляються дані. Цей вираз може бути ім'ям окремої таблиці або результатом операції INNER JOIN, LEFT JOIN або RIGHT JOIN, а також збереженим запитом.

значення_1, значення_2

Значення, що додаються в зазначені поля нового запису. Кожне значення буде вставлено в поле, займає те ж положення в списку: значення_1 вставляється в поле_1 в новому записі, значення_2 в поле_2 і т.д. Кожне значення текстового поля потрібно брати у лапки (''); для розділення значень використовуйте коми.

Інструкцію INSERT INTO можна використовувати для додавання одного запису в таблицю за допомогою запиту на додавання одного запису, описаного вище. У цьому випадку інструкція містить ім'я і значення кожного поля запису. Треба визначити всі поля запису, в які буде поміщено значення, і значення для цих полів. Якщо поля не визначено, в яких бракує стовпці буде вставлено значення за замовчуванням або значення Null. Записи додаються в кінець таблиці.

Інструкцію INSERT INTO можна також використовувати для додавання набору записів з іншої таблиці або запиту за допомогою інструкції SELECT ... FROM, як показано вище в запиті на додаваня декількох записів. У цьому випадку, інструкція SELECT визначає поля, що додаються в зазначену таблицю призначення.

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

Інструкція INSERT INTO є необов'язковою, однак, якщо вона присутня, то повинна знаходитися перед інструкцією SELECT.

Якщо результуюча таблиця містить ключ, переконайтеся, що в ключове поле (або поля) додаються унікальні непорожні значення; в іншому разі записи додаватися не будуть.

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

При додаванні записів до таблиці в іншій базі даних використовуйте інструкцію IN.

Для створення нової таблиці використовуйте інструкцію SELECT ... INTO замість запиту на створення таблиці.

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

Запит на додавання записів копіює записи з однієї або декількох таблиць в іншу таблицю. Таблиці, які містять додаваємі записи, не змінюються.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]