Головна MySQL Запити до бази даних і команда Select
Запити до бази даних і команда Select

Команда 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.

 
© 2008-2013 PHPist