Глава 6. Оператор выбора Select
6.1 Запросы к отдельным таблицам
Достаточно распространенной является задача получения данных из одной или нескольких таблиц и формирования на их основе каких-либо отчетов.
Использование выражения SELECT
Команда SELECT представляет собой выражение, инициирующее выполнение запроса. В данном случае запрос является командой на получение данных.
Выражение SELECT имеет строго определенный формат:
SELECT <список имен полей> FROM <таблица>
WHERE <условие отбора> ORDER by <список имен полей>
Выражение SELECT является ключевым словом, сообщающим базе данных о том, что эта команда является запросом. Далее следует список полей, которые будут возвращены в запросе, либо символ *, указывающий на то, что должны быть возвращены все поля. Ключевое слово FROM должно присутствовать в каждом запросе. После него указывается имя таблицы, к которой будет осуществлен запрос. В выражении SELECT ключевые слова WHERE, ORDER BY необязательны.
Выборка по условию
Выборку по условию реализует оператор WHERE. Оператор является частью выражения SELECT и служит для задания условий отбора записей в результирующий набор. В ходе выполнения запроса происходит проверка всех записей на соответствие условию отбора. В предложении WHERE можно использовать один из шести операторов отношений, определенных в SQL. Эти операторы приведены в таблице 6.1.
Таблица 6.1.
Оператор
|
Описание
|
<
|
Меньше
|
<=
|
Меньше или равно
|
<>
|
Не равно
|
=
|
Равно
|
>
|
Больше
|
>=
|
Больше или равно
|
В качестве примера можно привести довольно простой запрос:
SELECT State, City, Company FROM Customer WHERE State = 'CA'
При обработке запроса был производен отбор всех записей, поле State которых имеет значение СА.
Можно произвести выборку по совпадающим значениям полей. Например, необходимо найти компании, в которых телефон и факс имеют один и тот же номер. Условие запроса в этом случае будет довольно простым:
SELECT Company, Phone, Fax FROM Customer WHERE Phone = Fax
Исключение повторяющихся значений
Для получения результатов без повторяющихся значений используется оператор DISTINCT. Например,
SELECT DISTINCT Country FROM Customer
Но в некоторых случаях исключение дубликатов может привести к потере ценной информации. Предположим, необходимо получить список покупателей, используя их полные имена. Но полное совпадение фамилии, имени и отчества не такое уж маловероятное событие. Поэтому при использовании в запросе оператора DISTINCT часть информации может быть потеряна.
Вычисляемые поля
Автоматическое вычисление значений полей довольно часто применяется в самых разнообразных запросах. Пример соответствующего запроса выглядит довольно просто:
SELECT OnHand, OnOrder, (OnHand*OnOrder) AS Произведение, (OnHand+OnOrder) AS Сумма FROM Parts
В данном примере производится перемножение, и суммирование значений полей OnHand и OnOrder. Те же действия с полями могут быть произведены с использованием числовых констант. Оператор AS присваивает данному полю другое имя, которое будет использовано в результирующем наборе. Запрос SELECT может также включать в себя числовые и текстовые константы.
Следующий запрос
Select fam, name_r, (GetDate()-Year_r) AS Age from Pers
создает поле Age, вычисляемое по формуле (GetDate()-Year_r),
GetDate() – текущая дата в MS SQL Server.
Операторы сравнения и логические операторы
Реляционным оператором называют математический символ, который указывает на определенный тип сравнения между двумя значениями. Реляционные операторы, или операторы сравнения, могут использоваться для определения того, отвечает ли данное значение какому-либо диапазону. Логические операторы позволяют задать в запросе логические условия. Оператор AND реализует логическое «И». Оператор OR реализует логическое «ИЛИ». Выражение с его использованием, будет считаться истинным, если хотя бы одно из условий тоже истинно. Оператор NOT означает логическое отрицание. Его действие сводится к тому, что он инвертирует логическое условие, перед которым его располагают.
В качестве примера можно привести запрос, позволяющий выбрать сотрудников, получающих заработную плату в определенном численном промежутке. Данные будут извлекаться из таблицы Employee:
SELECT LastName, FirstName, Salary FROM Employee
WHERE Salary >= 25000 AND Salary <=30000
В результате выполнения запроса возвращаются имена сотрудников с заработной платой от 25 до 30 тысяч включительно. В данном случае оператор AND используется для задания диапазона выбираемых значений.
Теперь можно изменить данный запрос. Можно отыскать всех сотрудников, поле PhoneExt которых имеет значение 22:
SELECT LastName, FirstName, Salary, PhoneExt FROM Employee
WHERE Salary >= 25000 AND Salary <= 30000 and PhoneExt = '22'
Если же потребуется отыскать сотрудников, поле PhoneExt которых имеет значение, не равное 22, запрос будет незначительно изменен:
SELECT LastName, FirstName, Salary, PhoneExt FROM Employee
WHERE Salary >= 25000 AND Salary <= 30000 and not PhoneExt = '22'
Как видно из текста запроса, логическое условие NOT позволило исключить ненужные номера.
Теперь можно рассмотреть пример запроса с использованием оператора OR. Предположим, менеджеру понадобилось получить списки всех сотрудников по фамилии Johnson, либо тех сотрудников, которые получают заработную плату более 45000. Составить запрос будет нетрудно:
SELECT LastName, FirstName, Salary FROM Employee
WHERE LastName = 'Johnson' or Salary > 45000
Стоит обратить внимание на действие оператора 0R. В набор данных были включены записи, значение поля Salary которых превышало 45000, и те записи, в которых поле LastName имело значение Johnson.
В SQL –можно использовать и специальные операторы сравнения, приведенные в таблице 6.2.
Таблица 6.2.
Достарыңызбен бөлісу: |