В данном конспекте рассмотрим как производится выборка данных из базы с помощью оператора 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 |  | 
Результат:
