Команда 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'... ]
Як видно з наведеного вище, разом з командою 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.
|