SELECT DISTINCT speed, ram
FROM Pc
ORDER BY ram DESC, speed DESC
даст следующий результат:
speed
|
ram
|
900
|
128
|
750
|
128
|
600
|
128
|
500
|
64
|
450
|
64
|
500
|
32
|
450
|
32
|
Выборка. Предложение WHERE.
Горизонтальную выборку реализует предложение WHERE, которое записывается после предложения FROM. При этом в результирующий набор попадут только те строки из источника записей, для каждой из которых значение предиката равно TRUE. То есть предикат проверяется для каждой записи. Например, запрос "получить информацию о частоте процессора и объеме оперативной памяти для компьютеров с ценой ниже $500" можно сформулировать следующим образом:
SELECT DISTINCT speed, ram
FROM Pc
WHERE price<500
ORDER BY 2 DESC
speed
|
ram
|
450
|
64
|
450
|
32
|
500
|
32
|
В последнем запросе использовался предикат сравнения с использованием операции сравнения "<" (меньше чем). Кроме этой операции сравнения могут использоваться: "=" (равно), "" (больше), "=" (больше или равно), "<=" (меньше или равно) и "<>" (не равно). Выражения в предикатах сравнения могут содержать любые поля из таблиц, указанных в предложении FROM. Символьные строки и константы типа дата/время записываются в апострофах.
Примеры простых предикатов сравнения:
price < 1000
|
Цена меньше $1000.
|
type = 'laptop'
|
Типом продукции является ПК-блокнот.
|
cd = '24x'
|
24-скоростной CD-ROM.
|
color <>'y'
|
Не цветной принтер.
|
ram - 128 0
|
Объем оперативной памяти свыше 128 Mb.
|
price <= speed*2
|
Цена не превышает удвоенной частоты процессора.
|
Булевы операторы AND, OR, NOT и трехзначная логика. Предикаты
Предикатыпредставляют собой выражения, принимающие истинностное значение. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, ORили NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций.
Предикат в языке SQL может принимать одно из трех значений TRUE(истина), FALSE(ложь) или UNKNOWN(неизвестно). Исключение составляют следующие предикаты: NULL(отсутствие значения), EXISTS(существование), UNIQUE(уникальность) и MATCH(совпадение), которые не могут принимать значение UNKNOWN.
Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 (где то между истинным и ложным).
* AND с двумя истинностными значениями дает минимум этих значений. Например, TRUE AND UNKNOWN будет равно UNKNOWN.
* OR с двумя истинностными значениями дает максимум этих значений. Например, FALSE OR UNKNOWN будет равно UNKNOWN.
* Отрицание истинностного значения равно 1 минус данное истинностное значение. Например, NOT UNKNOWN будет равно UNKNOWN.
Предикат сравнени япредставляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <>.
Данные типа NUMERIC (числа) сравниваются в соответствии с их алгебраическим значением.
Данные типа CHARACTER STRING (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если a 1a 2…a nи b 1b 2…b n- две последовательности символов, то первая "меньше" второй, если а 11, или а 1=b 1и а 22и т.д. Считается также, что а 1а 2…а n1b 2…b m, если n1а 2…а n=b 1b 2…b n, т.е. если первая строка является префиксом второй. Например, 'folder'<'for', т.к. первые две буквы этих строк совпадают, а третья буква строки 'folder' предшествует третьей букве строки 'for'. Также справедливо неравенство 'bar' < 'barber', поскольку первая строка является префиксом второй.
Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.
Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем сравниваются как обычные числовые значения типа NUMERIC.
Пример. Получить информацию о компьютерах, имеющих частоту процессора не менее 500 Мгц и цену ниже $800:
SELECT * FROM Pc
Читать дальше