.. _mysql-select-data: Шаг 5 - SELECT: углублённое изучение ==================================== Простой вывод и устранение дубликатов (DISTINCT) ------------------------------------------------ **Выбор конкретных столбцов:** .. code-block:: sql SELECT emp_no, last_name FROM employees LIMIT 5; **Результат:** +--------+-----------+ | emp_no | last_name | +========+===========+ | 10001 | Facello | +--------+-----------+ | 10002 | Simmel | +--------+-----------+ | 10003 | Bamford | +--------+-----------+ | 10004 | Koblick | +--------+-----------+ | 10005 | Maliniak | +--------+-----------+ **Устранение дубликатов с DISTINCT:** В таблице `salaries` много записей для каждого сотрудника. Для получения уникальных ID: .. code-block:: sql SELECT DISTINCT emp_no FROM salaries LIMIT 5; **Результат:** +--------+ | emp_no | +========+ | 10001 | +--------+ | 10002 | +--------+ | 10003 | +--------+ | 10004 | +--------+ | 10005 | +--------+ **Особенности DISTINCT:** - Применяется ко всем выбираемым столбцам - Сохраняет строки, где хотя бы одно значение отличается - `ALL` (противоположность DISTINCT) используется редко Условия выборки (WHERE) ------------------------ **Фильтрация по строковому полю:** .. code-block:: sql SELECT emp_no, dept_no, from_date, to_date FROM dept_emp WHERE dept_no = 'd001' LIMIT 3; **Результат:** +--------+---------+------------+------------+ | emp_no | dept_no | from_date | to_date | +========+=========+============+============+ | 10017 | d001 | 1993-08-03 | 2000-08-03 | +--------+---------+------------+------------+ | 10049 | d001 | 1992-05-05 | 2000-05-05 | +--------+---------+------------+------------+ | 10060 | d001 | 1994-02-23 | 1997-01-31 | +--------+---------+------------+------------+ **Фильтрация по числовому полю:** .. code-block:: sql SELECT DISTINCT emp_no FROM salaries WHERE salary > 60000 LIMIT 5; **Результат:** +--------+ | emp_no | +========+ | 10001 | +--------+ | 10002 | +--------+ | 10004 | +--------+ | 10005 | +--------+ | 10006 | +--------+ Особенности MySQL: ------------------ 1. **Чувствительность к регистру** (зависит от collation): .. code-block:: sql SELECT * FROM employees WHERE last_name = 'facello'; -- Может не сработать SELECT * FROM employees WHERE last_name COLLATE utf8mb4_general_ci = 'facello'; -- Регистронезависимо