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