|
|
|
| Подскажите, вкратце, чем отличаются эти операторы? | |
|
|
|
|
|
|
|
для: rprint-max
(06.10.2006 в 12:27)
| | ORDER сортирует полученные результаты по выбранному полю, сортировать можно по-возрастанию и убыванию значений.
SELECT * FROM table ORDER BY name
|
Отсортирует вывод по именам
Андрей | 23
Артем |22
Дмитрий | 33
Сергей | 23
Ян | 22
GROUP группирует вывод результатов по какому либо полю.
SELECT * FROM table GROUP BY age
|
Сгруппирует результаты по возрасту.
Андрей | 23
Артем |22
Дмитрий | 33
Часто используют для подсчета числа записей в группе.
SELECT COUNT(*) FROM table GROUP BY age
|
2
2
1 | |
|
|
|
|
|
|
|
для: rprint-max
(06.10.2006 в 12:27)
| | order - это по какому полю/ключу и в каком порядке(прямом/обратном) упорядочить выбранные записи.
group - это сгруппировать записи по какому-то полю/ключу, оставив только одну запись с каждым значением.
Скажем
id
3
1
2
2
3
группируем по id подсчитывая их количество
SELECT ip, count(ip) FROM `table` group by ip
имеем
3 2
1 1
2 2
Упорядочиваем
SELECT ip, count(ip) FROM `table` group by ip order by ip
1 1
2 2
3 2 | |
|
|
|
|
|
|
|
для: rprint-max
(06.10.2006 в 12:27)
| | Эти инструкции не имеют ничего общего.
То есть вообще ничего.
Инструкция GROUP BY разбивает строки табличной выборки на группы, которые потом обрабатываются агрегатными функциями SUM, AVG, MAX и т.п. независимо в каждой группе.
При этом в результате оказываются строки по числу групп, а не по числу строк в табличной выборке. Можно включать в резуьтат строки не со всех групп, а с некоторых. Для этого применяется инструкция HAVING (формат аналогичен WHERE)
Инструкция ORDER BY работает со строками результата.
Она ничего не группирует, она всего лишь задает порядок вывода строк.
Общий порядок исполнения запроса такой:
из таблиц, указанных в разделе FROM c учетом оперяций "эапятая" и разных JOIN строится табличная выборка.
Строки из нее пропускаются через условия WHERE. Неподошедшие исключаются.
Если присутствует GROUP BY или агрегатные функции в запросе, полученные строки разбиваются на группы (при отсутствии GROUP BY формируется одна общая группа)
к которым применяются агрегатные функции, формирующие по одной строке на каждую группу.Если указано HAVING, строки, не попадающие под условие, удаляются.
Далее исполняется инструкция ORDER BY, которая расставляет строки в заказанном порядке.
В общем случае в SQL нельзя применять GROUP BY так, чтоб у SELECT оставались повисшими какие-то поля, т.е. каждое выбираемое поле должно быть либо перечислено в GROUP BY либо быть параметром агрегатной функции, иначе возникает неоднозначность.
В MySQL висячие поля допускаются, сервер при этом формирует DISTINCT-выборку, выкидывая из табличной выборки все строки кроме одной. | |
|
|
|