Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы базы Данных / Базы данных / SQL в примерах и задачах

.pdf
Скачиваний:
806
Добавлен:
22.03.2015
Размер:
902.61 Кб
Скачать

28

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 (<значимое числовое выражение>)

Соседние файлы в папке Базы данных