- •II) Вопросы по языку sql
- •Как можно специфицировать вывод всех столбцов таблицы?
- •Зачем необходимы алиасы имена столбцов? Как это делается?
- •Содержит ли результат запроса повторяющиеся строки? Как можно удалить повторяющиеся строки?
- •Зачем нужны алиасы столбцов? Как они задаются?
- •Зачем нужна квалификация столбцов именами таблиц?
- •Что такое внешнее соединение? Сформулируйте и запишите запрос с внешним соединением.
- •Как можно соединить две или более таблицы?
- •Что собой представляет значение выражения, содержащего значение null? Как проверить, что значение столбца равно null.
- •Назначение оператора like. Примеры
- •Назначение операторов in и between. Примеры.
- •Агрегатные функции. Какая область действия агрегатных функций при наличии и отсутствии фразы group by. Примеры.
- •Назначение фраз group by и having
- •Что можно использовать во фразе select при наличии и отсутствии фразы group by?
- •Что такое независимые и связанные подзапросы. Примеры.
- •Подзапросы в условии сравнения групп. Примеры
- •Подзапросы в условии проверки вхождения элемента во множество. Примеры.
- •Подзапрос в условии exists
- •Простые и связанные подзапросы во фразе having
Назначение оператора like. Примеры
Оператор LIKE используется для сравнения строки символов со значением, заданным в виде шаблона. Он имеет следующий синтаксис:
где:
char1 |
Значение, сравниваемое с шаблоном. Это значение должно иметь типы CHAR или VARCHAR2. |
NOT |
Дает отрицание от указанного справа условия, возвращает FALSE, если условие оценивается в TRUE, и TRUE, если условие равно FALSE. |
char2 |
Шабон, с которым сравнивается строка char1. Шаболон имеет тип CHAR или VARCHAR2 и может иметь специальные символы шаблона «%» и «_». |
ESCAPE |
Указывает один символ в качестве символа escape. Символ escape может использоваться для того, чтобы Oracle интерпретировал % или _ буквально, а не в качестве символа шаблона. Если вы хотите найти строки, содержащие escape-символ, то его следует указать дважды. Например, если escape-символ равен '/', то для нахождения строки 'client/server' следует указать 'client//server'. |
В то время как оператор равенства (=) приводит к точному сравнению двух строковых значений, оператор LIKE сравнивает первое строковое значение со вторым (шаблоном) с учетом задаваемых символов шаблона. Отметим, что при сравнении по оператору LIKE правило дополнения пробелами не используется.
С помощью оператора LIKE левое значение сравнивается именно с шаблоном, а не с константой. Шаблон должен следовать за ключевым словом LIKE.
Пример 12 – Оператор Like: Выдать зарплату преподавателей, чьи имена начинаются на 'SM':
SELECT Salary
FROM TEACHER
WHERE UPPER(Name) LIKE 'SM%';
В следующем запросе используется оператор = , а не LIKE, поэтому производится поиск преподавателей с именами 'SM%':
SELECT Salary
FROM TEACHER
WHERE UPPER(Name) = 'SM%';
В следующем запросе, как и в предыдущем производится поиск всех преподавателей с именами 'SM%'. Oracle интерпретирует 'SM%' в качестве текстового литерала, а не шаблона, так как он предшествует оператору LIKE:
SELECT Salary
FROM TEACHER
WHERE 'SM%' LIKE UPPER(Name);
Семантика специальных символов шаблона следующая:
Символ подчеркивания (_) в шаблоне соответствует точно одному любому символу в сравниваемом значении.
Символ процента (%) в шаблоне соответствует нулю или более символам в сравниваемом значении. Отметим, что шаблон '%' не соответствует значению NULL.
Прописные и строчные буквы в шаблоне. Регистр букв является существенным во всех операторах сравнения строк, включая операторы LIKE и равенство (=). Чтобы ваше условие не зависело от регистра, используйте функцию UPPER(), как это приведено ниже:
UPPER(ename) LIKE 'SM%'
Назначение операторов in и between. Примеры.
Оператор IN. Он проверяет вхождение аргумента слева во множество, задаваемое аргументом справа.
Пример 8. Оператор IN: Выдать типы лекций, читаемые в Mon, Tue или Wed:
SELECT Type
FROM LECTURE
WHERE UPPER(Day) IN ('MON', 'TUE', 'WED');
Любой оператор IN с множеством, представленным в виде литералов, имеет эквивалентное представление с использованием операторов OR. Например, предыдущий запрос имеет такую эквивалентную запись:
SELECT Type
FROM LECTURE
WHERE UPPER(Day) = 'MON' OR UPPER(Day) = 'TUE' OR UPPER(Day) = 'WED';
Оператор IN также эквивалентен оператору "=ANY" (см. далее).
Оператор NOT IN. Оператор NOT IN является отрицанием к IN.
Оператор BETWEEN. Оператор дает TRUE, если аргумент слева находится в интервале, задаваемом двумя значениями правого аргумента. Єти два значения включаются в интервал.
Пример 10. Оператор BETWEEN: Выдать преподавателей со ставкой в интервале 150 -350:
SELECT Name
FROM TEACHER
WHERE Salary BETWEEN 150.00 AND 350.00;
Оператор BETWEEN имеет другое эквивалентное представление. Так, предыдущий запрос может быть записан так:
SELECT Name
FROM TEACHER
WHERE Salary >= 150.00 AND Salary <= 350.00;
Оператор NOT BETWEEN. Оператор NOT BETWEEN является отрицанием к BETWEEN.
Пример 11. Оператор NOT BETWEEN: Выдать кафедры с фондами вне интервала 20000-50000:
SELECT Name
FROM DEPARTMENT
WHERE Fund NOT BETWEEN 20000.00 AND 50000.00;
SELECT Name
FROM DEPARTMENT
WHERE Fund < 20000.00 OR Fund > 50000.00;
Как видно из примера, значение 20000 и 50000 не включаются в NOT BETWEEN.
Значение NULL в [NOT] BETWEEN. Если левый операнд равен NULL , то оператор возвращает значение UNKNOWN и это значит, что такая строка не удовлетворяет условию.