Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД_лекции.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
1.05 Mб
Скачать

4.2 Выбор строк с помощью where

Это может пригодиться, поскольку часто требуется выбрать только записи, удовлетворяющие определен­ным критериям поиска. Это особенно важно тогда, когда необходимо извлечь всего несколько нужных строк из очень большой таблицы.

Поставленную задачу можно решить с помощью выражения WHERE в опера­торе SELECT. Вот простой пример:

select employeeID, name

from employee

where job='Программист';

Результат выполнения этого запроса для базы данных employee будет сле­дующим:

Мы использовали условие в выражении WHERE, чтобы найти только те строки в таблице, которые удовлетворяют указанным критериям, -- в данном случае это должны быть служащие, работающие программистами.

Обратите внимание на то, что кроме этого условия мы указали также список требуемых столбцов (employeelD и name), чтобы получить только ту информа­цию, которой мы интересуемся.

  • В данном случае мы используем в выражении WHERE проверку равенства. Обратите внимание на то, что в SQL для проверки равенства используется =.

В добавление к операторам в некоторых примерах мы будем использовать функцию count (), которая дает возможность посчитать число строк, возвра­щенных запросом. Например:

select count(*) from employee;

Этот запрос сообщит, сколько строк имеется в таблице employee. Наконец, можно управлять приоритетом операций, группируя выражения с по­мощью скобок.

Вот пример немного более сложного запроса с использованием выражения

WHERE:

select * from assignment

where employeeID=6651 and hours > 8;

Этот запрос возвратит список всех заданий, выполненных служащим 6651 (Аджай Пател), на которые он потратил более восьми часов рабочего времени.

Тут следует сделать одно важное замечание: использовать псевдонимы столб­цов в выражении WHERE не позволено. Необходимо использовать только ориги­нальное имя столбца. Это — ограничение ANSI SQL. Причина заключается в том, что в момент рассмотрения условия WHERE значение псевдонима столбца может быть неизвестно.

Удаление повторений с помощью distinct

В запросе можно использовать ключевое слово DISTINCT, чтобы результат не содержал повторений уже имеющихся значений. Рассмотрим, например, запрос

select job from employee;

который возвратит следующие данные:

Как видите, значение Программист здесь присутствует дважды. Причина в том, что это значение содержится в двух строках. Данный запрос просто воз­вратил полный список значений столбца j ob указанной таблицы.

Теперь рассмотрим запрос

select distinct job from employee;

Он возвратит следующие строки:

Здесь повторения были удалены.

В этом конкретном примере разница не кажется слишком значительной — вто­рой результат лишь немного лаконичнее, но в принципе ненамного лучше. Разница может оказаться более заметной для больших таблиц с множеством повторений, но результат все равно будет представлять всю нужную информацию.

4.3 Использование оператора GROUP BY

Следующим из рассмотренных нами выражений является GROUP BY. Оно позволяет распределить извлекаемые строки по группам и оказывается особенно полезным при его использовании в комбинации с функциями, применяемыми к группам строк.

Рассмотрим следующий запрос:

select count(*), job

from employee

group by job;

Этот запрос подсчитывает число служащих по группам должностей, т.е. вы­ясняет число служащих, занимающих ту или иную должность. Выполнив этот запрос в базе данных employee, получим следующий результат:

Здесь следует отметить, что в MySQL и ANSI SQL выражение GROUP BY рабо­тает по-разному.

В ANSI SQL необходимо группировать по всем столбцам, указанным в исход­ном выражении SELECT. В MySQL в выражении SELECT разрешается указывать дополнительные столбцы, не входящие в выражение GROUP BY.

MySQL позволяет также сортировать порядок групп, в котором они должны быть представлены в результате. По умолчанию задан возрастающий порядок. Чтобы в нашем последнем запросе результаты были представлены в убывающем порядке, запрос следует изменить таким образом:

select count(*), job

from employee

group by job desc;

Результат будет примерно следующим:

Как видите, названия должностей теперь приводятся в порядке, обратном ал­фавитному. Для указания возрастающего порядка можно использовать ASС, но это значение используется по умолчанию, поэтому указывать его не требуется.