Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические SQL запросы на выборку.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
9.64 Mб
Скачать

Реляционные операторы

Реляционный оператор - математический символ который указывает на определенный тип сравнения между двумя значениями. Предположим что вы хотите видеть всех Продавцов с их комиссионными выше определенного значения. Вы можете использовать тип сравнения "больше чем" - (>). Реляционные операторы которыми располагает SQL:

=

Равный к

>

Больше чем

<

Меньше чем

>=

Больше чем или равно

<=

Меньше чем или равно

<>

Не равно

Значения сравниваемые здесь называются - скалярными значениями. Скалярные значения производятся скалярными выражениями; 1 + 2 - это скалярное выражение которое производит скалярное значение 3. Скалярное значение может быть символом или числом, хотя очевидно что только номера используются с арифметическими операторами, такими как +(плюс) или *(звезда). Предикаты обычно сравнивают значения скалярных величин, используя или реляционные операторы или специальные операторы SQL чтобы увидеть верно ли это сравнение. Предположим что вы хотите увидеть всех заказчиков с оценкой(rating) выше 200. Так как 200 - это скалярное значение, как и значение в столбце оценки, для их сравнения вы можете использовать реляционный оператор.

SELECT * FROM Customers WHERE rating > 200;

Вывод для этого запроса показывается в Рисунке 8.

Конечно, если бы мы захотели увидеть еще и заказчиков с оценкой равной 200, мы стали бы использовать предикат

rating > = 200

Рисунок 8 Использование больше чем (>)

Булевы операторы

Основные Булевы операторы также распознаются в SQL. Выражения Буля - являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят единственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются:

AND, OR, и NOT.

Как вы можете понять, Булева верная / неверная логика - основана на цифровой компьютерной операции; и фактически, весь SQL(или любой другой язык) может быть сведен до уровня Булевой логики.

Операторы Буля и как они работают:

  • AND берет два Буля ( в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.

  • OR берет два Буля ( в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.

  • NOT берет одиночный Булев ( в форме NOT A) как аргументы и заменяет его значение с неверного на верное или верное на неверное.

Связывая предикаты с операторами Буля, вы можете значительно увеличить их возможности. Предположим вы хотите видеть всех заказчиков в San Jose которые имеют оценку (рейтинг) выше 200:

SELECT *

FROM Customers

WHERE city = 'San Jose'

AND rating > 200;

Вывод для этого запроса показан на Рисунке 9. Имеется только один заказчик который удовлетворяет этому условию.

Если вы же используете OR вы получите всех заказчиков которые находились в San Jose или (OR) которые имели оценку выше 200.

Рисунок 9 SELECT использующий AND

SELECT *

FROM Customers

WHERE city = 'San Jose'

OR rating > 200;

Вывод для этого запроса показывается в Рисунке 10.

Рисунок 10 SELECT использующий OR

NOT может использоваться для инвертирования значений Буля. Имеется пример запроса с NOT:

SELECT *

FROM Customers

WHERE city = 'San Jose'

OR NOT rating > 200;

Вывод этого запроса показывается в Рисунке 11.

Рисунок 11 SELECT использующий NOT

Все записи за исключением Grass были выбраны. Grass не был в San Jose, и его оценка была больше чем 200, так что он потерпел неудачу при обеих проверках. В каждой из других строк встретился один или другой или оба критериев. Обратите внимание что оператор NOT должен предшествовать Булеву оператору, чье значение должно измениться, и не должен помещаться перед реляционным оператором. Например неправильным вводом оценки предиката будет:

rating NOT > 200

Он выдаст другую отметку. А как SQL оценит следующее?

SELECT * FROM Customers WHERE NOT city = ‘San Jose' OR rating > 200;

NOT применяется здесь только к выражению city = 'SanJose', или к выражению rating > 200 тоже ? Как и написано, правильный ответ будет прежним. SQL может применять NOT с выражением Буля только сразу после него. Вы можете получить другой результат при команде:

SELECT * FROM Customers WHERE NOT( city = ‘San Jose' OR rating > 200 );

Здесь SQL понимает круглые скобки как означающие, что все внутри них будет оцениваться первым и обрабатываться как единое выражение с помощью всего что снаружи них (это является стандартной интерпретацией в математике). Другими словами, SQL берет каждую строку и определяет, соответствует ли истине равенство city = ‘San Jose’ или равенство rating > 200. Если любое условие верно, выражение Буля внутри круглых скобок верно. Однако, если выражение Буля внутри круглых скобок верно, предикат как единое целое неверен, потому что NOT преобразует верно в неверно и наоборот.

Вывод для этого запроса - показывается в Рисунке 12.

Рисунок 12 SELECT использующий NOT и вводное предложение