"Пристрелка" к нужным данным
Предложения From
Предложение FROM легко понять, если в нем указана только одна таблица, как, например, в следующем примере:
SELECT * FROM SALES;
Этот оператор возвращает все данные, находящиеся во всех строках каждого столбца таблицы SALES (продажи). Впрочем, в предложении FROM можно указывать больше, чем одну таблицу. Например:
SELECT * FROM CUSTOMER, SALES;
Этот оператор создает виртуальную таблицу, в которой данные из таблицы CUSTOMER (покупатель) объединены с данными из таблицы SALES. Для создания новой таблицы каждая строка из CUSTOMER объединяется с каждой строкой из SALES. Поэтому в создаваемой таким способом новой виртуальной таблице количество строк равно количеству строк первой таблицы, умноженному на количество строк второй. И если в CUSTOMER десять строк, а в SALES – сто, то в новой таблице их будет тысяча.
Такая операция называется декартовым произведением двух исходных таблиц. Декартово произведение на самом деле является разновидностью операции объединения (JOIN). Об операциях объединения подробно рассказывается в главе 10.
В большей части приложений большинство тех строк, которые созданы в результате применения к двум таблицам декартова произведения, не имеют никакого смысла. Что касается виртуальной таблицы, созданной из CUSTOMER и SALES, то в ней представляют интерес только строки, в которых значение CustomerlD (идентификатор покупателя) из таблицы CUSTOMER равно значению CustomerlD из таблицы SALES. Все остальные строки можно отфильтровать с помощью предложения WHERE.
Предложения WHERE
В этой книге предложение WHERE использовалось много раз без всякого объяснения, потому что его значение и способ использования очевидны. Оператор выполняет операцию (такую как SELECT, DELETE или UPDATE) только с теми табличными строками, для которых определенное условие истинно. У предложения WHERE такой синтаксис:
SELECT список_столбцов FROM имя_таблицы WHERE условие; DELETE FROM имя_таблицы WHERE условие; UPDATE имя_таблицы SET столбец1=значение1, столбец2=значение2,…, столбец_n=значение_n WHERE условие;
Во всех случаях условие в предложении WHERE может быть или простым, или сколь угодно сложным. Чтобы из множества условий создать одно, их можно соединить друг с другом при помощи логических связок AND, OR и NOT. В этой главе мы еще вернемся к ним.
Вот некоторые типичные примеры предложений WHERE.
WHERE CustomerlD = SALES.CustomerID WHERE FOODS.Calories = COMIDA.Caloria WHERE FOODS.Calories < 219 WHERE FOODS.Calories > 3 * base_value WHERE FOODS.Calories < 219 AND FOODS.Protein > 27.4
Условия, выражаемые предложениями WHERE, называются предикатами. Предикат – это выражение, которое утверждает факт, относящийся к значениям из этого выражения.
Например, предикат FOODS.Calories < 219 является истинным, если в текущей строке значение столбца FOODS.Calories меньше 219. Если утверждение является истинным, то оно удовлетворяет условию. Утверждение может быть истинным (т.е. его значение равно True), ложным (его значение равно False) или с неопределенным логическим значением. Последний случай бывает тогда, когда в утверждении какие-либо элементы имеют значение NULL. Наиболее распространенными являются предикаты сравнения (=, <, >, <>, <= и >=), но в SQL имеются и некоторые другие, которые значительно увеличивают возможности "отфильтровывать" требуемые данные от всех остальных. Ниже приведен список с предикатами, предоставляющими такую возможность.
- Предикаты сравнения.
- BETWEEN.
- IN [NOT IN].
- LIKE [NOT LIKE].
- NULL.
- ALL, SOME, ANY.
- EXISTS.
- UNIQUE.
- OVERLAPS.
- MATCH.
- SIMILAR.
- DISTINCT.