Група 1

Матеріал з Фізмат Вікіпедії
Перейти до: навігація, пошук

Проектування у БД

  1. Запити у середовищі MySql
  2. Створення таблиць
  3. Корегування БД


Запити до бази даних


Команда Select використовується для запитів до бази даних з метою витягання з неї інформації. Синтаксис команди наступний:
SELECT [Straight_join] [DISTINCT | ALL] select_expression...
[FROM tables... [WHERE where_definition] [GROUP BY column...]
[ORDER BY column [ASC | DESC] ...] HAVING full_where_definition
[LIMIT [offset] rows] [PROCEDURE procedure_name]]
[INTO OUTFILE 'file_name'... ]</nowiki> </div>


Як видно з наведеного вище, разом з командою Select використовуються ключові слова, застосуання яких дуже впливає на відповідь сервера.
Розглянемо кожне з них.

DISTINCT Пропускає рядки, в яких всі вибрані поля ідентичні, тобто усуває дублювання даних.

WHERE Умовна команда Select,котороє дозволяє встановлювати предикати, умова яких може бути вірною або невірною для
будь-якого рядка таблиці.Витягуються тільки ті рядки, для яких таке твердження вірне.Наприклад:
SELECT u_id,lname from publishers WHERE city ='New York';
Виводить колонки u_id і lname з таблиці publishers для яких значення в стовпці city має значення 'new York'.
Це дає можливість зробити запит конкретнішим.


Реляційні оператори

Реляційний оператор - математичний символ який вказує на певний тип порівняння між двома значеннями.
Реляційні оператори які має в своєму розпорядженні MYSQL :

= Рівно
> Більше
< Менше
>=Більше або рівно
<=Менше або рівно
< >Не рівно

Припустимо що ви хочете побачити всіх замовників з оцінкою(rating) вище 200. Оскільки 200 - це скалярне значення,
як і значення в стовпці оцінки, для їх порівняння ви можете використовувати реляційного оператора.
SELECT * FROM Customers WHERE rating > 200;


Булеві оператори Основні Булеві оператори також розпізнаються в MYSQL. Вирази Буля - є або вірними або невірними, подібно до предикатів.
Булеві оператори зв'язують одне або більше значень і проводять єдине вірне або невірне значення. Стандартними операторами
Буля розпізнаваними в SQL є: AND, OR, і NOT.

Припустимо ви хочете бачити всіх замовників в Далласі, які мають рейтинг вище 200:
SELECT * FROM Customers WHERE city = 'Dallas' AND rating > 200;

При використанні оператора AND, повинні виконуватись обидві умови, тобто повинні бути вибрані всі замовники з Далласа,
рейтинг яких більше 200.

При використанні оператора OR, може виконуватись одна з умов, наприклад:
SELECT * FROM Customers WHERE city = 'Dallas' OR rating > 200;

В даному випадку будуть вибрані всі замовники з Далласа або всі які мають рейтинг більше 200, навіть якщо вони не з Далласа.

NOT може використовуватися для інвертування значень Буля. Приклад запиту з NOT:
SELECT * FROM Customers WHERE city = 'Dallas' OR NOT rating > 200;

При такому запиті будуть вибрані всі замовники з Далласа або всі замовники, рейтинг яких менше 200.В цьому запиті оператор NOT застосовується тільки до виразу rating >200. Можна зробити складніший запит:
SELECT * FROM Customers WHERE NOT( city = 'Dallas' OR rating > 200 );

У цьому запиті NOT застосований до обох виразів в дужках. В даному випадку, сервер читає вирази в дужках, визначає, чи відповідає істині рівність city = 'Dallas' або рівність rating > 200. Якщо будь-яка умова вірна, вираз Буля усередині круглих дужок вірний. Проте, якщо вираз Буля усередині круглих дужок - вірний, предикат як єдине ціле невірний, тому що NOT перетворить вірно в невірно і навпаки. Тобто, будуть вибрані всі замовники що не знаходяться в Далласі і рейтинг яких менше 200.


IN Оператора IN визначає набір значень в яке дане значення може або не може бути включене. Наприклад запит:
SELECT * FROM Salespeople WHERE city = 'Barcelona' OR city = 'London';

може бути переписаний простіше:
SELECT * FROM Salespeople WHERE city IN ( 'Barcelona', 'London' );

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

BETWEEN Оператор BETWEEN схожий на оператора IN. У відмінності від визначення по номерах з набору, як це робить IN, BETWEEN визначає діапазон, значення якого повинні зменшуватися що робить предикат вірним. Ви повинні ввести ключове слово BETWEEN з початковим значенням, ключове AND і кінцеве значення. На відміну від IN, BETWEEN чутливий до порядку, і перше значення в пропозиції повинне бути першим по алфавітному або числовому порядку, наприклад:
SELECT * FROM Salespeople WHERE comm BETWEEN .10 AND .12; SELECT * FROM Salespeople WHERE city BETWEEN 'Berlin' AND 'London';

LIKE LIKE застосовний тільки до полів типу CHAR або VARCHAR, з якими він використовується щоб знаходити підрядки. Тобто він
шукає поле символу щоб бачити, чи співпадає з умовою частина його рядка.Як умову він використовує групові символи
wildkards) - спеціальні символи які можуть відповідати чому-небудь. Є два типи групових символів використовуваних з LIKE:

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

Якщо ми задамо наступні умови:
SELECT * FROM Customers WHERE fname LIKE 'J%'; то будуть вибрані всі замовники, чиї імена починаються на J: john, jerry, james і так далі.

COUNT Агрегатна функція, робить підрахунок значень в стовпці або числа рядків в таблиці. При роботі із стовпцем використовує DISTINCT як аргумент:
SELECT COUNT ( DISTINCT snum ) FROM Orders;

При підрахунку рядків має синтаксис:
SELECT COUNT (*) FROM Customers;

GROUP BY Умова GROUP BY дозволяє визначати підмножину значень в особливому полі в термінах іншого поля, і застосовувати функцію агрегату до підмножини. Це дає можливість об'єднувати поля і агрегатні функції в єдиній пропозиції SELECT. Наприклад, припустимо що ви хочете знайти найбільшу суму покупок отриману кожним продавцем. Ви можете зробити роздільний запит для кожного з них, вибравши MAX () з таблиці для кожного значення поля. GROUP BY дозволить Вам помістити їх всіх в одну команду:
SELECT snum, MAX (amt) FROM Orders GROUP BY snum;

HAVING HAVING визначає критерії використовувані щоб видаляти певні групи з виводу, точно також як пропозиція WHERE робить це для індивідуальних рядків, наприклад:
SELECT cid, cname, price, max(price) //max()- це також агрегатна функція
FROM customers HAVING max(price) >500; HAVING діє схоже з Where,но з WHERE не можна використовувати агрегатні функції.

ORDER BY Ця команда упорядковує виведення запиту згідно значенням в тій або іншій кількості вибраних стовпців. Численні стовпці упорядковуються один усередині іншого, також як з GROUP BY.

EXISTS Використовується в підзапитах.
SELECT cnum, cname, city FROM Customers WHERE EXISTS (SELECT * FROM Customers WHERE city = " San Jose' );

Він бере підзапит як аргумент і оцінює його як вірний якщо той проводить будь-який вивід або як невірний якщо той не робить цього.Цим він відрізняється від інших операторів предиката, в яких він не може бути невідомим. Наприклад, ми можемо вирішити, чи витягувати нам деякі дані з таблиці Замовників якщо, і лише якщо, один або більш за замовників в цій таблиці знаходяться в San Jose.

UNION UNION відрізняється від підзапитів тим що в нім жоден з двох ( або більше ) запитів не управляються іншим запитом. Всі запити виконуються незалежно один від одного, а вже вивід їх - об'єднується, наприклад:
SELECT snum, sname FROM Salespeople WHERE city = 'London' UNION SELECT cnum, cname FROM Customers WHERE city = 'London'; Пропозицію UNION об'єднує вивід два або більш SQL запитів в єдиний набір рядків і стовпців.

DESC, ASC Desc-descedent, вивід даних в зворотньому порядку (за абеткою і чисельним значенням), по замовчуванню використовується ASC.

Ну ось і все, MySQL підтримує майже всі основні команди SQL Server, так що детальніше про команду SELECT ви можете прочитати в будь-якому підручнику по мові SQL.