Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по Базам данных » MSSQL - Все статьи »

Обсудить на форуме Обсудить на форуме

SELECT - операторы сравнения, логические и специальные.

На предыдущем шаге мы использовали оператор равенства = в предложении WHERE для выбора записей из таблиц. Transact-SQL позволяет строить сложные условия отбора записей и для этого предоставляет операторы отношения, логические операторы и специальные операторы. Операторы отношения это:

  • = Равно
  • > Больше чем
  • < Меньше чем
  • >= Больше или равно
  • <= Меньше или равно
  • <> Не равно
Они имеют стандартные значения для символьных значений и дат. Символьные значения сравниваются в терминах их кодов.
Предположим, что нам надо увидеть всех заказчиков в рейтингом выше 200:
SELECT *
      FROM Customers
      WHERE rating > 200
Результат таков:
CNUM  CNAME                             CITY       RATING  SNUM
----- --------------------------------- ---------- ------- -----
2004  Концерн "Дети лейтенанта Шмидта"  Бобруйск   300     1002
2008  ОАО "Валют-транзит"               Караганда  300     1007
Логические операторы:
  • AND логическое "И"
  • OR логическое "ИЛИ"
  • NOT логическое отрицание
Оператор AND сравнивает два логических значения и возвращает TRUE (истина), если оба значения истинны (т.е. равны TRUE), в остальных случаях - FALSE (ложь). Оператор OR возвращает TRUE, если хотя бы один из аргументов равен TRUE. Оператор NOT возвращает TRUE, если его аргумент равен FALSE и наоборот.
Использование логических операторов значительно увеличивает возможности команды SELECT. Например, для просмотра заказчиков из Караганды, которые имеют рейтинг выше 200 достаточно команды:
SELECT *
FROM Customers
WHERE city = 'Караганда' AND
      rating > 200
В нашей БД имеется только один заказчик, удовлетворяющий этому условию.
CNUM  CNAME                             CITY       RATING  SNUM
----- --------------------------------- ---------- ------- -----
2008  ОАО "Валют-транзит"               Караганда  300     1007
Если использовать OR, то получим всех заказчиков, находящихся в Караганде или имеющих рейтинг выше 200:
SELECT *
FROM Customers
WHERE city = 'Караганда' OR
      rating > 200
Результат запроса:
CNUM  CNAME                             CITY       RATING  SNUM
----- --------------------------------- ---------- ------- -----
2004  Концерн "Дети лейтенанта Шмидта"  Бобруйск   300     1002
2008  ОАО "Валют-транзит"               Караганда  300     1007
NOT используется для инвертирования значений. Запрос:
SELECT *
FROM Customers
WHERE city = "Караганда" OR
	NOT rating > 200
выдаст:
CNUM  CNAME                CITY      RATING  SNUM   
----- -------------------- --------- ------- ------ 
2001  ТОО Рога и копыта    Москва    100     1001
2002  AО Бендер и К        Одесса    200     1003
2003  Фирма ХХХ            Рязань    200     1002
2006  Clemens              Лондон    100     1001
2007  ОАО "ООО"            ТОМСК     100     1004
2008  ОАО "Валют-транзит"  Караганда 300     1007
Для группировки выражений Transact-SQL позволяет использовать круглые скобки ( ). Например:
SELECT *
FROM Customers
WHERE NOT (city = 'Караганда' OR
      rating > 200)
Этот запрос отбирает заказчиков, которые НЕ находятся в Караганде или НЕ имеют рейтинг больше 200. Результат:
CNUM  CNAME              CITY    RATING  SNUM
----- ------------------ ------- ------- -----
2001  ТОО Рога и копыта  Москва  100     1001
2002  AО Бендер и К      Одесса  200     1003
2003  Фирма ХХХ          Рязань  200     1002
2006  Clemens            Лондон  100     1001
2007  ОАО "ООО"          ТОМСК   100     1004

Рассмотрим теперь специальные операторы: IN, BETWEEN, LIKE, IS NULL.

Оператор IN определяет список значений, в который должно входить значение поля. Например, если Вы хотите найти всех продавцов находящихся в Москве или Хабаровске, Вы должны использовать такой запрос:

SELECT * 
FROM Salespeople
WHERE city = 'Москва' OR
   city = 'Хабаровск'
Но есть есть более простой способ:
SELECT *
FROM Salespeople
WHERE city IN ( 'Москва', 'Хабаровск' )
Результат этого запроса:
SNUM  SNAME   CITY       COMM
----- ------- ---------- -----
1001  Иванов  Москва     12.0
1002  Петров  Хабаровск  13.0
Набор значений для оператора IN заключается в круглые скобки, значения разделяются запятыми.

Оператор BETWEEN похож на оператор IN. В отличие от списка допустимых значений BETWEEN определяет диапазон значений. В запросе Вы должны указать слово BETWEEN затем начальное значение, ключевое слово AND и конечное значение. Первое значение должно быть меньше второго. Следующий запрос выберет Агентов с комиссионными между 10 и 12:

SELECT *
FROM Salespeople
WHERE comm BETWEEN 10 AND 12
SNUM  SNAME    CITY       COMM  
----- -------- ---------- ----- 
1001  Иванов   Москва     12.0
1003  Егоров   Караганда  10.0
1004  Сидоров  Сочи       11.0

Оператор LIKE применим только к символьным полям, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть совпадает ли с условием часть его строки. В качестве условия он использует специальные символы:

  • символ подчеркивания _ - замещает любой одиночный символ. Например, 'к_т' будет соответствовать 'кот' и 'кит', но не 'крот'.
  • знак процента % - замещает последовательность любого числа символов. Например, '%м%р' будет соответствовать 'компьютер' и 'омар'.
Давайте выберем заказчиков чьи имена начинаются с буквы 'О':
SELECT *
FROM Customers
WHERE cname LIKE 'О%'
CNUM  CNAME                CITY       RATING  SNUM
----- -------------------- ---------- ------- -----
2008  ОАО "Валют-транзит"  Караганда  300     1007
2007  ОАО "ООО"            ТОМСК      100     1004
LIKE удобен поиске значений, если Вы точно не помните как они пишутся. Вы просто можете использовать ту часть, которую помните.

Так как NULL указывает на отсутствие значения Вы не можете знать каков бужет результат любого сравнения с NULL. Часто Вам различать строки, содержащие значения NULL в каком-либо столбце. Для этого существует специальный оператор IS NULL. Выберем из нашей БД заказчиков с NULL значениями в столбце city:

SELECT *
FROM Customers
WHERE city IS NULL
В БД таких записей нет, но они могут возникнуть при добавлении нового заказчика без прикрепления к нему агента.

Теперь Вы знаете как можно строить запросы к таблицам, используя любые условия. Далее следует: агрегатные функции и просто функции, GROUP BY,ORDER BY.


Может пригодится:


Автор:
Прочитано: 5539
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру