Отбор строк (операция выборки)
Все разобранные выше примеры возвращали данные для каждой строки таблицы students (или marks). Такие большие выборки обычно требуются только при формировании отчетов, большинство других задач требует предварительного отбора строк таблицы, необходимых пользователю. Напомним, что строки в таблицах не нумеруются, поэтому такие операции, как «извлечь первую строку таблицы», стандартом не поддерживаются. В качестве критерия для отбора строк таблицы можно задать любое логическое выражение, используя фразу WHERE. В процессе выполнения запроса быдет выполнен отбор только тех строк, для которых данное выражение принимает значение «истина». Таким образом, результатом операции выборки может быть произвольное число строк таблицы (от нуля до всех строк). Например, запрос: select * from students where cod_st=10 возвратит все данные о студенте, у которого личный код=10. Такой запрос гарантированно вернет не более одной строки (если студента с кодом 10 в таблице нет, то запрос не вернет ни одной строки, но вернуть, например, две строки он не сможет, т.к. личный код студента обладает свойством уникальности). Условие отбора строк может включать следующие операции: · операции сравнения <, >, <=, >=,!=(<>), = · операция проверки на отсутствие данных IS NULL или их наличие IS NOT NULL · логические операции: and, or, not · операция вхождения значения в заданный диапазон значений between начальное_значение and конечное_значение · операция принадлежности значения заданному множеству in (множество) · операция соответствия заданному шаблону (для текстовых столбцов) LIKE ‘шаблон’ В шаблоне для операции LIKE разрешено использовать два символа-заменителя: · % заменяет последовательность из любого количества любых символов (в том числе и пустая последовательность)
· _ заменяет один любой символ в заданной позиции. Например, пусть требуется выбрать фамилии и телефоны всех студентов, фамилия которых начинается на букву «С». Список отсортировать по фамилии. Текст запроса: select namt_st, phone from students where name_st LIKE ‘С%’ ORDER BY 1 Если в приведенном запросе заменить шаблон на ‘%C%’, то такой запрос выберет всех студентов, у которых в фамилии есть хотя бы одна буква «С». Если шаблон заменить на ‘C_____’ (после буквы С стоит пять знаков подчеркивания), то будут выбраны студенты, фамилия которых начинается на букву С и содержит 6 символов. При поиске по текстовым столбцам, в том числе по шаблону, обычно тонким моментом является чувствительность букв к регистру. Во многих СУБД заглавные и строчные буквы при поиске и сортировке не различаются, но, как правило, имеется возможность настройки чувствительности к регистру. В СУБД Oracle строчные и заглавные буквы в текстовых константах и шаблонах различаются, при сортировке также учитывается регистр букв. Поэтому, например, при поиске студентов, в фамилии которых есть хотя бы одна буква С, в качестве условия отбора следует использовать WHERE name_st LIKE ‘%C%’ OR name_st LIKE ‘%c%’ Следует помнить, что запросы с операцией LIKE обычно выполняются довольно медленно, особенно если символ % стоит в начале шаблона (к такому запросу невозможно подключить древовидный индекс для ускорения поиска). Однако при поиске в текстовых столбцах данная операция используется довольно часто. В Oracle версии 10 появилось и еще более мощное средство – поиск по регулярным выражениям, которое пока в стандарт языка SQL не вошло. Приведем еще ряд примеров запросов на выборку строк, демонстрирующих применение различных операций. Пусть требуется выбрать все строки из таблицы оценок, в которых присутствуют оценки 3 или 4. Запрос простой, но может быть выполнен несколькими разными способами:
SELECT * FROM marks WHERE mark=3 OR mark=4 SELECT * FROM marks WHERE mark>2 AND mark<5 SELECT * FROM marks WHERE mark IN (3, 4) SELECT * FROM marks WHERE mark BETWEEN 3 AND 4 Можно привести и еще несколько вариантов записи того же самого запроса, но и приведенных вполне достаточно, чтобы понять синтаксис различных операций. Требуется выбрать такие строки из таблицы студентов, в которых отсутствует телефон студента. SELECT * FROM students WHERE phone IS NULL Обратим внимание, что запрос SELECT * FROM students WHERE phone = NULL возвратит неправильный ответ, но при этом не будет получено сообщения об ошибке.
Читайте также: I этап – отборочный тур (полуфинал) Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|