| Запити до бази даних і команда 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 u_id,lname from publishers WHERE city ='New York'; Виводить колонки u_id і lname з таблиці publishers для яких значення в стовпці city має значення 'new York'. Це дає можливість зробити запит конкретнішим.
Реляційні оператори = Рівно Припустимо що ви хочете побачити всіх замовників з оцінкою(rating) вище 200. Оскільки 200 - це скалярне значення, як і значення в стовпці оцінки, для їх порівняння ви можете використовувати реляційного оператора. SELECT * FROM Customers WHERE rating > 200;
Булеві оператори Припустимо ви хочете бачити всіх замовників в Далласі, які мають рейтинг вище 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 SELECT * FROM Salespeople WHERE city = 'Barcelona' OR city = 'London'; може бути переписаний простіше: SELECT * FROM Salespeople WHERE city IN ( 'Barcelona', 'London' ); IN визначає набір значень за допомогою імен членів набору увязнених в круглі дужки і відокремлених комами. Потім він перевіряє різні значення вказаного, намагаючись знайти збіг із значеннями з набору. Якщо це трапляється, то предикат вірний. Коли набір містить значення номерів а не символів, одиночні лапки опускаються.
BETWEEN SELECT * FROM Salespeople WHERE comm BETWEEN .10 AND .12; SELECT * FROM Salespeople WHERE city BETWEEN 'Berlin' AND 'London';
LIKE символ підкреслення ( _ ) заміщає будь-який одиничний символ. знак '%', заміщає будь-яку кількість символів. Якщо ми задамо наступні умови: SELECT * FROM Customers WHERE fname LIKE 'J%'; то будуть вибрані всі замовники, чиї імена починаються на J: john, jerry, james і так далі.
COUNT SELECT COUNT ( DISTINCT snum ) FROM Orders; При підрахунку рядків має синтаксис: SELECT COUNT (*) FROM Customers;
GROUP BY SELECT snum, MAX (amt) FROM Orders GROUP BY snum;
HAVING SELECT cid, cname, price, max(price) //max() - це також агрегатна функція FROM customers HAVING max(price) >500; HAVING діє схоже з Where,но з WHERE не можна використовувати агрегатні функції.
ORDER BY
EXISTS SELECT cnum, cname, city FROM Customers WHERE EXISTS (SELECT * FROM Customers WHERE city = " San Jose' ); Він бере підзапит як аргумент і оцінює його як вірний якщо той проводить будь-який вивід або як невірний якщо той не робить цього.Цим він відрізняється від інших операторів предиката, в яких він не може бути невідомим. Наприклад, ми можемо вирішити, чи витягувати нам деякі дані з таблиці Замовників якщо, і лише якщо, один або більш за замовників в цій таблиці знаходяться в San Jose.
UNION SELECT snum, sname FROM Salespeople WHERE city = 'London' UNION SELECT cnum, cname FROM Customers WHERE city = 'London'; Пропозицію UNION об'єднує вивід два або більш SQL запитів в єдиний набір рядків і стовпців.
DESC, ASC Ну ось і все, MySQL підтримує майже всі основні команди SQL Server, так що детальніше про команду SELECT ви можете прочитати в будь-якому підручнику по мові SQL. |