В данном конспекте рассмотрим как производится выборка данных из базы с помощью оператора SELECT. Использование DISTINCT. Операторы сравнения и логические операторы применяемые в предложении WHERE. А также операторы IN, BETWEEN и LIKE. Агрегатные функции типа COUNT(), AVG() и т.д. И рассмотрим применение операторов GROUP BY и HAVING.
И так простейшая выборка данных осуществляется оператором SELECT:
1
|
|
Для выбора не повторяющихся значений в столбцах применяется ключевое слово DISTINCT:
1
|
|
DISTINCT применяется ко всем столбцам указанным в операторе SELECT
Для фильтрования выборки используется предложение WHERE, после которого описывается предикат.
В предложении WHERE могут использоваться следующие операторы:
Операторы сравнения: =, >, <, >=, <=, <>. Если в в выражении будет вычислен NULL, то результатом будет UNKNOWN.
Логические операторы: - OR, AND, NOT могут принимать три значения: TRUE, FALSE и UNKNOWN.
IN — оператор перечисления:
1 2 |
|
- BETWEEN — выбор из диапазона:
1 2 |
|
LIKE — оператор поиска подстрок в текстах. В шаблонах используются два символа: ‘_’ (соответствует одному символу) и ‘%’ (соответствует любому символу, даже его отсутствие).
IS NULL и IS NOT NULL — проверка на NULL.
Агрегатные функции.
Агрегатные функции применяются сразу для всей группы столбцов, которые были выбраны, и вычисляет для них единственное значение.
Список всех агрегатных функций:
- COUNT — количество строк или не пустых значений (не NULL):
- SUM — сумма значений
- AVG — среднее арифметическое:
- MAX — максимально значений
- MIN — минимально значений
Применение GROUP BY и HAVING.
GROUP BY позволяет выделить из отдельного столбца группы значений этого столбца и применить у ним агрегатную функцию. Допустим, есть у нас такая таблица:
При выполнении следующего запроса, сначала все выбранные строки группируются по одинаковому значению в поле City, затем к каждой группе применяется агрегатная функция MAX():
1 2 3 |
|
Результат:
Так как предложение WHERE фильтрует строки до того как они попадут в группы, т.е. до применения GROUP BY, то его использовать не возможно, если нам надо задать условие для всей группы. Для этого есть оператор HAVING, который похож на WHERE только задает фильтр сразу к группе.
Допустим, есть следующая таблица:
При выполнении следующего запроса, сначала все строки группируются по одинаковым сочетаиням значений в полях Snum и Odate, а затем, к каждой группе применяет опертор MAX():
1 2 3 4 |
|
Результат: