- •Язык запросов sql
- •Общие сведения
- •Insert - запрос на добавление;
- •Инструкция select
- •Синтаксис select
- •Расширения инструкции select в access
- •Порядок выполнения выборки
- •Управление списком выбора
- •Указание источника данных
- •Применение реляционных операторов
- •Применение булевых операторов
- •Обработка неопределенных значений
- •Сортировка данных
- •Вычисление агрегатных функций
- •Группировка данных
- •Ограничение для групп данных
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Выборка из нескольких таблиц
- •Соединение отношений
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Запрос с соединением, использующий from и where
- •Запрос с соединением join
- •Операции с таблицами
- •Изменение структуры таблицы
- •Удаление таблицы
- •Действия со строками
- •Вставка строк в таблицу
- •Изменение данных в таблице
- •Удаление данных из таблицы
- •Инструкция transform
- •In ("Физика", "Математика");
- •Глава 5 Работа с формами
Применение булевых операторов
В SQL распознаются и позволяют расширить задание условий выборки основные булевы операторы.
Результатом выражения, состоящего из булевых операторов может быть истинна (TRUE) или ложь (FALSE) результат. Булевы операторы могут объединять одно или более истинных или ложных значений и в качестве результата получить единственно верное или неверное значение.
Стандартными булевыми операторами, распознаваемыми в SQL, являются:
-
AND (И) - для двух логических выражений (A AND В) оценивает, истинны ли они оба одновременно;
-
OR (ИЛИ) - для двух логических выражений (A AND В) оценивает, истинно ли хотя бы одно из них;
-
NOT (НЕ) - заменяет логическое значение одиночного аргумента (NOT А) на противоположное: с истинного на ложное или наоборот.
Например, требуется составить такой запрос, где необходимо отобразить всю информацию о студентах, проживающих в Московской области и изучающих английский язык. Для записи такого условия нужно использовать оператор AND, который будет объединять два критерия отбора: по области и по языку.
Команда, реализующая такой запрос, будет выглядеть следующим образом:
SELECT *
FROM tbIStudents
WHERE fRegion = 'Московская' AND fLanguage = 'англ';
Если в этом примере заменить оператор AND на OR, то в результате будут выведены данные о студентах, которые проживают в Московской области или же могут проживать в других областях, но при этом изучают английский язык:
SELECT *
FROM tbIStudents
WHERE fRegion = 'Московская' OR fLanguage = 'англ';
Для иллюстрации работы параметра отрицания NOT можно составить запрос, в котором требуется отобразить данные о всех студентах, проживающих не в Московской области. Команда запроса будет выглядеть следующим образом:
SELECT *
FROM tbIStudents;
WHERE NOT fRegiion = 'Московская';
При задании параметра отрицания требуется, чтобы он предшествовал булевому оператору, значение которого следует изменить, а не был размещен перед реляционным оператором. Например, неправильной будет запись:
WHERE fRegion NOT = 'Московская';
В предложении WHERE можно совмещать несколько булевых операторов, если требуется выполнить сразу несколько ограничений по выборке. При этом порядок выполнения логических операторов таков:
-
NOT;
-
AND;
-
OR.
Например, нужно отобразить данные о студентах, проживающих вне Московской области, даты рождения которых находятся между 01.01.1987 и 31.12.1987 (т.е. родившихся в 1987 году). Запрос будет иметь такой вид:
SELECT *
FROM tbIStudents
WHERE NOT fRegion = 'Московская' AND (fBirthday > =
'01.01.1987' AND fBirthday <= '31.12.1987');
ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ КЛЮЧЕВЫХ СЛОВ
Помимо перечисленных выше предложений в конструкции SELECT могут использоваться дополнительные специальные ключевые слова IN, BETWEEN, LIKE и IS NULL. Далее рассмотрены правила использования каждого из них отдельно и совместно с предложениями SELECT.
Ключевое слово in позволяет выбрать из запроса только те значения, которые совпадают со значениями из заданного пользователем списка, и имеет следующий синтаксис:
WHERE column_name [NOT] IN (list)
где: column_name - имя столбца, для которого задается условие выборки в виде списка значений;
list - список значений, определяющих диапазон выборки.
Элементы списка IN должны быть заключены в скобки и разделены запятыми, а если они имеют символьный тип или тип даты, то записаны в одинарных кавычках.
Ключевое слово IN можно также представить как замену нескольких OR. Например, требуется получить данные о студентах, проживающих в Московской, Петербуржской и Белгородской областях. Для этого можно было бы составить следующий запрос:
SELECT *
FROM tbIStudents
WHERE fRegion = 'Московская' OR fRegion = 'Петербуржская'
OR fRegion = 'Белгородская';
Аналогичный запрос можно составить с использованием ключевого слова IN:
SELECT *
FROM tbIStudents
WHERE fRegion IN ('Московская', 'Петербуржская', 'Белгородская');
Применение ключевого слова IN позволяет значительно сократить запись условия запроса, особенно если в списке много вставляющих.
Вместе с IN можно использовать и отрицание NOT. В этом :лучае их сочетание будет иметь вид: NOT IN ( ).
Так, если предыдущий пример переписать с отрицанием, то (апрос будет отображать студентов, не проживающих в перечис- тенных областях:
SELECT *
FROM tbIStudents
WHERE fRegion NOT IN (' Московская ', ' Петербуржская ',1 Белгородская ');
Несмотря на то что IN существенно оптимизирует условие выборки, не всегда удобно указывать множество подряд идущих шачений списка. Именно в такой ситуации удобней использовать слючевое слово BETWEEN, определяющее не список, а диапазон жачений, для которых задается выборка.
Синтаксис оператора следующий:
WHERE column_name [NOT] BETWEEN min_value AND max_value
где: min_value - минимальное значение диапазона; max_value - максимальное значение диапазона.
При этом необходимо учитывать, что минимальное и максимальное значения будут включены в границы диапазона.
Так, если необходимо сделать выборку по товарам (из таблицы tbIGoods), которые имеют цены в диапазоне от 1000 до 2000 грн. включительно, то можно составить следующий запрос:
SELECT fNameGoods AS "Товар", fModelGoods AS "Модель", fPriceGoods AS "Цена"
FROM tbIGoods
WHERE fPriceGoods BETWEEN 1000 AND 2000;
В качестве диапазона значений могут выступать данные не только числового типа, но и текстового или типа даты. Например, необходимо отобразить данные о студентах, фамилии которых начинаются с литеры, находящейся в диапазоне от «А» до «Д». Для этого необходимо построить следующий запрос:
SELECT *
FROM tbIStudents
WHERE fLastName BETWEEN ’A' AND 'E';
Чтобы все фамилии, начинающиеся на «Д», попали в выборку, нужно указать в качестве верхней границы диапазона букву «Е». При этом в выборку попала бы и фамилия «Е», если бы она присутствовала в таблице tbIStudents, но практически это маловероятно.
Ключевое слово BETWEEN также может использоваться с ключевым словом NOT - NOT BETWEEN. В этом случае в результат запроса будут отобраны те данные, которые расположены вне диапазона, указываемого в условии выборки NOT BETWEEN.
Например, для отображения информации о студентах, родившихся не в июле 1987 года, можно выполнить такую команду запроса:
SELECT *
FROM tbIStudents
WHERE fBirthday NOT BETWEEN '01.07.1987' AND '31.07.1987';
Рассмотренные выше ключевые слова IN и BETWEEN, при помощи которых задаются критерии выборки данных, оперировали с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез (# ) - обозначает любое одиночное число;
-
символ звездочка ( * ) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE 'Иван*';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '«Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны:
с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез ( # ) - обозначает любое одиночное число;
-
символ звездочка ( * ) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE 'Иван*';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '*Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны:
с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез (#) - обозначает любое одиночное число;
-
символ звездочка ( * ) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE ’Иван»';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '*Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны: с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез ( #) - обозначает любое одиночное число;
-
символ звездочка ( * ) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE ’Иван*';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '*Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны: с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез (#) - обозначает любое одиночное число;
-
символ звездочка ( *) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE 'Иван*';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '*Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны:
с полным описанием текстовой информации. Но не вполне понятно, что делать, если требуется найти данные по неполной информации о них, только по части строки. Например, может понадобиться найти всех студентов, фамилия которых начинается на «Иван» (Иванов, Иванченко и т.д.).
•Для таких задач применяется ключевое слово LIKE, которое проверяет, совпадает ли содержащаяся в поле строка с условием поиска. В качестве условия используются группы символов, которые могут соответствовать искомым данным, и символы подстановки.
Синтаксис LIKE следующий:
WHERE column_name [NOT] LIKE 'mask'
где mask - налагаемая на данные маска поиска.
В маске могут быть использованы символы подстановки:
-
знак вопроса (?) - обозначает любой одиночный символ;
-
знак диез ( # ) - обозначает любое одиночное число;
-
символ звездочка ( * ) - обозначает последовательность символов (включая символы нуля);
-
[a-z] - обозначает символы в определенном интервале;
-
[!a-z] - символы кроме определенного интервала.
Например, найдем всех студентов, фамилия которых начинается на «Иван»:
SELECT *
FROM tbIStudents
WHERE fLastName LIKE 'Иван*';
Рассмотрим еще один пример. Пусть требуется найти студентов, проживающих в г. Москве. Название города содержится в столбце fCity и предваряется символами «г.». Поэтому в маске поиска будем использовать символ * перед названием:
SELECT *
FROM tbIStudents WHERE fCity LIKE '*Москва';
Может возникнуть вопрос, что делать, если нужно найти сам знак вопроса (?) или знак звездочки ( * ), которые уже различаются системой как символы подстановки. Для этого нужно поместить этот символ в квадратные скобки. При помощи этой формы записи можно определить, что некоторый символ не является символом подстановки, а выполняет роль части шаблона поиска.
Например, чтобы в некоторой таблице Table найти строки, которые оканчиваются двузначными числами с символом процента (например, «выплачено 15%» или «выплачено 86%»), необходимо составить такой запрос:
SELECT Column
FROM Table
WHERE Column LIKE '* ##[%]';
В таблице могут встречаться записи, которые не имеют никаких значений в некоторых полях. Как отмечалось ранее, Access такой вариант учитывает и позволяет вместо конкретного данного вводить значение NULL. Поэтому при выполнении запросов в некоторых столбцах могут отображаться неопределенные значения NULL.
Например, следующий запрос отобразит всю информацию о студентах (в том числе и номера их телефонов):
SELECT *
FROM tbIStudents;
Поле номера телефона fPhone заполнено не для всех студентов, так как не у всех студентов есть домашний телефон, поэтому в нем содержатся как номера телефонов, так и значения NULL.
Возникает вопрос, что делать, если требуется найти информацию со статусом NULL. Выполнять сравнение значения такого поля с чем-либо нельзя (даже с другими значениями NULL), так как NULL представляет собой неизвестное значение. В таком случае поиск реализуется при помощи специального условия IS NULL (либо IS NOT NULL), которое имеет такой синтаксис:
WHERE column_name IS [NOT] NULL
Например, чтобы выполнить поиск тех студентов, у которых нет домашнего телефона, нужно написать запрос с использованием оператора IS NULL:
SELECT *
FROM tbIStudents
WHERE fPhone IS NULL;
Оператор IS NOT NULL выполняет прямо противоположную роль. Он служит для выборки только тех записей, в которых все значения определены. Так, если выполнить предыдущий запрос, указав в предложении WHERE оператор IS NOT NULL, то будут найдены студенты, у которых имеются домашние телефоны:
SELECT *
FROM tbIStudents
WHERE fPhone IS NOT NULL;