Понимание SQL
Шрифт:
Значения сравниваемые здесь называются - скалярными значениями. Скалярные значения производяться скалярными выражениями; 1 + 2 - это скалярное выражение которое производит скалярное значение 3. Скалярное значение может быть символом или числом, хотя очевидно что только номера используются с арифметическими операторами, такими как +(плюс) или *(звезда).
Предикаты обычно сравнивают значения скалярных величин, используя или реляционные операторы или специальные операторы SQL чтобы увидеть верно ли это сравнение. Некоторые операторы SQL описаны в Главе 5.
Предположим что вы хотите увидеть всех заказчиков с оценкой(rating) выше 200. Так как 200 - это скалярное значение, как и значение в столбце оценки, для их сравнения вы можете использовать реляционный оператор.
SELECT *
FROM Customers
WHERE rating > 200;
Вывод
Конечно, если бы мы захотели увидеть еще и заказчиков с оценкой равной 200, мы стали бы использовать предикат
rating >=200
Основные Булевы операторы также распознаются в SQL. Выражения Буля - являются или верными или неверными, подобно предикатам. Булевы операторы связывают одно или более верных/неверных значений и производят едиственное верное/или/неверное значение. Стандартными операторами Буля распознаваемыми в SQL являются:
AND, OR, и NOT.
SELECT * FROM Customers WHERE rating > 200;
snum | cname | city | rating | snum |
2004 | Crass | Berlin | 300 | 1002 |
2008 | Cirneros | San Jose | 300 | 1007 |
Таблица 4.1: Использование больше чем (>)
Существуют другие, более сложные, операторы Буля (типа "исключенный или"), но они могут быть сформированы из этих трех простых операторов - 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;
Вывод для этого запроса показан на Таблице 4.2. Имеется только один заказчик который удовлетворяет этому условию.
Если вы же используете OR вы получите всех заказчиков которые находились в San Jose или(OR) которые имели оценку выше 200.
SELECT * FROM Customers WHERE city='San Jose' AND rating > 200;
сnum | cname | city | rating | snum |
2008 | Cirneros | San Jose | 300 | 1007 |
Таблица 4.2: SELECT
SELECT *
FROM Customers
WHERE city=" San Jose'
OR rating > 200;
Вывод для этого запроса показывается в Таблице 4.3.
NOT может использоваться для инвертирования значений Буля. Имеется пример запроса с NOT:
SELECT *
FROM Customers
WHERE city=" San Jose'
OR NOT rating > 200;
Вывод этого запроса показывается в Таблице 4.4.
SELECT * FROM Customers WHERE city='San Jose' OR rating > 200;
сnum | cname | city | rating | snum |
2003 | Liu | San Jose | 200 | 1002 |
2004 | Grass | Berlin | 300 | 1002 |
2008 | Cirneros | San Jose | 300 | 1007 |
Рисунок 4.3: SELECT использующий OR
SELECT * FROM Customers WHERE city='San Jose' OR NOT rating > 200;
сnum | cname | city | rating | snum |
2001 | Hoffman | London | 100 | 1001 |
2002 | Giovanni | Rome | 200 | 1003 |
2003 | Liu | San Jose | 200 | 1002 |
2006 | Clemens | London | 100 | 1001 |
2008 | Cirneros | San Jose | 300 | 1007 |
2007 | Pereira | Rome | 100 | 1004 |