Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД MySQL.doc
Скачиваний:
34
Добавлен:
18.04.2019
Размер:
1.45 Mб
Скачать

Предложение having

Чтобы вывести среднюю зарплату сотрудников в различных подразделениях (должностях), используется предложение GROUP BY, например:

select title, AVG(salary)

from employee_data

GROUP BY title;

Результат запроса приведен на рис. 5.16.

Рис. 5.16.  Вывод средней зарплаты сотрудников по подразделениям

Предположим теперь, что требуется вывести только те подразделения, где средняя зарплата более 100000. Это можно сделать с помощью предложения HAVING.

select title, AVG(salary)

from employee_data

GROUP BY title

HAVING 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 лет

Удаление записей из таблицы

Для удаления записей из таблицы можно использовать оператор DELETE.

Оператор удаления DELETE требует задания имени таблицы и необязательных условий.

DELETE from имя_таблицы [WHERE условия];

Примечание: Если никакие условия не будут заданы, то удаляются все данные в таблице.

Предположим, один из специалистов по мультимедиа 'Василий Пупкин' уволился из компании. Надо удалить его запись.

DELETE from employee_data

WHERE l_name = 'Пупкин';

Результат запроса приведен на рис. 5.19.

Рис. 5.19.  Результат удаления записи из таблицы

  1. Лекция: Логические операторы

  2. Задания

  3. Возможные решения

  4. Операторы IN и BETWEEN

    1. Задания

    2. Возможные решения

  5. Упорядочивание данных

    1. Задания

    2. Возможные решения

  6. Ограничение количества извлекаемых данных

  7. Извлечение подмножеств

    1. Задания

    2. Возможные решения

  8. Ключевое слово DISTINCT

    1. Задания

    2. Возможные решения

  9. Изменение записей

    1. Задания

    2. Возможные решения

В этой лекции мы рассмотрим, как выбрать данные на основе условий SQL, представленных с помощьюбулевых (логических) операторов.

  1. AND

  2. OR

  3. NOT

Использовать их очень просто. Ниже показан оператор SELECT, который выводит имена сотрудников, которые получают более 70000, но меньше 90000.

SELECT f_name, l_name from employee_data

where salary > 70000 AND salary < 90000;

На рис. 6.1. приведен результат запроса.

Рис. 6.1.  Имена сотрудников, которые получают более 70000, но меньше 90000

Давайте выведем список сотрудников, фамилии которых начинаются с буквы К или Л.

SELECT l_name from employee_data where

l_name like 'К%' OR l_name like 'Л%';

На рис. 6.2. приведен результат запроса.

Рис. 6.2.  Сотрудники, фамилии которых начинаются с буквы К или Л

Вот более сложный пример ... список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет.

SELECT f_name, l_name , age from employee_data

where (l_name like 'К%' OR l_name like 'Л%') AND age < 30;

На рис. 6.3. приведен результат запроса.

Рис. 6.3.  Список имен и возраста сотрудников, фамилии которых начинаются с К или Л, и которые младше 30 лет

Обратите внимание на использование скобок в представленном выше операторе. Скобки предназначены для выделения различных логических условий и удаления двусмысленностей.

Оператор NOT поможет при поиске всех сотрудников, которые не являются программистами. (Программисты включают старших программистов, программистов мультимедиа и программистов).

SELECT f_name, l_name, title from employee_data

where title NOT LIKE "%программист%";

На рис. 6.4. приведен результат запроса.

Рис. 6.4.  Поиск всех сотрудников, которые не являются программистами

И последний пример перед упражнениями.

Показать всех сотрудников со стажем работы в компании более 3 лет, которые старше 30 лет.

select f_name, l_name from employee_data

where yos > 3 AND age > 30;

На рис. 6.5. приведен результат запроса.

Рис. 6.5.  Все сотрудники, которые старше 30 лет, и имеют стаж работы более 3 лет