Поиск текстовых данных по шаблону
В данной части мы рассмотрим поиск текстовых данных по шаблону с помощью предложения where и оператора LIKE.
Оператор сравнения на равенство (=) помогает выбрать одинаковые строки. Таким образом, чтобы перечислить имена сотрудников, которых зовут Иван, можно воспользоваться следующим оператором SELECT.
select f_name, l_name from employee_data where f_name = "Иван";Результат запроса приведен на рис. 5.12.
Рис. 5.12. Результат поиска сотрудников, которых зовут Иван
Как быть, если надо вывести данные о сотрудниках, имя которых начинается с буквы В? Язык SQL позволяет выполнить поиск строковых данных по шаблону. Для этого в предложении where используется оператор LIKE следующим образом.
select f_name, l_name from employee_data where f_name LIKE "В%";Результат запроса приведен на рис. 5.13.
Рис. 5.13. Результат поиска сотрудников, имя которых начинается с буквы В
Можно видеть, что здесь в условии вместо знака равенства используется LIKE и знак процента в шаблоне.
Знак % действует как символ-заместитель (аналогично использованию * в системах DOS и Linux). Он заменяет собой любую последовательность символов. Таким образом "В%" обозначает все строки, которые начинаются с буквы В. Аналогично "%В" выбирает строки, которые заканчиваются символом В, а "%В%" строки, которые содержат букву В.
Давайте выведем, например, всех сотрудников, которые имеют в названии должности строку "про".
select f_name, l_name, title from employee_datawhere title like '%про%';Результат запроса приведен на рис. 5.14.
Рис. 5.14. Результат поиска сотрудников, в названии должности которых содержится строка "про"
Перечислим всех сотрудников, имена которых заканчиваются буквой 'а'. Это очень просто сделать.
mysql> select f_name, l_name from employee_datawhere f_name like '%a';Результат запроса приведен на рис. 5.15.
Рис. 5.15. Результат поиска сотрудников, имена которых заканчиваются буквой 'а'
Задания
1. Перечислить всех сотрудников, фамилии которых начинаются с буквы P.
2. Вывести имена всех сотрудников в отделе продаж.
3. Что выведет следующий оператор
SELECT f_name, l_name, salary fromemployee_data where f_name like '%к%';4. Перечислить фамилии и должности всех программистов
Возможные решения
1. select l_name, f_name from employee_data where l_name like 'P%';
2. select f_name, l_name from employee_data where title like '%продавец%';
3. Этот оператор выводит имена, фамилии и заплаты всех сотрудников, у которых имя содержит букву 'к'.
SELECT f_name, l_name, salary from employee_data where f_name like '%к%';4. SELECT l_name, title from employee_data where title like '%программист%';
Предложение HAVING
Чтобы вывести среднюю зарплату сотрудников в различных подразделениях (должностях), используется предложение GROUP BY, например:
select title, AVG(salary)from employee_dataGROUP BY title;Результат запроса приведен на рис. 5.16.
Рис. 5.16. Вывод средней зарплаты сотрудников по подразделениям
Предположим теперь, что требуется вывести только те подразделения, где средняя зарплата более 100000. Это можно сделать с помощью предложения HAVING.
select title, AVG(salary)from employee_dataGROUP BY titleHAVING AVG(salary) > 100000;Результат запроса приведен на рис. 5.17.
Рис. 5.17. Вывод средней зарплаты определённого диапазона по подразделениям
Задание
Вывести подразделения и средний возраст, где средний возраст больше 30.
Возможное решение
mysql> select title, AVG(age) -> from employee_data -> GROUP BY title -> HAVING AVG(age) > 30;Результат запроса приведен на рис. 5.18.
Рис. 5.18. Вывод подразделения и среднего возраста, где средний возраст больше 30 лет
Дата добавления: 2016-02-04; просмотров: 819;