Шаг 5 - SELECT - дальше и глубже -------------------------------------- Просто вывод и как убрать дубликаты(DISTINCT) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Продолжим изучение возможностей команды ``SELECT`` - основы SQL. Она способна извлечь строго определенную информацию из таблицы. Для начала рассмотрим выбор определенных столбцов таблицы. Это достигается исключением столбцов из команды ``SELECT``. Запрос: .. code-block:: sql .mode table SELECT last_name, emp_no FROM employees; выведет следующее: .. code-block:: sql +--------+-----------+ | emp_no | last_name | +--------+-----------+ | 10001 | Facello | | 10002 | Simmel | | 10003 | Bamford | | 10004 | Koblick | | 10005 | Maliniak | +--------+-----------+ ``DISTINCT`` - аргумент, который обеспечивает устранение двойных значений в Вашей команде ``SELECT``. Предположим, что Вы хотите знать какие работники в настоящий момент имеют есть в таблице зарплат. Вам нужен только список кодов сотрдуников (emp_no). Поэтому Вы можете ввести: .. code-block:: sql select emp_no from employees limit 15; И получите такой результат: .. code-block:: sql +--------+ | emp_no | +--------+ | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | | 10001 | +--------+ Как видим коды дублируются. Для получения списка без дубликатов надо ввести следующее: .. code-block:: sql select DISTINCT emp_no from salaries limit 15; Результат уже другой: .. code-block:: sql +--------+ | emp_no | +--------+ | 10001 | | 10002 | | 10003 | | 10004 | | 10005 | | 10006 | | 10007 | | 10008 | | 10009 | | 10010 | | 10011 | | 10012 | | 10013 | | 10014 | | 10015 | +--------+ ``DISTINCT`` может указываться только один раз в команде ``SELECT``, если выбираются несколько столбцов, то ``DISTINCT`` опускает строки, где все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а некоторые различны - будут сохранены. Вместо ``DISTINCT`` Вы можете указать ``ALL``. Это будет иметь противоположный эффект, дублирование строк сохранится. Поскольку это тот же самый случай, когда не указывается никакой аргумент, то ``ALL`` по существу лишь пояснительный аргумент. Условия выборки (WHERE) ~~~~~~~~~~~~~~~~~~~~~~~ Таблицы имеют тенденцию становиться очень большими. Поскольку обычно только некоторые их них интересуют Вас в данное время имеется возможность устанавливать критерии, чтобы определить какие строки будут выбраны. ``WHERE`` - предложение команды ``SELECT``, которое позволяет задавать условие, которое может быть верным или неверным для любой строки таблицы. Команда извлекает только те строки из таблицы, для которых это условие верно. У нас есть отделы, **d001** это код отдела **Marketing**. Предположим, что Вы хотите видеть нормера сотрудников в отделе маркетинга. Нет ничего проще: .. code-block:: sql SELECT emp_no, dept_no FROM dept_emp WHERE dept_no = 'd001' Когда в запросе имеется предложение ``WHERE`` SQL Server просматривает всю таблицу построчно и исследует каждую строку, чтобы определить верно ли утверждение. .. note:: Строковые константы типа d001 в SQL ограничиваются либо апострофами ``'``, либо кавычками ``"`` . Теперь попробуем построить запрос с числовым полем в предложении ``WHERE``. Поле **salary** таблицы Работники (**employees**) предназначено, чтобы указывать зарплату в разные месяцы для сотрудников . Можно разделять сотрудников по зарплате. Выберем всех сотрудников с зарплатой с рейтингом больше 60000: .. code-block:: sql select DISTINCT emp_no from salaries where salary>60000 limit 15; Кавычки здесь не используются, т.к. рейтинг - это числовое поле. Результат запроса: .. code-block:: sql +--------+ | emp_no | +--------+ | 10001 | | 10002 | | 10004 | | 10005 | | 10006 | | 10007 | | 10009 | | 10010 | | 10013 | | 10014 | | 10016 | | 10017 | | 10018 | | 10021 | | 10024 | +--------+ Теперь Вы знаете несколько способов как заставить таблицу давать Вам ту информацию какую Вы хотите. Самое важное, что у Вас естьвозможность устанавливать условие, которое выделяет строку из тысяч строк в таблице. Условия могут быть очень сложными, именно это и делает язык SQL таким мощным.