Лабы базы Данных / Базы данных / SQL в примерах и задачах
.pdf28 |
2. Выборка данных (оператор SELECT) |
4.Напишите запрос SELECT, который выводит наименование предмета обучения (SUBJJSIAME) и количество часов (HOUR) для каждого предмета(SUBJECT)в4-мсеместре(SEMESTER).
5.Напишите запрос, позволяющий получить из таблицы EXAM_MARKS значения столбца MARK (экзаменационная оценка) для всех студен-
тов, исключив из списка повторение одинаковых строк.
6.Напишите запрос, который выводит список фамилий студентов, обучающихся на третьем и последующих курсах.
7.Напишите запрос, выбирающий данные о фамилии, имени и номере курса для студентов, получающих стипендию больше 140.
8.Напишите запрос, выполняющий выборку из таблицы SUBJECT названий всех предметов обучения, на которые отводится более 30 часов.
9.Напишите запрос, который выполняет вывод списка университетов, рейтинг которых превышает 300 баллов.
10.Напишите запрос к таблице STUDENT для вывода списка фамилий (SURNAME), имен (NAME)- и номера курса (KURS) всех студентов со стипендией, большей или равной 100, и живущих в Воронеже.
11.Какие данные будут получены в результате выполнения запроса?
SELECT *
FROM STUDENT
WHERE (STIPEND < 100 OR
NOT (BIRTHDAY >= '10/03/1980'
AND STODENT_ID > 1003));
12. Какие данные будут получены в результате выполнения запроса? SELECT *
FROM STUDENT
WHERE NOT ((BIRTHDAY = '10/03/1980' OR STIPEND > 100)
AND STUDENT_ID >= 1003);
2.2.Операторы IN, BETWEEN, LIKE, is NULL
При задании логического условия в предложенииWHERE могут быть использованы операторы IN, BETWEEN, LIKE, is NULL.
Операторы IN (равен любому из списка) и NOT IN (не равен ни одному из списка) используются для сравнения проверяемого значения поля с заданным списком. Этот список значений указывается в скобках справа от оператора IN.
2.2. Операторы IN, BETWEEN, LIKE, is NULL |
29 |
Построенный с использованием IN предикат (условие) считается истинным, если значение поля, имя которого указано слева от IN, совпадает (подразумевается точное совпадение) с одним из значений, перечисленных в списке, указанном в скобках справа от IN.
Предикат, построенный с использованием NOT IN, считается истинным, если значение поля, имя которого указано слева от NOT IN, не совпадает ни с одним из значений, перечисленных в списке, указанном в скобках справа от NOT IN.
Примеры
Получить из таблицы EXAM_MARKS сведения о студентах, имеющих экзаменационные оценки только 4 и 5.
SELECT *
FROM EXAM_MARKS WHERE MARK IN (4, 5 );
Получить сведения о студентах, не имеющих ни одной экзаменационной оценки, равной 4 и 5.
SELECT *
FROM EXAM_MARKS
WHERE MARK NOT IN (4, 5 );
Оператор BETWEEN используется для проверки условия вхождения значения поля в заданный интервал, то есть вместо списка значений атрибута этот оператор задает границы его изменения.
Например, запрос на вывод записей о предметах, на изучение которых отводится количество часов, находящееся в пределах между 30 и 40, имеет вид:
SELECT *
FROM SUBJECT
WHERE HOUR BETWEEN 30 AND 40;
Граничные значения, в данном случае значения 30 и 40, входят во множество значений, с которыми производится сравнение. Оператор BETWEEN может использоваться как для числовых, так и для символьных типов полей.
Оператор LIKE применим только к символьным полям типа CHAR или VARCHAR (см. раздел 1.5 «Типы данных SQL»).
30 |
2. Выборка данных (оператор SELECT) |
Этот оператор просматривает строковые значения полей с целью определения, входит ли заданная в операторе LIKE подстрока (образец поиска) в символьную строку-значение проверяемого поля.
Для выборки строковых значений по заданному образцу подстроки можно применять шаблон искомого образца строки, использующий следующие символы:
•символ подчеркивания «_», указанный в шаблоне, определяет возможность наличия в указанном месте одного любого символа;
•символ «%» допускает присутствие в указанном месте проверяемой строки последовательности любых символов произвольной длины.
Пример
Написать запрос, выбирающий из таблицы STUDENT сведения о студентах, фамилии которых начинаются на букву «Р».
SELECT *
FROM STUDENT
WHERE SURNAME LIKE 'P%';
В случае необходимости включения в образец самих символов «_» и «%» применяют так называемые escape-символы. Если escape-символ предшествует знаку «_» и «%», то эти знаки будут восприниматься буквально. Например, можно задать образец поиска с помощью следующего выражения:
LIKE '_\_P' ESCAPE 'V.
В этом выражении символ 'V с помощью ключевого слова ESCAPE объявляется escape-символом. Первый символ «_» в заданном шаблоне поиска '_\_Р' будет соответствовать, как и ранее, любому символу в проверяемой строке. Однако второй символ «_», следующий после символа 'V, объявленного escape-симво- лом, уже будет интерпретироваться буквально как обычный символ, так же как и символ 'Р' в заданном шаблоне.
Обращаем внимание на то, что рассмотренные выше операторы сравнения «=, <, >, <=, >=, <>» и операторы IN, BETWEEN и LIKE ни в коем случае нельзя использовать для про-
2.3. Преобразование вывода и встроенные функции |
|
31 |
верки содержимого поля на наличие в нем пустого значения NULL (см. раздел 1.5 «Типы данных SQL»). Для этих целей предназначены специальные операторы is NULL (является пустым) и IS NOT NULL (является не пустым).
Упражнения
\.Напишите запрос на вывод находящихся в таблице EXAM_MARKS номеров предметов обучения, экзамены по которым сдавались между 10 и 20 января 1999 года.
2.Напишите запрос, выбирающий данные обо всех предметах обучения, экзамены по которым сданы студентами, имеющими идентификаторы 12 и 32.
3.Напишите запрос на вывод названий предметов обучения, начинающихся на букву «И».
4.Напишите запрос, выбирающий сведения о студентах, у которых имена начинаются на буквы «И» или «С».
5.Напишите запрос для выбора из таблицы EXAM_MARKS записей, в которых отсутствуют значения оценок (поле MARK).
6.Напишите запрос на вывод из таблицы EXAM_MARKS записей, имеющих в поле MARK значения оценок.
2.3.Преобразование вывода и встроенные функции
ВSQL реализованы операторы преобразования данных и встроенные функции, предназначенные для работы со значениями столбцов и/или константами в выражениях. Использование этих операторов допустимо в запросах везде, где допустимы выражения.
2.3.1.Числовые, символьные и строковые константы
Несмотря на то, что SQL работает с данными в понятиях строк и столбцов таблиц, имеется возможность применения значений выражений, построенных с использованием встроенных функций, констант, имен столбцов, определяемых как своего рода виртуальные столбцы. Они помещаются в списке столбцов и могут сопровождаться псевдонимами.
32 2. Выборка данных (оператор SELECT)
Если в запросе вместо спецификации столбца SQL обнару-
живает число, то оно интерпретируется как числовая константа. Символьные константы должны указываться в одинарных
кавычках. Если одинарная кавычка должна выводиться как часть строковой константы, то ее нужно предварить другой оди-
нарной кавычкой.
Например, результатом выполнения запроса
SELECT 'ФаМИЛИЯ', SURNAME, 'Имя', NAME, 100
FROM STUDENT;
является таблица следующего вида:
|
SURNAME |
|
NAME |
|
|
|
|
|
|
Фамилия |
Иванов |
Имя |
Иван |
100 |
Фамилия |
Петров |
Имя |
Петр |
100 |
Фамилия |
Сидоров |
Имя |
Вадим |
100 |
Фамилия |
Кузнецов |
Имя |
Борис |
100 |
Фамилия |
Зайцева |
Имя |
Ольга |
100 |
Фамилия |
Павлов |
Имя |
Андрей |
100 |
Фамилия |
Котов |
Имя |
Павел |
100 |
Фамилия |
Лукин |
Имя |
Артем |
100 |
Фамилия |
Петров |
Имя |
Антон |
100 |
Фамилия |
Белкин |
Имя |
Вадим |
100 |
|
|
|
|
|
|
|
|
|
|
2.3.2.Арифметические операции для преобразования числовых данных
• Унарный (одиночный) оператор «—» (знак минус) изменяет знак числового значения, перед которым он указан, на противоположный.
2.3. Преобразование вывода и встроенные функции |
33 |
|
|
|
|
• Бинарные операторы «+», «—», «*» и «/» предоставляют возможность выполнения арифметических операций сложения, вычитания, умножения и деления.
Например, результат запроса
SELECT SURNAME, NAME, STIPEND, -(STIPEND*KURS)/2 FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
выглядит следующим образом:
SURNAME |
NAME |
STIPEND |
KURS |
|
|
|
|
|
|
Сидоров |
Вадим |
150 |
4 |
-300 |
Петров |
Антон |
200 |
4 |
-400 |
|
|
|
|
|
2.3.3.Операция конкатенации строк
Операция конкатенации «||» позволяет соединять («склеивать») значения двух или более столбцов символьного типа или символьных констант в одну строку.
Эта операция имеет синтаксис
<значимое символьное выражение > {||} <значимое символьное выражение>.
Например:
SELECT SURNAME ||'_'|| NAME, STIPEND FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Результат запроса будет выглядеть следующим образом:
STIPEND
Сидоров_Вадим 150
Петров_Антон 200
2 Зак 444
34 |
|
2. Выборка данных (оператор SELECT) |
|
|
|
|
|
2.3.4.Функции преобразования символов в строке
•LOWER — перевод в строчные символы (нижний регистр) LOWER (<строка>)
•UPPER — перевод в прописные символы (верхний регистр)
UPPER (<строка>)
•INITCAP — перевод первой буквы каждого слова строки
впрописную (заглавную)
INITCAP (<строка>) Например:
SELECT LOWER (SURNAME), UPPER (NAME)
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Результат запроса будет выглядеть следующим образом:
-SURNAME NAME
сидоров |
ВАДИМ |
петров |
АНТОН |
2.3.5.Строковые функции
• LPAD — дополнение строки слева LPAD (<строка>,<длина>[,<подстрока>])
•<строка> дополняется слева заданной в <подстроке> последовательностью символов до указанной <длины> (возможно, с повторением последовательности);
•если <подстрока> не указана, то по умолчанию <строка> дополняется пробелами;
•если <длина> меньше длины <строки>, то исходная <строка> усекается слева до заданной <длины>.
•RPAD — дополнение строки справа
RPAD (<строка>,<длина>[,<подстрока>])
2.3. Преобразование вывода и встроенные функции |
|
35 |
• <строка> дополняется справа заданной в <подстроке> последовательностью символов до указанной <длины> (возможно, с повторением последовательности);
•если <подстрока> не указана, то по умолчанию <строка> дополняется пробелами;
•если <длина> меньше длины <строки>, то исходная <строка> усекается справа до заданной <длины >.
•LTRIM — удаление левых граничных символов
LTRIM (<строка>[,<подстрока>])
•из <строки> удаляются слева символы, указанные в <подстроке>;
•если <подстрока> не указана, по умолчанию удаляются пробелы;
•в <строку> справа добавляется столько пробелов, сколько символов слева было удалено, то есть длина <строки> остается неизменной.
•RTRIM — удаление правых граничных символов RTRIM (<строка>[,<подстрока>])
•из <строки> удаляются справа символы, указанные в <подстроке>;
•если <подстрока> не указана, по умолчанию удаляются пробелы;
•в <строку> слева добавляется столько пробелов, сколько символов справа было удалено, то есть длина <строки> остается неизменной.
Функции LTRIM и RTRIM рекомендуется использовать при написании условных выражений, в которых сравниваются текстовые строки. Дело в том, что наличие начальных или конечных пробелов в сравниваемых операндах может исказить результат сравнения.
Например, константы ' ААА' и 'ААА ' не равны друг другу.
•SUBSTR — выделение подстроки
SUBSTR (<строка>,<начало>[,<количество>])
• из <строки> выбирается заданное <количество> символов, начиная с указанной параметром <начало> позиции в строке;
36 |
|
2. Выборка данных (оператор SELECT) |
|
|
|
|
|
•если <количество> не задано, символы выбираются с <начала> и до конца <строки>;
•возвращается подстрока, содержащая число символов, заданное параметром <количество>, либо число символов от позиции, заданнойпараметром <начало> до конца строки;
•если указанное <начало> превосходит длину <строки>, то возвращается строка, состоящая из пробелов. Длина этой строки будет равна заданному <количеству> или исходной длине <строки> (при не заданном <количестве>).
•INSTR — поиск подстроки
INSTR (<строка>,<подстрока>[,<началопоиска> [,<номер вхождения>]])
•<начало поиска> задает начальную позицию в строке для поиска <подстроки>. Если не задано, то по умолчанию принимается значение 1;
•<номер вхождения> задает порядковый номер искомой подстроки. Если не задан, то по умолчанию принимается значение 1;
•значимые выражения в <начале поиска> или в <номере вхождения> должны иметь беззнаковый целый тип или приводиться к этому типу;
•тип возвращаемого значения — INT;
функция возвращает позицию найденной подстроки.
• LENGTH — определение длины строки ыагстн(<строка>)
•длина <строки>, тип возвращаемого значения — ЮТ;
•функциявозвращаетNULL,если <строка>имеетNULL-зна- чение.
Примеры запросов, использующих строковые функции
Результат запроса
SELECT LPAD (SURNAME, 10, '@'), RPAD (NAME, 10, '$') FROM STUDENT
WHERE KURS = 3 AND STIPEND > 0;
будет выглядеть следующим образом:
2.3. Преобразование вывода и встроенные функции |
37 |
|
|
|
|
@@@@Петров Петр$$$$$$
@@@@Павлов Андрей$$$$
@@@@@Дукин Артем$$$$$
А запрос
SELECT SUBSTR(NAME, 1, 1) Ц ' . ' || SURNAME, CITY, LENGTH (CITY,)
FROM STUDENT |
|
|
|
|
WHERE KURS IN(2, |
3, 4)AND STIPEND |
> 0; |
||
выдаст результат: |
|
|
|
|
|
|
|
|
|
|
|
CITY |
|
|
|
|
|
|
|
|
П. Петров |
Курск |
|
5 |
|
С. Сидоров |
Москва |
|
6 |
|
О. Зайцева |
Липецк |
|
6 |
|
А. Лукин |
Воронеж |
|
7 |
|
А. Петров |
NULL |
|
NULL |
|
|
|
|
|
2.3.6.Функции работы с числами
• ABS — абсолютное значение
ABS (<значимое числовое выражение>)
• FLOOR — урезает значение числа с плавающей точкой до наибольшего целого, не превосходящего заданное число
FLOOR (<значимое числовое выражение>)
• CEIL — самое малое целое, равное или большее заданного числа CEIL (<значимое числовое выражение>)