Готові запити sql. Прості запити на вибір даних засобами SQL. Вибірка всіх стовпців
Отже, у БД forum є три таблиці:
· users (користувачі);
· topics (теми);
· Posts (повідомлення).
Необхідно подивитися, які дані містяться. Для цього в SQL існує оператор SELECT. Синтаксис його використання наступний:
SELECT що_вибрати FROM звідки_вибрати;
Замість «що_вибрати» необхідно вказати або ім'я стовпця, значення якого хочемо побачити, або імена кількох стовпців через кому, або символ зірочки (*), що означає вибір усіх стовпців таблиці. Замість «звідки вибрати» слід вказати ім'я таблиці.
Спочатку подивимося всі стовпці з таблиці users:
SELECT * FROM users;
Це всі дані, які були внесені до таблиці.
Припустимо, що необхідно подивитися тільки стовпець id_user (оскільки для заповнення таблиці topics (теми) треба знати, які id_user є в таблиці users). Для цього у запиті вкажемо ім'я цього стовпця:
SELECT id_user FROM users;
Якщо необхідно подивитися, наприклад, імена та e-mail користувачів, то треба перерахувати стовпці, що цікавлять, через кому:
SELECT name, email FROM users;
Аналогічно можна подивитися, які дані містять й інші таблиці.
Спочатку подивимося, які теми:
SELECT * FROM topics;
Зараз у таблиці лише 4 теми, а якщо їх буде 100? Хотілося б, щоб вони виводилися, наприклад, за абеткою. Для цього в SQL існує ключове слово ORDER BY, після якого вказується ім'я стовпця, яким відбуватиметься сортування. Синтаксис наступний:
SELECT ім'я_стовпця FROM ім'я_таблиці ORDER BY ім'я_стовпця_сортування;
За умовчанням сортування йде за зростанням, але це можна змінити, додавши ключове слово DESC.
Тепер дані відсортовані в порядку спадання.
Сортування можна проводити відразу кількома стовпцями. Наприклад, наступний запит відсортує дані по стовпцю topic_name, і якщо в цьому стовпці буде кілька однакових рядків, то в стовпці id_author буде здійснено сортування за спаданням:
Порівняйте результат із результатом попереднього запиту.
Дуже часто користувачеві не потрібна вся інформація з таблиці. Наприклад, необхідно дізнатися, які теми було створено користувачем sveta (id = 4). Для цього у SQL є ключове слово WHERE, синтаксис такий запит:
SELECT имя_столбца FROM имя_таблицы WHERE умова;
Для прикладу умовою є ідентифікатор користувача, тобто. потрібні лише ті рядки, у стовпці id_author яких стоїть 4 (ідентифікатор користувача sveta):
SELECT * FROM topics WHERE id_author=4;
Тепер необхідно дізнатися, хто створив тему "велосипеди":
Звичайно, було б зручніше, щоб замість id автора виводилося його ім'я, але імена зберігаються в іншій таблиці. Далі розглянемо, як вибирати дані з кількох таблиць. А поки що дізнаємося, які умови можна задавати, використовуючи ключове слово WHERE.
Оператор | Опис |
= (Рівно) | Відбираються значення, що рівні зазначеному. ![]() |
Приклад: SELECT * FROM topics WHERE id_author = 4; | Результат: ![]() |
< (меньше) | > (більше)< 3;
Результат:
![]() |
Відбираються значення більше, ніж зазначене. | Приклад: SELECT * FROM topics WHERE id_author > 2; ![]() |
<= (меньше или равно) | Результат:<= 3;
Результат:
![]() |
Відбираються значення менше вказаного. | Приклад: SELECT * FROM topics WHERE id_author ![]() |
>= (більше чи одно) | Відбираються значення великі та рівні зазначеному. ![]() |
Приклад: SELECT * FROM topics WHERE id_author> = 2; | Результат: ![]() |
Приклад: SELECT * FROM topics WHERE id_author | != (Не рівно) ![]() |
Відбираються значення не рівні вказаному. | Приклад: SELECT * FROM topics WHERE id_author! = 1; ![]() |
Результат: | IS NOT NULL ![]() |
Відбираються рядки, що мають значення у вказаному полі. | Приклад: SELECT * FROM topics WHERE id_author IS NOT NULL; ![]() |
IS NULL | Відбираються рядки, які мають значення у вказаному полі. ![]() |
Приклад: SELECT * FROM topics WHERE id_author IS NULL; Результат: Empty set – немає таких рядків. BETWEEN (між).
Коли ми з Вами робили вибірку з однієї таблиці, все було дуже просто:
SELECT назви_потрібних_полів FROM назва_таблиці WHERE умова_вибірки
Все дуже просто і тривіально, але при вибірці відразу з кількох таблицьстає дещо складніше. Одна з труднощів – це збіг імен полів. Наприклад, у кожній таблиці є поле id.
Давайте розглянемо такий запит:
SELECT * FROM table_1, table_2 WHERE table_1.id > table_2.user_id
Багатьом, хто не займався подібними запитами, здасться, що все дуже просто, подумавши, що тут додалися лише назви таблиць перед назвами полів. Фактично це дозволяє уникнути протиріч між однаковими іменами полів. Однак, складність не в цьому, а в алгоритм роботи подібного SQL-запиту.
Алгоритм роботи наступний: береться перший запис з table_1. Береться idцього запису з table_1. Далі повністю виглядає таблиця table_2. І додаються всі записи, де значення поля user_idменше idвибраного запису в table_1. Таким чином, після першої ітерації може з'явитися від 0 до нескінченної кількостірезультуючих записів. На наступній ітерації береться наступний запис таблиці table_1. Знову проглядається вся таблиця table_2, і знову спрацьовує умову вибірки table_1.id > table_2.user_id. Всі записи, що задовольнили цю умову, додаються до результату. На виході може вийти дуже багато записів, у багато разів перевищують сумарний обсяг обох таблиць.
Якщо Ви зрозуміли, як це працює після першого разу, то дуже здорово, а якщо ні, то читайте доти, доки не вникнете остаточно. Якщо Ви це зрозумієте, далі буде простіше.
Попередній SQL-запитяк такий, рідко використовується. Він був просто дано для пояснення алгоритму вибірки з кількох таблиць. А тепер же розберемо більш присадкуватий SQL-запит. Допустимо, у нас є дві таблиці: з товарами (є поле owner_id, відповідального за idвласника товару) та з користувачами (є поле id). Ми хочемо одним SQL-запитомотримати всі записи, причому щоб у кожній була інформація про користувача та його один товар. У наступному записі була інформація про того ж користувача і наступний його товар. Коли товари цього користувача закінчаться, переходити до наступного користувача. Таким чином, ми повинні з'єднати дві таблиці та отримати результат, в якому кожен запис містить інформацію про користувача та про один його товар.
Подібний запит замінить 2 SQL-запити: на вибірку окремо з таблиці з товарами та з таблиці з користувачами. До того ж, такий запит одразу поставить у відповідність користувача та його товар.
Сам запит дуже простий (якщо Ви зрозуміли попередній):
SELECT * FROM users, products WHERE users.id = products.owner_id
Алгоритм тут вже нескладний: береться перший запис таблиці users. Далі береться її idта аналізуються всі записи з таблиці products, додаючи в результат ті, у яких owner_idдорівнює idз таблиці users. Таким чином, на першій ітерації збираються усі товари у першого користувача. На другій ітерації збираються всі товари другого користувача і таке інше.
Як бачите, SQL-запити на вибірку з кількох таблицьне найпростіші, але користь від них буває колосальна, тому знати та вміти використовувати подібні запити дуже бажано.
Ви новачок у програмуванні або просто раніше уникали вивчення SQL? Тоді ви потрапили за потрібною адресою, тому що будь-який розробник зрештою стикається з необхідністю знати цю мову запитів. Нехай ви не будете головним дизайнером баз даних, але роботи з ними уникнути практично неможливо. Я сподіваюся, цей короткий огляд синтаксису основних SQL-запитів допоможе зацікавленому розробнику і будь-кому, кому це знадобиться.
Що таке база даних SQL?
Структурована мова запитів (Structured Query Language) – стандарт комунікації з базою даних, підтриманий ANSI. Остання версія - SQL-99, хоча новий стандарт SQL-200n вже знаходиться в розробці. Більшість баз даних твердо дотримуються стандарту ANSI-92. Було багато обговорень з приводу введення більш сучасних стандартів, але виробники комерційних баз даних відхиляються від цього, розвиваючи свої нові концепції маніпуляції даних, що зберігаються. Майже кожна окрема база даних використовує деякий унікальний набір синтаксису, хоч і дуже подібного до стандарту ANSI. У більшості випадків цей синтаксис є розширенням базового стандарту, хоча бувають випадки, коли такий синтаксис призводить до різних результатів для різних баз даних. Завжди непоганою ідеєю буде перегляд документації до бази даних, особливо якщо виходять несподівані результати.
Якщо ви вперше зустрічаєтеся з SQL, необхідно ознайомитися з основними концепціями, які потрібно зрозуміти.
У загальних термінах, SQL база даних є загальною назвою для реляційної системи управління базами даних (РСУБД). Для деяких систем, база даних також відноситься до групи таблиць, даних, конфігураційної інформації, які є невід'ємно окремою частиною від інших, подібних конструкцій. У цьому випадку кожна інсталяція SQL бази даних може складатися з декількох баз даних. В інших системах вони згадуються як таблиці.
Таблиця - конструкція бази даних, що складається зі стовпців, що містять рядки даних. Зазвичай таблиці створені у тому, щоб містити пов'язану інформацію. У межах тієї ж бази даних можуть бути створені кілька таблиць.
Кожен стовпець є атрибутом або сукупністю атрибутів об'єктів, наприклад ідентифікаційні номери службовців, зростання, колір машин тощо. Часто стосовно стовпця використовується термін поле із зазначенням імені, наприклад «у полі Name». Поле рядка мінімальний елемент таблиці. Кожен стовпець у таблиці має певне ім'я, тип даних та розмір. Імена стовпців мають бути унікальні в межах таблиці.
Кожен рядок (або запис) є сукупністю атрибутів конкретного об'єкта, наприклад, у рядку може міститися ідентифікаційний номер службовця, розмір його зарплати, рік народження і т.д. Рядки таблиць не мають назв. Щоб звернутися до конкретного рядка, користувачеві необхідно вказати якийсь атрибут (або набір атрибутів), що унікально його ідентифікує.
Однією з найважливіших операцій, які виконуються під час роботи з даними, є вибірка інформації, що зберігається в базі даних. Для цього користувач повинен виконати запит (query).
Тепер розглянемо основні типи запитів до бази даних, які зосереджені на маніпуляції даними в межах бази. Для наших цілей всі приклади наведені в стандартному SQL, щоб відповідати будь-якому середовищу.
Типи запитів даних
Є чотири основні типи запитів даних у SQL, які відносяться до так званої мови маніпулювання даними (Data Manipulation Language або DML):
SELECT - вибрати рядки з таблиць;
INSERT – додати рядки до таблиці;
UPDATE – змінити рядки у таблиці;
DELETE – видалити рядки у таблиці;
Кожен із цих запитів має різні оператори та функції, які використовуються для того, щоб зробити якісь дії з даними. Запит SELECT має найбільшу кількість опцій. Існують також додаткові типи запитів, які використовуються разом із SELECT, типу JOIN та UNION. Але поки що, ми зосередимося лише на основних запитах.
Використання запиту SELECT для вибору потрібних даних
Щоб отримати інформацію, що зберігається в базі даних, використовується запит SELECT. Базова дія цього запиту обмежена однією таблицею, хоча існують конструкції, що забезпечують вибірку з кількох таблиць одночасно. Для того, щоб отримати всі рядки даних для специфічних стовпців, використовується запит такого виду:
SELECT column1, column2 FROM table_name;
Також можна отримати всі стовпці з таблиці, використовуючи знак підстановки «*»:
SELECT * FROM table_name;
Це може бути корисним у тому випадку, коли ви збираєтеся вибрати дані з певною умовою WHERE. Наступний запит поверне всі стовпці з усіх рядків, де «column1» містить значення «3»:
SELECT * FROM table_name WHERE column1=3;
Крім «=» (рівно), існують такі умовні оператори:
Умовні оператори:
= Рівно
<>Не дорівнює
> Більше
<
Меньше
>= Більше чи одно
<=
Меньше или равно
Додатково можна використовувати умови BITWEEN і LIKE для порівняння з умовою WHERE, а також комбінації операторів AND та OR.
SELECT * FROM table_name WHERE ((Age >= 18) AND (LastName BETWEEN 'Іванів' AND 'Сидорів')) OR Company LIKE '%Motorola%';
Що в перекладі російською мовою означає: вибрати всі стовпці з таблиці table_name, де значення стовпця age більше або дорівнює 18, а також значення стовпця LastName знаходиться в алфавітному проміжку від Іванів до Сидорів включно, або значенням стовпця Company є Motorola.
Використання запиту INSERT для вставлення нових даних
Запит INSERT використовується для створення нового рядка даних. Для оновлення вже існуючих даних або порожніх полів рядка необхідно використовувати запит UPDATE.
Зразковий синтаксис запиту INSERT:
INSERT INTO table_name (column1, column2, column3) VALUES ('data1', 'data2', 'data3');
Якщо ви збираєтеся вставляти всі значення в порядку, в якому знаходяться стовпці таблиці, то можна і не вказувати імена стовпців, хоча для зручності читання це краще. Крім того, якщо ви перераховуєте стовпці, необов'язково вказувати їх по порядку знаходження в базі даних, поки значення, які ви вводите, відповідають цьому порядку. Ви не повинні перераховувати стовпці, в які інформація не вводиться.
Змінюється вже існуюча інформація у базі даних дуже схожим чином.
Запит UPDATE та умова WHERE
UPDATE використовується для того, щоб змінити існуючі значення або звільнити поле у рядку, тому нові значення повинні відповідати існуючому типу даних та забезпечувати прийнятні значення. Якщо ви не хочете змінити значення у всіх рядках, потрібно використовувати умову WHERE.
UPDATE table_name SET column1 = 'data1', column2 = 'data2' WHERE column3 = 'data3';
Ви можете використовувати WHERE для будь-якого стовпця, включаючи той, який ви хочете змінити. Це використовується коли необхідно замінити одне певне значення інше.
UPDATE table_name SET FirstName = 'Василь' WHERE FirstName = 'Василь' AND LastName = 'Пупкін';
Будьте обережні! Запит DELETE видаляє цілі рядки
Запит DELETE повністю видаляє рядок із бази даних. Якщо ви хочете видалити одне єдине поле, потрібно використовувати запит UPDATE і встановити для цього поля значення, яке буде аналогом NULL у вашій програмі. Будьте уважні і обмежуйте ваш запит DELETE умовою WHERE, інакше ви можете втратити весь вміст таблиці.
DELETE FROM table_name WHERE column1 = 'data1';
Як тільки рядок був видалений з вашої бази даних, він не підлягає відновленню, тому бажано мати стовпець на ім'я IsActive, або щось типу того, який ви можете змінити на нуль, що вказуватиме на блокування подання даних з цього рядка.
Тепер ви знаєте основи SQL запитів
SQL – мова баз даних, і ми розглянули найважливіші та базові команди, які у запитах даних. Багато основних концепцій не були порушені (SUM і COUNT наприклад), але ті небагато команд, які вдалося перерахувати вище, повинні спонукати вас до активних дій і глибшого вивчення чудової мови запитів під ім'ям SQL.
Розділ 4. Інформаційні системи
Введення у SQL.
Створення, зміна та видалення таблиць.
Вибірка даних із таблиці.
Створення SQL-запитів.
Обробка даних у SQL.
Методика навчання цієї теми у шкільництві.
Введення у SQL. SQL - структурована мова запитів, яка дає можливість створювати та працювати в реляційних базах даних, які є наборами пов'язаної інформації, що зберігається в таблицях. Мова орієнтована операції з даними, представленими як логічно взаємозалежних сукупностей таблиць-отношений. Найважливіша особливість структур цієї мови полягає в орієнтації на кінцевий результат обробки даних, а не на процедуру цієї обробки. SQL сам визначає, де знаходяться дані, індекси і навіть які найефективніші послідовності операцій слід використовуватиме отримання рез-та.
Спочатку SQL був основним способом роботи користувача з базою даних і дозволяв виконувати наступний набір операцій: створення в базі даних нової таблиці; додавання до таблиці нових записів; зміна записів; видалення записів; вибірка записів з однієї або декількох таблиць (відповідно до заданої умови); зміна структур таблиць.
Згодом SQL забезпечив можливість опису і управління новими об'єктами, що зберігаються (наприклад, індекси, уявлення, тригери і процедури, що зберігаються). SQL залишається єдиним механізмом зв'язку між прикладним програмним забезпеченням та базою даних. У той же час, сучасні СУБД, а також інформаційні системи, що використовують СУБД, надають користувачеві розвинені засоби візуальної побудови запитів. Кожна пропозиція SQL - це або запитданих з бази, чи звернення до базі даних, що призводить до зміни даних у базі.
Відповідно до того, які зміни відбуваються у базі даних, розрізняють такі типи запитів: створення чи зміна у базі даних нових чи існуючих об'єктів; отримання даних; на додавання нових даних (записів); видалення даних; звернення до СУБД.
p align="justify"> Основним об'єктом зберігання реляційної бази даних є таблиця, тому всі SQL-запити - це операції над таблицями. Відповідно, запити поділяються на:
Запити, що оперують самими таблицями (створення та зміна таблиць);
Запити, що оперують із окремими записами (або рядками таблиць) або наборами записів.
Кожна таблиця описується як перерахування своїх полів (стовпців таблиці) із зазначенням: типу збережених у кожному полі значень; зв'язків між таблицями (завдання первинних та вторинних ключів); інформації, яка потрібна на побудови індексів.
Таким чином, використання SQL зводиться, по суті, до формування всіляких вибірок рядків та здійснення операцій над усіма записами, що входять до набору.
Команди SQL поділяються на такі групи:
1. Команди мови визначення даних – DDL (Data Definition Language). Ці команди SQL можна використовувати для створення, зміни та видалення різних об'єктів бази даних.
2. Команди мови керування даними – DCL (Data Control Language). За допомогою цих команд SQL можна керувати доступом користувачів до бази даних і використовувати конкретні дані (таблиці, уявлення і т.д.).
3. Команди мови управління транзакціями - TCL (Тгаnsасtiоn Соntrol Language). Ці команди SQL дозволяють визначити результат транзакції.
4. Команди мови маніпулювання даними – DML (Data Manipulation Language). Ці SQL команди дозволяють користувачеві переміщати дані до бази даних та з неї.
Оператори SQL поділяються на:
Оператори визначення даних ( Data Definition Language, DDL)
CREATE створює об'єкт БД (саму базу, таблицю, уявлення, користувача тощо)
ALTER змінює об'єкт
DROP видаляє об'єкт
Оператори маніпуляції даними ( Data Manipulation Language, DML)
SELECT зчитує дані, що задовольняють задані умови
INSERT додає нові дані
UPDATE змінює наявні дані
DELETE видаляє дані
Оператори визначення доступу до даних ( Data Control Language, DCL)
GRANT надає користувачеві (групі) дозволи на певні операції з об'єктом
REVOKE відкликає раніше видані дозволи
DENY задає заборону, яка має пріоритет над дозволом
Оператори управління транзакціями ( Transaction Control Language, TCL)
COMMIT застосовує транзакцію.
ROLLBACK відкочує всі зміни, зроблені у контексті поточної транзакції.
SAVEPOINT ділить транзакцію більш дрібні ділянки.
Переваги: 1. Незалежність від конкретної СУБД (тексти SQL-запитів, що містять DDL і DML, можуть бути легко перенесені з однієї СУБД в іншу). 2. Наявність стандартів (наявність стандартів та набору тестів для виявлення сумісності та відповідності конкретної реалізації SQL загальноприйнятому стандарту лише сприяє «стабілізації» мови). 3. Декларативність (за допомогою SQL програміст описує лише те, які дані потрібно отримати або модифікувати)
Недоліки: 1.Невідповідність реляційної моделі даних 2.Повторяющиеся рядки 3. Невизначені значення (nulls) 4. Явна вказівка порядку колонок зліва направо 5. Колонки без імені та дублюючі імена колонок 6. Відсутність підтримки властивості «=» 7. Використання покажчиків 8. .
2.2 Створення, зміна та видалення таблиць.
Створення таблиці:
Таблиці створюються командою CREATE TABLE. Ця команда створює порожню таблицю – таблицю без рядків. Значення вводяться за допомогою команди DML команди INSERT. Команда CREATE TABLE переважно визначає їм таблиці, як опису набору імен стовпців зазначених у порядку. Вона також визначає типи даних та розміри стовпців. Кожна таблиця повинна мати принаймні один стовпець.
Синтаксис команди:
CREATE TABLE
(
Зміна таблиці:
Команда ALTER TABLE – це змістовна форма, хоча її можливості дещо обмежені. Вона використовується для зміни визначення існуючої таблиці. Зазвичай вона додає стовпці до таблиці. Іноді вона може видаляти стовпці або змінювати розміри, а також в деяких програмах додавати або видаляти обмеження. Типовий синтаксис, щоб додати стовпець до таблиці:
ALTER TABLE
title |
yearpub |
publisher |
Для цього СУБД попередньо має виконати злиття таблиць titles та publishers і тільки потім зробити вибірку з отриманого відношення.
Для виконання операції такого роду в операторі SELECT після ключового слова FROM вказується список таблиць, якими проводиться пошук даних. Після ключового слова WHERE вказується умова, яким виробляється злиття. Для того, щоб виконати цей запит, потрібно надати команду:
SELECT titles. title, titles. yearpub, publishers. publisher
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id;
Приклад, де одночасно задаються умови і злиття та вибірки (результат попереднього запиту обмежується виданнями після 1996 року):
SELECT titles.title,titles.yearpub,publishers.publisher
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id AND
titles.yearpub>1996;
Слід звернути увагу, що коли в різних таблицях присутні однойменні поля, то для усунення неоднозначності перед ім'ям поля вказується ім'я таблиці і знак "." (крапка). (Рекомендується назва таблиці вказувати завжди!)
Звичайно, є можливість проводити злиття і більш ніж двох таблиць. Наприклад, щоб доповнити описану вище вибірку іменами авторів книг необхідно скласти оператор такого вигляду:
Publishers.publisher
FROM titles,publishers,titleauthors,authors
WHERE titleauthors.au_id=authors.au_id AND
Titleauthors.title_id=titles.title_id AND
Titles.pub_id=publishers.pub_id AND
Titles. yearpub > 1996;
Альтернативний варіант злиття кількох таблиць може використовувати оператор
з'єднання таблиць безпосередньо в пропозиції FROM. Існує три
варіанти оператора:
INNER JOIN З'єднання, при якому записи включаються в результуючий
набір тільки в тому випадку, якщо у зв'язкових атрибутах будуть знайдені однакові
значення;
LEFT JOIN ліве з'єднання, при якому всі записи з першої (лівої)
таблиці включаються до результуючого набору, навіть якщо у другій (правий)
таблиці немає відповідних їм записів;
RIGHT JOIN Праве з'єднання, при якому всі записи з другої (правої)
таблиці включаються до результуючого набору, навіть якщо в першій (лівій) таблиці
немає відповідних записів.
Наприклад, попередній приклад можна реалізувати за допомогою оператора
INNER JOIN наступним чином:
SELECT authors.author,titles.title,titles.yearpub,
Publishers.publisher
FROM ((titles INNER JOIN publishers ON
Titles.pub_id=publishers.pub_id)
INNER JOIN titleauthors ON
Itleauthors.title_id=titles.title_id)
INNER JOIN authors ON
Titleauthors.au_id=authors.au_id
WHERE titles.yearpub > 1996;
3. Обчислення усередині SELECT.
SQL дозволяє виконувати різні арифметичні операції над стовпцями результуючого відношення. У конструкції<список_выбора> можна використовувати константи, функції та їх комбінації з арифметичними операціями та дужками. Наприклад, щоб дізнатися, скільки років минуло з 1992 року (рік прийняття стандарту SQL-92) до публікації тієї чи іншої книги, можна виконати команду:
SELECT title, yearpub-1992 FROM titles WHERE yearpub > 1992;
В арифметичних виразах допускаються операції додавання (+), віднімання (-),
поділу (/), множення (*), а також різні функції (COS, SIN, ABS)
абсолютне значення і т.д.).
У SQL також визначено звані агрегатні функції, які здійснюють дії над сукупністю однакових полів групи записів. Серед них:
AVG(<имя поля>) - середнє за всіма значеннями даного поля
COUNT(<имя поля>) або COUNT (*) - кількість записів
MAX(<имя поля>) - максимальне зі всіх значень даного поля
MIN(<имя поля>) - мінімальне зі всіх значень даного поля
SUM(<имя поля>) - сума всіх значень даного поля
Слід враховувати, що кожна функція, що агрегує, повертає єдине значення.
Приклади: визначити дату публікації найдавнішої книги в нашій базі даних
SELECT MIN(yearpub) FROM titles;
SELECT COUNT (*) FROM titles;
Область дії цих функцій можна обмежити за допомогою логічної умови. Наприклад, кількість книг, випущених після 2000 року:
SELECT COUNT (*) FROM titles WHERE yearpub > 2000;
4. Функції для роботи з датою
У MS Access передбачений цілий набір вбудованих функцій дат та часу Перерахуємо деякі з них:
Date () - поточна дата, тобто сьогоднішнє число, місяць і рік;
D ау(дата) - витягує з дати день, наприклад дата- 12,09,97, число 12;
Мо nth (дата) - витягує з дати місяць, наприклад дата - 12,09,97, результат застосування функції- Число 9;
Уеаг(дата) - витягує з дати рік, наприклад дата - 12-09,97, результат застосування функції- Число 97;
Weekday (дата) - витягує з дати день тижня в американській системі нумерації днів, а саме у прикладі- дата 12,09,97, результат застосування функції – число 6, що відповідає п'ятниці,
DatePart (HHTepBan, дата) - тут аргумент "інтервал" - це скорочена назва потрібного компонента дати, а дата - конкретне значення дати або ім'я поля з датою
Наприклад:
DatePart ("H", # 12, 09, 97 #) - день тижня - 6, т е п'ятниця,
DatePart ("HH", # 12, 09, 97 #) - Тиждень року - 37,
DatePart ("K", # 12,09,97 #) - квартал року - 3
DatePart("a",#12,09,97#) - день -12,
DatePart ("M", # 12, 09, 97 #) - Місяць - 9, \ DatePart ("rrrr", # 12, 09, 97 #) -рік -1997
Приклад запиту. Визначити, скільки років минуло з моменту виходу статті, що описала стандарт SQL (припустимо, що назва статті ”Стандарт SQL ”)
SELECT Month(Date()-yearpub)
FROM titles INNER JOIN publishers ON
titles.pub_id = publishers.pub_id
WHERE publisher = "Стандарт SQL";
5. Завдання до лабораторної роботи
Зауваження щодо виконання лабораторної роботи.
Для перегляду результату виконання запитів необхідно, щоб у таблицях були внесені дані відповідними сформульованими запитами. При цьому дані у запитах (дати, прізвища, кількість тощо) можуть бути змінені за фактом внесених даних до БД.
При виконанні завдань лабораторної роботи всі поля, що обчислюються, замінювати синонімами, використовуючи опцію AS у реченні SELECT .
Наприклад: SELECT COUNT (*) AS Кількість _ рядків FROM titles;
Реалізувати такі запити засобами SQL:
Знайти замовлення, зроблені в січні.
Знайти вироби, що поставляються у кількості не менше 10 і не більше 100 .
Отримати список виробів, що отримуються замовником “з-д «Червоний промінь»”, ціна яких більша 50 тис. грн.
Скільки деталей «Болт» на всі замовлення отримав замовник “з-д “Червоний промінь””.
Визначити найменування деталей замовлених у період з 6/10/ 97 за 10/10/97, які не замовлявз-д «Червоний промінь».
Отримати список найменувань виробів, постачання яких перевищує 10 тис.
На яку суму замовлено деталей будинок «Червоний промінь»
Які замовники замовляли деталь "Болт".
Визначити середню кількість постачання деталі «Болт» за 1997 рік.
Знайти замовника, який замовив найдорожчу деталь.
6. Контрольні питання
Які пропозиції SELECT є обов'язковими?
Що задає пропозицію WHERE?
Які типи з'єднань ( JOIN ) підтримує інструкцію SELECT?
Яка послідовність пропозицій інструкції SELECT?
У якому разі обов'язково вказувати ім'я таблиці перед назвою поля?
Як формувати обчислювані поля в SELECT?
Чи можна поєднувати більше двох таблиць операцією JOIN?
Який альтернативний синтаксис операції JOIN (з використанням WHERE ) можна використовувати для коректного виконання запиту?