Проекция и объединение
Существует четыре основных операции над таблицами баз данных, которые могут выполняться при выборе данных из базы:
- Проекция;
- Ограничение;
- Объединение;
- Подмножество декартова произведения.
Все эти операции задаются различными инструкциями команды SELECT. Для запросов к одной таблице актуальны две операции: проекция и ограничение.
Операция проекции позволяет показать только те поля таблицы, которые необходимо, скрыв от просмотра все остальные. Для ее выполнения нужно воспользоваться следующей командой:
SELECT поле1, поле2,…. FROM имя_таблицы;
После инструкции SELECT перечисляется список полей, которые должны быть видны. Поля, которых нет в этом списке, скрываются. Если нужно показать все поля таблицы, то можно воспользоваться упрощенным синтаксисом:
SELECT * FROM имя_таблицы;
Операция ограничения выполняется, когда нужно видеть не все записи таблицы, а лишь те, которые удовлетворяют определенным критериям. Критерии в языке SQL задаются логическими выражениями.
Логическим выражением называется утверждение, которое при проверке может оказаться либо истинным, либо ложным.
Большинство логических выражений записываются при помощи знаков сравнения. Для выполнения операции ограничения необходимо использовать инструкцию WHERE в команде SELECT:
SELECT поле1, поле2,… FROM имя_таблицы WHERE логическое_выражение;
Например, необходимо выбрать из таблицы abiturient всех абитуриентов, чей возраст больше 18 лет:
SELECT * FROM abiturient WHERE age>18;
Сложные логические выражения
В примере 1 критерий выбора был очень простым – всего одно логическое выражение. Но часто бывает необходимо осуществить выбор по нескольким логическим выражениям. В этом случае речь идет о сложном логическом выражении, которое состоит из нескольких простых логических выражений. Существует всего два логических оператора, которыми можно соединять между собой простые логические выражения для получения сложных:
- Логический оператор AND;
- Логический оператор OR.
Пусть А, B, С - логические выражения. При чем A=B AND C. Это значит, что выражение A будет истинным тогда и только тогда, когда одновременно истины B и С.
Чтобы выбрать из таблицы abiturient всех абитуриентов мужского пола старше 18 лет, нужно построить запрос:
SELECT * FROM abiturient WHERE age>18 AND gender=’male’;
Пусть A, B,C - логические выражения. При чем A = B OR C. Это значит, что выражение A будет истинным , тогда и только тогда, когда истино хотя-бы одно из выражений B или С.
Чтобы выбрать из таблицы abiturient всех абитуриентов из Москвы и Ярославля, нужно построить запрос:
SELECT * FROM abiturient WHERE city=’Москва’ OR city=’Ярославль’;
При построении логических выражений можно комбинировать логические операторы. При этом следует помнить, что у оператора AND более высокий приоритет перед оператором OR. Иногда AND называют логическим умножением, а OR – логическим сложением. При составлении сложных логических выражений эти операторы ведут себя приблизительно так же, как и арифметические умножение и сложение. Если нужно повысить приоритет оператора OR, то следует поставить круглые скобки.
Если нужно выбрать всех абитуриентов старше 18 лет, которые прибыли из Москвы и Ярославля, то запрос будет таким:
SELECT * FROM abitueient WHERE age>18 AND (city=’Москва’ OR city=’Ярославль’);
Тот же запрос можно представить в другой форме, раскрыв скобки:
SELECT * FROM abitueient WHERE age>18 AND city=’Москва’ OR age>18 AND city=’Ярославль’;
Дополнительные способы построения логических выражений
Кроме операторов сравнения в языке SQL есть еще ряд способов построения логических выражений. Оператор BETWEEN… AND позволяет выбрать значения между двумя заданными.
Чтобы выбрать абитуриентов в возрасте от 19 до 21 можно построить запрос с использованием AND:
SELECT * FROM abitueient WHERE age>=19 AND age
А можно получить тот же результат с помощью оператора BETWEEN .. AND:
SELECT * FROM abiturient WHERE age BETWEET 19 AND 21;
Еще одним удобным способом поиска является оператор LIKE. Он позволяет задавать критерии отбора для текстовых полей, по части слова или по шаблону.
Технический секретарь приемной комиссии должен найти в базе данных абитуриента по фамилии. Он помнит, что фамилия похожа на ‘Иванов', но все-таки не Иванов. Вспомнить фамилию точно секретарь не может. В этом случае ему поможет запрос:
SELECT * FROM abiturient WHERE fio LIKE 'Ива%';
В результате будут найдены все, чья фамилия начинается с 'Ива'. Это могут быть Иванов, Иванищев, Иванский и т.д. В этом списке секретарь быстрее найдет нужного абитуриента.
Выражение, стоящее после оператора LIKE называется поисковым шаблоном. Символ '%' в шаблоне является служебным. Он показывает, что после Ива может находиться любое количество любых символов. Иногда полезно пользоваться служебным символом ‘_’ . Он указывает на один любой символ. Если в поисковом шаблоне нужно использовать символ '%' или '_ ' не в качество служебных, а непосредственно для поиска, то их нужно экранировать слэшем: '\%', '\_'.