Готові запити 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

ADD

;

Стовпець буде додано зі значенням NULL для всіх рядків таблиці. Новий стовпець стане останнім по порядку стовпцем таблиці. Взагалі, можна додати відразу кілька нових стовпців, відділивши їх комами, в одній команді. Є можливість видаляти чи змінювати стовпці. Найчастіше зміною стовпця може бути просто збільшення його розміру, або додавання (видалення) обмеження.
Видалення таблиці:

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

DROP TABLE< table name >;

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

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

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

Формат запиту з використанням цього оператора:

SELECT список полів FROM список таблиць WHERE умови…

(*[список полів]) FROM<список таблиц>

WHERE - використовується для визначення, які рядки мають бути обрані чи включені до GROUP BY.

GROUP BY - використовується для об'єднання рядків із загальними значеннями елементи меншого набору рядків.

HAVING – використовується для визначення, які рядки після GROUP BY мають бути вибрані.

ORDER BY - використовується визначення, які стовпці використовуються для сортування результуючого набору даних.

Один і той же набір даних може бути отриманий під час виконання різних запитів. Пошук оптимального плану виконання цього запиту є оптимізатором.

2.4 Створення SQL-запитів.

Запит - це засіб вибору необхідної інформації з бази даних. Питання, сформоване стосовно базі даних, і є запит. SQL – запити – це запити, які складаються (програмістами) із послідовності SQL – інструкцій. Ці інструкції задають, що треба зробити із вхідним набором даних для генерації вихідного набору. Усі запити Access будує з урахуванням SQL – запитів, щоб переглянути їх, необхідно у активному вікні проектування запиту виконати команду Вид/SQL.

Існує кілька типів запитів: на вибірку (наведений вище), оновлення, додавання, видалення, перехресний запит, створення таблиць. Найбільш поширеним є запит на вибірку. Запити на вибірку використовуються для відбору необхідної користувачеві інформації, що міститься в таблицях. Вони створюються лише зв'язаних таблиць.

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

Створення запиту в режимі SQL схоже на програмування, користувач має вручну набрати потрібні команди. Запит на вибір інформації починається словом SELECT. Далі потрібно перерахувати потрібні поля таблиці, надрукуємо найменування таблиці, поставимо крапку, а квадратних дужках наберемо ім'я поля з цієї таблиці тощо. Поля відокремлюються комами.

Запит закінчується службовим словом FROM, після якого вказується таблиця, з якої було взято інформацію. Наприкінці рядка запиту має стояти крапка з комою.

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

2.5 Обробка даних у SQL:

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

COUNT - здійснює підрахунок кількості рядків або не-NULL значень полів, які обрав запит;

SUM – розраховує арифметичну суму всіх вибраних значень даного поля;

AVG - робить усереднення всіх обраних значення даного поля;

МАХ - знаходить та повертає найбільше з усіх обраних значень

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

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

Для розміщення кількох запитів разом та об'єднання виводу використовують пропозицію UNION. Пропозиція UNION поєднує виведення двох або більше SQL запитів у єдиний набір рядків та стовпців. Команда UNION автоматично виключає дублікати рядків із виводу.

Комп'ютерні мережі

Лабораторна робота №2

Тема: Прості запити на вибір даних засобами SQL.

Мета роботи : Вивчити синтаксис інструкції SQL | SELECT для створення простих запитів на вибірку даних. Використовуючи пропозиції WHERE задати умови відбору рядків із таблиць визначених у реченні FROM . Вивчити організацію вибірки даних із кількох таблиць БД.

1. Вибір даних.

Для отримання записів з таблиць в SQL визначено оператора SELECT . З допомогою цієї команди здійснюється як операція реляційної алгебри "вибірка" (селекція), а й попереднє з'єднання (join) двох і більше таблиць. Це найбільш складний та потужний засіб SQL, повний синтаксис оператора SELECT має вигляд:

SELECT< список _ выбора >

FROM<имя_таблицы>, ...

[ WHERE<условие> ]

[ GROUP BY <имя_столбца>,... ]

[ HAVING< условие > ]

,... ]

Усі приклади, наведені нижче, стосуються бази даних publications використовують приклад лабораторної роботи № 1 (lab _1_ CREATE _ TABLE . htm ) тому результати запитів створення таблиць тут не наводяться.

Порядок пропозицій в операторі SELECT повинен суворо дотримуватися (наприклад, GROUP BY має завжди передувати ORDER BY ), інакше це призведе до появи помилок.

Цей оператор завжди починається з ключового слова SELECT. У конструкції<список_выбора> визначається стовпець або стовпці, що включаються до результату. Він може складатися з імен одного або кількох стовпців, або одного символу «*» (зірочка), що визначає всі стовпці. Елементи списку розділяються комами.

SELECT author FROM authors;

отримати список усіх полів таблиці authors :

SELECT * FROM authors;

У тому випадку, коли нас цікавлять не всі записи, а лише ті, які задовольняють комусь умові, цю умову можна вказати після ключового слова WHERE . Наприклад, знайдемо всі книги, опубліковані після 1996:

SELECT title FROM titles WHERE yearpub > 1996;

Допустимо тепер, що треба знайти всі публікації за інтервал 1995 – 1997 рр. Цеумову можна записати у вигляді:

SELECT title FROM titles WHERE yearpub>=1995 AND yearpub<=1997;

Насамкінець зауважимо, що при виконанні оператора SELECT результуюче відношення може мати кілька записів з однаковими значеннями полів. Для виключення повторюваних записів з вибірки використовується ключове слово DISTINCT. Ключове слово ALL вказує, що результат необхідно включати всі рядки.

2. Вибірка з кількох таблиць.

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

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 ) можна використовувати для коректного виконання запиту?


Top