Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Группировка данных и агрегатные функции




 

Группировка и агрегирование данных совершаются с помощью функций, определенных в MySQL. Опишем некоторые из них:

AVG (столбец) – средняя величина значений в указанном столбце

COUNT (столбец) – число ненулевых значений в указанном столбце. Если перед именем столбца указать DISTINCT , то выдается только количество неодинаковых значений;

MIN (столбец) – минимальное значение в столбце;

MAX (столбец) – максимальное значение в столбце;

SUM (столбец) – сумма значений в столбце.

Агрегатные функции можно использовать в запросе SELECT в качестве информации для вывода. Например, чтобы определить количество водителей в автопарке, можно подать запрос

mysql>SELECT COUNT (id) FROM drivers;

 

Чтобы узнать, сколько водителей работало за отчетное время, следует подать команду

mysql>SELECT COUNT (DISTINCT driver_number) FROM timetable;

 

Функция COUNT(*) определит число строк в таблице, но если указать COUNT(field) – определить число значений в поле field, то значения NULL в этом поле учтены не будут.

Предложение GROUP BY позволяет группировать записи, вошедшие в результаты запроса. Это дает возможность объединять поля и агрегатные функции в одном предложении SELECT.

Подсчитаем, сколько автомобилей имеется в таксопарке, сгруппировав данные по моделям:

mysql>SELECT model, COUNT(model) FROM cars GROUP by model;

Каждая группа состоит из строк с одинаковым значением поля model. результат этого запроса представлен ниже:

 

Таблицы – это неупорядоченные наборы данных, и выборка из них не обязательно получается в какой-то определенной последовательности. Для изменения порядка вывода результирующих данных используется конструкция ORDER BY.

Упорядочим сведения о водителях по дате рождения:

mysql>SELECT * FROM drivers ORDER BY birth;

 

В полученной выборке список откроют старшие водители. Если требуется упорядочить данные по убыванию, следует использовать ключевое слово DESC (от англ. Descending - по убыванию):

mysql>SELECT * FROM drivers ORDER BY birth DESC;

 

Конструкция LIMIT служит для указания, сколько строк результата следует отображать. Если нужно найти двух самых пожилых водителей, то можно применить команду

mysql>SELECT * FROM drivers ORDER BY birth LIMIT 2;

Можно также использовать два параметра: номер строки, с которой следует начать, и количество строк.

mysql>SELECT family_name From drivers LIMIT 2, 3 ;

 

Последний запрос можно интерпретировать так: "Выбрать фамилии водителей
и в результате отобразить три строки, начиная со строки 2". Нумерация строк начинается с нуля.

Запросы к двум и более таблицам

Рассмотрим запрос, при котором нужно выбрать данные из двух таблиц. Например, требуется узнать фамилию водителя, который позавчера водил синюю машину. Для получения ответа требуется извлечь сведения из трех таблиц. Поэтому

придется оперировать именами столбцов из разных таблиц. Следует учесть, что полное имя столбца состоит из имени базы данных, имени таблицы и собственно имени столбца, например, taxi. cars . color.

Часто имена таблиц заменяют короткими псевдонимами (alias), указывая их в запросе после ключевого слова from. Псевдонимы для таблиц являются стандартной частью языка SQL и обычно состоят из одной буквы. Задать псевдоним можно с помощью ключевого слова as:

mysql> SELECT color FROM cars AS c;

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

Между таблицами существуют связи по определенным столбцам. Столбец cars.id связывает таблицу cars с таблицей timetable через столбец timetable.car_number. Аналогично строится связь между таблицей drivers и timetable.

Объединение осуществляется по столбцам, образующим связь. При этом вы­бираются одинаковые значения полей, по которым осуществляется связь между таблицами:

timetable. car_number=cars . id

и

timetable. driver_number=drivers . id

 

Определим дату (данные из столбца timetable.use_on) и фамилию водителя (drivers.famiiy_name), который водил машину определенного цвета

(cars .color):

mysql> SELECT t.use_on, d.family_name, c.color

-> FROM timetable AS t, cars AS c, drivers AS d

-> WHERE t.car_number=c.id AND t.driver_number=d.id;

 

Выборка данных происходит из таблиц timetable, cars и drivers, для кото­рых определены псевдонимы, сокращающие запись запроса и облегчающие его редактирование. Выбираются только те строки из таблиц timetable и cars, в которых указан одинаковый учетный номер автомобиля. А из таб­лиц timetable и drivers выбираются те строки, в которых значения учетного номера водителя одинаковы.

 

Команды обновления и удаления данных в таблицах

Если необходимо изменить значение поля, то следует использовать команду update. В команде нужно указать имя таблицы и использовать предложение set, определяющее требуемое изменение. Например, исправим дату выпуска автомобиля "Renault":

mysql>UPDATE cars SET madein='2004' WHERE model='Renault';

 

Можно изменить значения поля во всем столбце, например, при переоценке товаров. Увеличим цены на все товары на 10% с учетом инфляции:

mysql>UPDATE goods SET price = price * 1.1;

Удалить целые строки из таблицы можно с помощью команды delete. Уда­лим некоторые строки из таблицы cars в связи с продажей старых машин, изготовленных до 2006 г.:

mysql>DELETE FROM cars where madein<=2005;

 

Можно удалить и все записи из таблицы командой

mysql>DELETE FROM cars;

При этом счетчик автомобилей в столбце id не сбрасывается, и при вставке новых данных MySQL автоматически присвоит новой записи следующий номер.

Чтобы очистить таблицу и одновременно сбросить счетчик, нужно использовать команду

mysql>TRUNCATE cars;

Удалить таблицу можно командой drop table:

mysql>DROP TABLE timetable;

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

mysql>DROP DATABASE taxi;

 

 


Поделиться:

Дата добавления: 2014-11-13; просмотров: 118; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты