Шаг 5 - SELECT - дальше и глубже

Продолжим изучение возможностей команды SELECT - основы Transact-SQL. Она способна извлечь строго определенную информацию из таблицы. Для начала рассмотрим выбор определенных столбцов таблицы. Это достигается исключением столбцов из команды SELECT. Запрос:

SELECT sname, comm
FROM Salespeople
выведет следующее:
sname    comm
-------- -----------
Иванов   12
Петров   13
Егоров   10
Сидоров  11
Шилин    15

DISTINCT - аргумент, который обеспечивает устранение двойных значений в Вашей команде SELECT. Предположим, что Вы хотите знать какие агенты в настоящий момент имеют заказы в таблице заказов. Вам не нужно знать сколько заказов имеет каждый, Вам нужен только список кодов агентов (snum). Поэтому Вы можете ввести:

SELECT snum
FROM Orders
И получите такой результат:
snum        
----------- 
1007
1004
1001
1002
1007
1002
1001
1003
1002
1001
Как видим коды дублируются. Для получения списка без дубликатов надо ввести следующее:
SELECT DISTINCT snum
FROM Orders
Результат уже другой:
snum
-----------
1001
1002
1003
1004
1007
DISTINCT может указываться только один раз в команде SELECT, если выбираются несколько столбцов, то DISTINCT опускает строки, где все выбранные поля идентичны. Строки, в которых некоторые значения одинаковы, а некоторые различны - будут сохранены.

Вместо DISTINCT Вы можете указать ALL. Это будет иметь противоположный эффект, дублирование строк сохранится. Поскольку это тот же самый случай, когда не указывается никакой аргумент, то ALL по существу лишь пояснительный аргумент.

Таблицы имеют тенденцию становиться очень большими. Поскольку обычно только некоторые их них интересуют Вас в данное время имеется возможность устанавливать критерии, чтобы определить какие строки будут выбраны.

WHERE - предложение команды SELECT, которое позволяет задавать условие, которое может быть верным или неверным для любой строки таблицы. Команда извлекает только те строки из таблицы, для которых это условие верно. Предположим, что Вы хотите видеть имена и комиссионные всех агентов в Москве. Нет ничего проще:

SELECT sname, city
FROM Salespeople
WHERE city = 'Москва'

Когда в запросе имеется предложение WHERE SQL Server просматривает всю таблицу построчно и исследует каждую строку, чтобы определить верно ли утверждение.

Примечание
Строковые константы типа 'Москва' в Transact-SQL ограничиваются либо апострофами ', либо кавычками ".

Теперь попробуем построить запрос с числовым полем в предложении WHERE. Поле rating таблицы Заказчики (Customers) предназначено, чтобы разделять заказчиков на группы, основанные на некоторых критериях, которые могут быть получены через это число. Например это может форма оценки кредита и оценка, зависящая от объема предыдущих заказов. Выберем всех заказчиков с рейтингом 100:

SELECT *
FROM Customers
WHERE rating = 100
Кавычки здесь не используются, т.к. рейтинг - это числовое поле. Результат запроса:
CNUM  CNAME              CITY    RATING      SNUM
----- ------------------ ------- ----------- -----------
2001  ТОО Рога и копыта  Москва  100         1001
2006  Clemens            Лондон  100         1001
2007  ОАО "ООО"          ТОМСК   100         1004

Теперь Вы знаете несколько способов как заставить таблицу давать Вам ту информацию какую Вы хотите. Самое важное, что у Вас естьвозможность устанавливать условие, которое выделяет строку из тысяч строк в таблице. Условия могут быть очень сложными, именно это и делает язык SQL таким мощным.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Aidar Talibzhanov - 26.12.99