В этой статье мы будем разбирать реляционные и булевы операторы.
Реляционный оператор
Реляционный оператор — математический символ, который указывает на определенный тип сравнения между двумя значениями.
Вы уже видели как используются равенства, такое как city = "London". Но также имеются другие реляционные операторы. Предположим, что вы хотите видеть всех "Продавцов" с их доходом выше определенного значения. Вы можете использовать тип сравнения "больше чем"—(>).
Реляционные операторы которыми располагает SQL :
- = Равный
- > Больше чем
- < Меньше чем
- >= Больше чем или равно
- <= Меньше чем или равно
- <> Не равно
Эти операторы имеют стандартные значения для числовых значений. Для значения символа, их определение зависит от формата преобразования, который вы используете.
SQL сравнивает символьные значения в терминах основных номеров как определено в формате преобразования. Даже значение символа, такого как "1", который представляет номер, не обязательно равняется номеру, который он представляет. Вы можете использовать реляционные операторы, чтобы установить алфавитный порядок — например, "a" < "n" где буква a первое в алфавитном порядке — но все это ограничивается с помощью параметра преобразования формата.
Cимволы — по значению: меньше чем все другие символы, которым они предшествуют в алфавитном порядке и имеют один вариант (верхний или нижний). Все символы верхнего регистра — меньше чем все символы нижнего регистра, поэтому "Z" < "a", а все номера — меньше чем все символы, поэтому "1" < "Z".
Значения сравниваемые здесь называются — скалярными значениями. Скалярные значения производиться скалярными выражениями; 1+2— это скалярное выражение которое производит скалярное значение 3. Скалярное значение может быть символом или числом, хотя очевидно что только номера используются с арифметическими операторами, такими как + или * .
Предикаты обычно сравнивают значения скалярных величин, используя или реляционные операторы или специальные операторы SQL чтобы увидеть верно ли это сравнение.
Предположим что вы хотите увидеть всех заказчиков с оценкой (rating) выше 200. Так как 200 — это скалярное значение, как и значение в столбце оценки, для их сравнения вы можете использовать реляционный оператор.
SELECT *
FROM TABLE_1
WHERE rating > 200;
Булевы операторы
Основные Булевы операторы также распознаются в SQL. Выражения Буля — являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных / неверных значений и производят единственное верное / или / неверное значение. Стандартными операторами Буля, распознаваемыми в SQL, являются: AND, OR, и NOT.
Существуют другие операторы Буля, но они могут быть сформированы из этих трех простых операторов — AND, OR, NOT.
Булева верная / неверная логика — основана на цифровой компьютерной операции; и фактически, весь SQL может быть сведен до уровня Булевой логики.
Операторы Буля и как они работают:
- AND берет два Буля (в форме A AND B) как аргументы и оценивает их по отношению к истине, верны ли они оба.
- OR берет два Буля (в форме A OR B) как аргументы и оценивает на правильность, верен ли один из них.
- NOT берет одиночный Булев (в форме NOT A) как аргументы и заменяет его значение с неверного на верное или верное на неверное.
Связывая предикаты с операторами Буля, вы можете значительно увеличить их возможности. Предположим вы хотите видеть всех заказчиков в London, которые имеют оценку (rating) выше 200:
SELECT *
FROM TABLE_1
WHERE city = “London”
AND rating > 200;
Если вы же используете OR, вы получите всех заказчиков, которые находились в London или (OR) которые имели оценку выше 200.
SELECT *
FROM TABLE_1
WHERE city = “London ”
OR rating > 200;
NOT может использоваться для инвертирования значений Буля. Имеется пример запроса с NOT:
SELECT *
FROM TABLE_1
WHERE city = "London"
OR NOT rating > 200;
Обратите внимание, что оператор NOT должен предшествовать Булеву оператору, чье значение должно измениться, и не должен помещаться перед реляционным оператором. Например неправильным вводом оценки предиката будет:
rating NOT > 200
Он выдаст другую отметку. А как SQL оценит следующее?
SELECT *
FROM TABLE_1
WHERE NOT city = “London”
OR rating > 200;
NOT применяется здесь только к выражению city = 'London', или к выражению rating > 200 тоже? Как и написано, правильный ответ будет прежним. SQL может применять NOT с выражением Буля только сразу после него. Вы можете получить другой результат при команде:
SELECT *
FROM TABLE_1
WHERE NOT( city = “London” OR rating > 200 );
Здесь SQL понимает круглые скобки как означающие, что все внутри них будет оцениваться первым и обрабатываться как единое выражение с помощью всего что снаружи них (это является стандартной интерпретацией в математике). Другими словами, SQL берет каждую строку и определяет, соответствует ли истине равенство city= 'London' или равенство rating > 200. Если любое условие верно, выражение Буля внутри круглых скобок верно. Однако, если выражение Буля внутри круглых скобок верно, предикат как единое целое неверен, потому что NOT преобразует верно в неверно и наоборот.
Несмотря на то, что Булевы операторы индивидуально просты, они не так просты, когда комбинируются в комплексное выражение.
Способ оценки комплекса Булева состоит в том, чтобы оценивать Булевы выражения, наиболее глубоко вложенные в круглых скобках, объединять их в единичное Булево значение, и затем объединять его с верхними значениями.
Подведём итог
В этой статье Вы значительно расширили ваше знакомство с предикатами. Теперь Вы можете находить значения, любым способом — определяемым различными реляционными операторами. Вы можете также использовать операторы Буля AND и OR чтобы много условий, объединять в единый предикат. Оператор Буля NOT, как Вы уже видели, может изменять значение условия или группы условий на противоположное.
Булевы и реляционные операторы могут эффективно управляться с помощью круглых скобок, которые определяют порядок, в котором операции будут выполнены.
Эти операции применимы к любому уровню сложности.
Если статья была Вам полезна, ставьте пальцы вверх и подписывайтесь. Оставляйте свои пожелания и вопросы в комментариях, с удовольствием отвечу.
#it #sql #обучение #курс