Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gosy_nepolnostyu_7v1.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.7 Mб
Скачать

16. [Done]Особенности применения конструкций where, order by, group by, having и агрегирующих функций в языке sql

WHERE — оператор в SQL, указывающий, что оператор языка управления данными (DML) должен действовать только на записи, удовлетворяющие определенным критериям. Критерии должны быть описаны в форме предикатов. Раздел WHERE — не обязательный раздел в SQL (DML) предложениях. Он используется в качестве условия в SQL-запросе для ограничения записей обрабатываемых в выражениях SQL (DML) или возвращаемых запросом.

WHERE is an SQL reserved word.

The WHERE clause is used in conjunction with SQL DML statements, and takes the following general form:

SQL-DML-Statement FROM TABLE_NAME WHERE predicate

all rows for which the predicate in the WHERE clause is True are affected (or returned) by the SQL DML statement or query. Rows for which the predicate evaluates to False or Unknown (NULL) are unaffected by the DML statement or query.

The following query returns only those rows from table mytable where the value in column mycol is greater than 100.

SELECT * FROM   mytable WHERE  mycol > 100

The following DELETE statement removes only those rows from table mytable where the column mycol is either NULL or has a value that is equal to 100.

DELETE FROM   mytable WHERE  mycol IS NULL OR mycol = 100

ORDER BY — необязательный (опциональный) параметр операторов SELECT и UNION, который означает что операторы SELECT, UNION возвращают набор строк, отсортированных по значениям одного или более столбцов. Его можно применять как к числовым столбцам, так и к строковым. В последнем случае, сортировка будет происходить по алфавиту.

Использование предложения ORDER BY является единственным способом отсортировать результирующий набор строк. Без этого предложения СУБД может вернуть строки в любом порядке. Если упорядочение необходимо, ORDER BY должен присутствовать в SELECT, UNION.

Сортировка может производиться как по возрастанию, так и по убыванию значений.

  • Параметр ASC (по умолчанию) устанавливает порядок сортирования во возрастанию, от меньших значений к большим.

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

SELECT * FROM Employees ORDER BY LastName, FirstName

GROUP BY - необязательный (опциональный) параметр операторa SELECT, для группировки строк по результатам агрегатных функций (MAX, SUM, AVG, …).

Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY.

SELECT Partner, SUM(SaleAmount) FROM Sales  WHERE SaleDate > '01-Jan-2000'  GROUP BY Partner

HAVING — необязательный (опциональный) параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …).

HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов, указанных в GROUP BY, и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY.

Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY.

Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы, полностью дублируя WHERE (допускается не во всех реализациях стандарта SQL).

Примеры[править | править вики-текст]

Возвращает список идентификаторов отделов, продажи которых превысили 1000 долларов за 1 января 2000 года, вместе с суммами продаж за этот день:

SELECT DeptID, SUM(SaleAmount) FROM Sales  WHERE SaleDate = '01-Jan-2000'  GROUP BY DeptID  HAVING SUM(SaleAmount) > 1000

Следующий запрос вернет список отделов, в которых работает более одного сотрудника:

SELECT DepartmentName, COUNT(*)  FROM employee, department  WHERE employee.DepartmentID = department.DepartmentID  GROUP BY DepartmentName  HAVING COUNT(*) > 1;

  • AVG() - Returns the average value.

  • COUNT() - Returns the number of rows.

  • FIRST() - Returns the first value.

  • LAST() - Returns the last value.

  • MAX() - Returns the largest value.

  • MIN() - Returns the smallest value.

  • SUM() - Returns the sum.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]