SELECT * FROM company
ORDER BY co_name, address DESC
Строки результирующего множества будут сначало упорядочены по имени компании, а затем внутри компании, в обратном порядке, по адресу.
DISTINCT
|
ID |
Dept |
Salary |
|
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT DISTINCT Dept
FROM Salaries
![]()
![]()
Salaries
|
Dept |
|
100 124 234 |
![]()
![]()
Result
SELECT операция по умолчанию возвращает строки, среди которых могут быть и дублирующиеся. Предложение DISTINCT позволяет исключить все дублирующиеся строки из результирующегося множества.
Исключение производится последовательно для всех данных, таким образом DISTINCT DEPT возвращает номера отделов, в то время как DISTINCT DEPT, SALARY возвращает одну строку для каждой комбинации отдел/зарплата в таблице.
GROUP BY
|
ID |
Dept |
Salary |
|
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT Dept, SUM(Salary)
FROM Salaries
GROUP BY Dept
Salaries
|
Dept |
Salary |
|
100 124 234 |
5000 55000 40000 |
![]()
![]()
Result
Предложение GROUP BY используется вместе с функциями столбца для формирования суммарной информации по сгруппированным строкам. Строки объеденяются на основании одинаковых значений в столбцах группирования.
В приведенном примере запрашивалась информация о зарплате и получен результат, который показывает итоговую сумму зарплаты по каждому отделу.
В связи с использованием GROUP BY необходимо помнить, что столбцы, перечисленные в списке выборки, должны либо встретиться в предложении GROUP BY, либо они должны быть атрибутом функции столбца. Поэтому, так как Dept не задан в функции столбца и отсутствует в списке GROUP BY, следующий запрос будет ошибочным:
SELECT Dept, AVG(Salary)
FROM Salaries
HAVING
|
ID |
Dept |
Salary |
|
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT Dept, SUM(Salary)
FROM Salaries
GROUP BY Dept
HAVING SUM(Salary) > 28000
![]()
![]()
Salaries
|
Dept |
Salary |
|
124 234 |
55000 40000 |
![]()
![]()
Result
Предложение HAVING играет такую же роль для групп строк, что и фраза WHERE для строк. Вначале выполняется функция столбца, затем к результату применяется HAVING. Если результат удовлетворяет условию, он передается на выход.
Предложение WHERE используется чтобы отфильтровать строки для агрегатной функции и предложение HAVING используется чтобы отфильтровать результат.
Пример:
SELECT Dept, SUM(Salary)
FROM Salaries
WHERE Dept BETWEEN 2 AND 50 AND Salary > 10000
GROUP BY Dept
HAVING SUM(Salary) > 40000
Предложение HAVING оставляет в результирующем множестве информацию только о персонах, работающих в отделах с суммарной заработной платой больше 28000.
Остерегайтесь, SQL может Кусать!
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.