Оператор SELECT (ВЫБРАТЬ) языка SQL является самым важным и наиболее часто используемым оператором. Он предназначен для выборки информации из таблиц базы данных. Упрощенный синтаксис оператора SELECT выглядит следующим образом.
SELECT [DISTINCT] <список выражений над атрибутами
и константами>
FROM <список таблиц>
[WHERE <условие выборки> ] [GROUP BY <список атрибутов> ] [HAVING <условие> ]
[UNION <выражение с оператором SELECT > ] [ORDER BY <список атрибутов> ];
В квадратных скобках указаны элементы, которые могут отсутство- вать в запросе.
Ключевое слово SELECT сообщает базе данных, что данное пред- ложение является запросом на выборку информации. После слова SELECT через запятую перечисляются наименования полей (список атрибутов), содержимое которых запрашивается.
Обязательным ключевым словом в предложении-запросе SELECT является слово FROM (ИЗ). За ключевым словом FROM указывается список разделенных запятыми имен таблиц, из которых извлекается информация.
Например,
SELECT NAME, SURNAME
FROM STUDENT;
Любой SQL-запрос должен заканчиваться символом “;” (точка с запятой).
2.1. Простейшие SELECT -запросы 21
Приведенный запрос осуществляет выборку всех значений полей
NAME и SURNAME из таблицы STUDENT.
Его результатом является таблица следующего вида:
NAME Иван Петр Вадим Борис Ольга Андрей Павел Артем Антон Вадим ... |
SURNAME Иванов Петров Сидоров Кузнецов Зайцева Павлов Котов Лукин Петров Белкин ... |
Порядок следования столбцов в этой таблице соответствует порядку полей NAME и SURNAME, указанному в запросе, а не их порядку во входной таблице STUDENT.
Если необходимо вывести значения всех столбцов таблицы, то мож- но вместо перечисления их имен использовать символ “*” (звездочка).
|
SELECT *
FROM STUDENT;
В данном случае в результате выполнения запроса будет получена вся таблица STUDENT.
Еще раз обратим внимание на то, что получаемые в результате SQL-запроса таблицы не в полной мере отвечают определению реля- ционного отношения. В частности, в них могут оказаться кортежи с одинаковыми значениями атрибутов.
Например, запрос “Получить список названий городов, где прожи- вают студенты, сведения о которых находятся в таблице STUDENT”, можно записать в следующем виде:
SELECT CITY FROM STUDENT;
Его результатом будет таблица
22 Гл. 2. Выборка данных (оператор SELECT )
CITY Орел Курск Москва Брянск Липецк ВоронежБелгород Воронеж NULL Воронеж ... |
Видно, что в таблице встречаются одинаковые строки (выделены жирным шрифтом).
Для исключения из результата SELECT -запроса повторяющихся записей используется ключевое слово DISTINCT (ОТЛИЧНЫЙ). Если запрос SELECT извлекает множество полей, то DISTINCT исключает дубликаты строк, в которых значения всех выбранных полей идентич- ны.
Запрос “Определить список названий различных городов, где про- живают студенты, сведения о которых находятся в таблице STUDENT”, можно записать в следующем виде.
SELECT DISTINCT CITY
FROM STUDENT;
В результате получим таблицу, в которой дубликаты строк исклю- чены:
CITY Орел Курск Москва Брянск Липецк Воронеж Белгород NULL ... |
Ключевое слово ALL (ВСЕ), в отличие от DISTINCT, оказывает противоположное действие, т. е. при его использовании повторяющиеся строки включаются в состав выходных данных. Режим, задаваемый ключевым словом ALL, действует по умолчанию, поэтому в реальных запросах для этих целей оно практически не используется.
|
Простейшие SELECT -запросы 23
Использование в операторе SELECT предложения, определяемого ключевым словом WHERE (ГДЕ), позволяет задавать выражение усло- вия (предикат), принимающее значение истина или ложь (а также неизвестно при использовании NULL) для значений полей строк таб- лиц, к которым обращается оператор SELECT. Предложение WHERE определяет, какие строки указанных таблиц должны быть выбраны. В таблицу, являющуюся результатом запроса, включаются только те строки, для которых условие (предикат), указанное в предложении WHERE, принимает значение истина.
Пример.
Написать запрос, выполняющий выборку имен (NAME) всех студен- тов с фамилией (SURNAME) Петров, сведения о которых находятся в таблице STUDENT.
SELECT SURNAME, NAME
FROM STUDENT
WHERE SURNAME = ‘Петров’;
Результатом этого запроса будет таблица:
SURNAME Петров Петров |
NAME Петр Антон |
В задаваемых в предложении WHERE условиях могут использо- ваться операции сравнения, определяемые следующими операторами:
= (равно), > (больше), < (меньше), > = (больше или равно), < = (мень- ше или равно), <> (не равно), а также логические операторы AND, OR и NOT.
Например, запрос для получения имен и фамилий студентов, обу- чающихся на третьем курсе и получающих стипендию (размер сти- пендии больше нуля) будет выглядеть таким образом:
SELECT NAME, SURNAME
FROM STUDENT
WHERE (KURS = 3 AND STIPEND > 0);
Результат выполнения этого запроса имеет вид:
SURNAME Петров Лукин |
NAME Петр Артем |
УПРАЖНЕНИЯ
1. Напишите запрос к таблице SUBJECT, выводящий для каждой ее строки идентификатор (номер) предмета обучения, его наимено- вание, семестр, в котором он читается, и количество отводимых на него часов.
|
2. Напишите запрос, позволяющий вывести все строки табли- цы EXAM_MARKS, в которых предмет обучения имеет номер (SUBJ_ID), равный 12.
3. Напишите запрос, выбирающий все данные из таблицы STUDENT, расположив столбцы таблицы в следующем порядке: KURS, SURNAME, NAME, STIPEND.
4. Напишите запрос SELECT, который для каждого предмета обуче- ния (SUBJECT) выполняет вывод его наименования (SUBJ_NAME) и следом за ним количества часов (HOUR) в 4-м семестре (SEMESTR).
5. Напишите запрос, позволяющий получить из таблицы EXAM_MARKS значения столбца MARK (экзаменационная оценка) для всех студентов, исключив из списка повторение одинаковых строк.
6. Напишите запрос, который выполняет вывод списка фамилий студентов, обучающихся на третьем и более старших курсах.
7. Напишите запрос, выбирающий данные фамилию, имя и номер курса для студентов, получающих стипендию больше 140.
8. Напишите запрос, выполняющий выборку из таблицы SUBJECT названий всех предметов обучения, на которые отводится более 30 часов.
9. Напишите запрос, который выполняет вывод списка университе- тов, рейтинг которых превышает 300 баллов.
10. Напишите запрос к таблице STUDENT для вывода списка всех студентов со стипендией не меньше 100, живущих в Воронеже — с указанием фамилии (SURNAME), имени (NAME) и номера курса (KURS).
11. Какие данные будут получены в результате выполнения запроса?
SELECT *
FROM STUDENT
WHERE (STIPEND < 100 OR
NOT (BIRTHDAY >= ‘10/03/1980’
AND STUDENT_ID > 1003));
12. Какие данные будут получены в результате выполнения запроса?
SELECT *
FROM STUDENT
WHERE NOT ((BIRTHDAY = ‘10/03/1980’ OR
STIPEND > 100)
AND STUDENT_ID >= 1003);
13. Напишите запрос для получения списка студентов старше 25 лет, обучающихся на 1-м курсе.
14. Напишите запрос для получения списка предметов, для которых в 1-м семестре отведено более 100 часов.
15. Напишите запрос для получения списка преподавателей, живу- щих в Воронеже.
16. Напишите запрос для получения списка университетов, распо- ложенных в Москве и имеющих рейтинг меньший, чем у ВГУ. Константу в ограничении на рейтинг можно определить по этой же таблице.
17. Напишите запрос для получения списка студентов, проживаю- щих в Воронеже и не получающих стипендию.
18. Напишите запрос для получения списка студентов моложе 20 лет.
19. Напишите запрос для получения списка студентов без опреде- ленного места жительства.
Операторы IN, BETWEEN, LIKE, IS NULL
При задании логического условия в предложении WHERE могут быть использованы операторы IN, BETWEEN, LIKE, IS NULL.
Операторы IN (РАВЕН ЛЮБОМУ ИЗ СПИСКА) и NOT IN (НЕ РА-
ВЕН НИ ОДНОМУ ИЗ СПИСКА) используются для сравнения проверя- емого значения поля с заданным списком. Этот список значений ука- зывается в скобках справа от оператора IN. Список значений не обяза- тельно задается в явном виде, он может представлять собой результат подзапроса.
Построенный с использованием IN предикат (условие) считается истинным, если значение поля, имя которого указано слева от IN, в точности совпадает с одним из значений, перечисленных в списке, указанном в скобках справа от IN.
Предикат, построенный с использованием NOT IN, считается ис- тинным, если значение поля, имя которого указано слева от NOT IN, не совпадает ни с одним из значений, принадлежащих списку, указанному в скобках справа от NOT IN.
Пример 1.
Получить из таблицы EXAM_MARKS сведения о студентах, имеющих
экзаменационные оценки только 4 и 5.
SELECT *
FROM EXAM_MARKS
WHERE MARK IN (4, 5);
Пример 2.
Получить сведения о студентах, не имеющих ни одной экзамена- ционной оценки, равной 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. Этот оператор осуществляет просмотр строковых зна- чений полей с целью определения, входит ли заданная в операторе LIKE подстрока (образец поиска) в символьную строку, являющуюся значением проверяемого поля.
Для того чтобы осуществлять выборку строковых значений по заданному образцу подстроки, можно применять шаблон искомого об- разца строки, использующий следующие символы:
• |
• |
Пример.
Написать запрос, выбирающий из таблицы STUDENT сведения о студентах, у которых фамилии начинаются на букву “Р”.
SELECT *
FROM STUDENT
WHERE SURNAME LIKE ‘Р%’;
Так как символы “ _ ” и “%” выполняют в языке SQL указанные выше специальные функции, возникает проблема, когда необходимо их указывать в текстовом образце в качестве обычных, а не служебных символов. В этих случаях применяют специальный механизм, позволя- ющий при интерпретации системой строки-образца отключить управ- ляющие функции этих символов. Отключить служебные функции си- волов “ _ ” и “%” можно путем вставки непосредственно перед ними так
называемого escape-символа (escape character). Этот символ, который можно еще назвать знаком перехода или знаком отключения, является служебным знаком, используемым для указания того, что должен быть изменен характер интерпретации следующего непосредственно за ним символа. В нашем случае если такой символ предшествует знаку “ _ ” или “%”, то этот знак будет интепретироваться уже буквально, как любой другой символ, а не как служебный символ. В SQL в качестве такого переключающего (escape) символа может быть назначен любой символ. для этих целей предназначено специальное ключевое слово ESCAPE.
Например, можно задать образец поиска с помощью следующего выражения:
LIKE ‘_ \ _Р’ ESCAPE ‘ \ ’.
\ |
\ |
\ |
Обращаем ваше внимание на то, что в операторах сравнения =, <,
>, < =, > =, <> и операторах IN, BETWEEN и LIKE при использовании NULL в качестве операнда будет возвращаться также NULL. В связи с этим, для проверки содержимого поля на наличие (отсутствие) в нем пустого значения NULL следует использовать специально пред- назначенные для этого операторы IS NULL (ЯВЛЯЕТСЯ ПУСТЫМ) и IS NOT NULL (НЕ ЯВЛЯЕТСЯ ПУСТЫМ), а не выражения = NULL или
<> NULL.
УПРАЖНЕНИЯ
1. Напишите запрос, выполняющий вывод находящихся в таблице EXAM_MARKS номеров предметов обучения, экзамены по которым сдавались между 10 и 20 января 2005 г.
2. Напишите запрос, выбирающий данные обо всех предметах обу- чения, экзамены по которым сданы студентами, имеющими иден- тификаторы 12 и 32.
3. Напишите запрос, который выполняет вывод названий предметов обучения, начинающихся на букву ‘И’.
4. Напишите запрос, выбирающий сведения о студентах, у которых имена начинаются на букву ‘И’ или ‘С’.
5. Напишите запрос для выбора из таблицы EXAM_MARKS записей, для которых отсутствуют значения оценок (поле MARK).
6. Напишите запрос, выполняющий вывод из таблицы EXAM_MARKS
записей, для которых в поле MARK проставлены значения оценок.
7. Напишите запрос для получения списка преподавателей, прожи- вающих в городах, в названиях которых присутствует дефис.
8. Напишите запрос для получения списка учебных заведений, в названиях которых использованы кавычки.
9. Напишите запрос для получения списка предметов, названия которых оканчиваются на ‘ия’.
10. Напишите запрос для получения списка учебных заведений, в названиях которых содержится слово ‘университет’.
11. Напишите запрос для получения списка студентов, фамилии ко- торых начинаются на ‘Ков’ или на ‘Куз’.
12. Напишите запрос для получения списка предметов обучения, названия которых состоят из более одного слова.
13. Напишите запрос для получения списка учебных заведений, на- звания которых состоят как минимум из 7 слов.
14. Напишите запрос для получения списка студентов, фамилии ко- торых состоят из трех букв.
Преобразование вывода и встроенные функции
В SQL реализованы операторы преобразования данных и встроен- ные функции, предназначенные для работы со значениями столбцов и/или константами в выражениях. Использование этих операторов допустимо в запросах везде, где можно использовать выражения.
Числовые, символьные и строковые константы. Несмот- ря на то, что SQL работает с данными в понятиях строк и столб- цов таблиц, имеется возможность применения значений выражений, построенных с использованием встроенных функций, констант, имен столбцов, которые определяются как своего рода виртуальные столбцы. Они помещаются в списке столбцов и могут сопровождаться псевдони- мами.
Если в запросе вместо спецификации столбца SQL обнаруживает
число, то оно интерпретируется как числовая константа.
Символьные константы должны указываться в одинарных кавыч- ках. Если одинарная кавычка должна выводиться как часть строковой константы, то ее нужно предварить другой одинарной кавычкой.
Например, результатом выполнения запроса
SURNAME | NAME | |||
Фамилия | Иванов | Имя | Иван | |
Фамилия | Петров | Имя | Петр | |
Фамилия | Сидоров | Имя | Вадим | |
Фамилия | Кузнецов | Имя | Борис | |
Фамилия | Зайцева | Имя | Ольга | |
Фамилия | Павлов | Имя | Андрей | |
Фамилия | Котов | Имя | Павел | |
Фамилия | Лукин | Имя | Артем | |
Фамилия | Петров | Имя | Антон | |
Фамилия | Белкин | Имя | Вадим | |
... | ... | ... | ... | ... |
Арифметические операции для преобразования число- вых данных.
• − |
• − |
Например, результат запроса
SELECT SURNAME, NAME, STIPEND, -(STIPEND*KURS)/2
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
... |
... |
... |
... |
− 400 |
... |
SURNAME | NAME | STIPEND | KURS | |
Сидоров Петров | Вадим Антон | − 300 |
" |
Эта операция имеет синтаксис
" |
<значимое символьное выражение>.
SELECT ‘Фамилия’, SURNAME, ‘Имя’, NAME, 100
FROM STUDENT;
является таблица следующего вида:
Например:
" " |
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Результат запроса будет выглядеть следующим образом:
Сидоров_Вадим Петров_Антон ... |
STIPEND ... |
Символьные функции преобразования букв различных слов в строке.
• LOWER — перевод в строчные символы (нижний регистр)
LOWER (<строка>)
• UPPER — перевод в прописные символы (верхний регистр)
UPPER (<строка>)
• |
INITCAP (<строка>) Например:
SELECT LOWER (SURNAME), UPPER (NAME)
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Результат запроса будет выглядеть следующим образом
SURNAME Сидоров Петров ... |
NAME ВАДИМ АНТОН ... |
Символьные строковые функции.
• LPAD — дополнение строки слева
LPAD (<строка>, <длина> [, <подстрока> ])
– <строка> дополняется слева указанной в <подстроке> по- следовательностью символов до указанной <длины> (воз- можно, с повторением последовательности);
– если <подстрока> не указана, то по умолчанию <строка>
дополняется пробелами;
– если <длина> меньше длины <строки>, то исходная <стро- ка> усекается слева до заданной <длины>.
• RPAD — дополнение строки справа
RPAD (<строка>, <длина> [, <подстрока> ])
– <строка> дополняется справа указанной в <подстроке> последовательностью символов до указанной <длины> (воз- можно, с повторением последовательности);
– если <подстрока> не указана, то по умолчанию <строка>
дополняется пробелами;
– если <длина> меньше длины <строки>, то исходная <стро- ка> усекается справа до заданной <длины>.
• LTRIM — удаление левых граничных символов
LTRIM (<строка> [, <подстрока> ])
– из <строки> удаляются слева символы, указанные в <под- строке>;
– если <подстрока> не указана, то по умолчанию удаляются пробелы;
– в <строку> справа добавляется столько пробелов, сколько символов слева было удалено, т. е. длина <строки> остается неизменной.
• RTRIM — удаление правых граничных символов
RTRIM (<строка> [, <подстрока> ])
– из <строки> удаляются справа символы, указанные в <под- строке>;
– если <подстрока> не указана, то по умолчанию удаляются пробелы;
– в <строку> слева добавляется столько пробелов, сколько символов справа было удалено, т. е. длина <строки> оста- ется неизменной.
Функции LTRIM и RTRIM рекомендуется использовать при написа- нии условных выражений, в которых сравниваются текстовые строки. Дело в том, что наличие начальных или конечных пробелов в сравни- ваемых операндах может исказить результат сравнения.
Например, константы ‘ ААА’ и ‘ ААА ’ не равны друг другу.
• SUBSTR — выделение подстроки
SUBSTR (<строка>, <начало> [, <количество> ])
– из <строки> выбирается заданное <количество> символов, начиная с указанной позиции в строке <начало>;
– если <количество> не задано, символы выбираются с <на- чала> и до конца <строки>;
– возвращается подстрока, содержащая число символов, за- данное параметром <количество>, либо число символов от позиции, заданной параметром <начало>, до конца <стро- ки>;
– если указанное <начало> превосходит длину <строки>, то возвращается строка, состоящая из пробелов. Длина этой строки будет равна заданному <количеству> или исходной длине <строки> (при не заданном <количестве>).
• INSTR — поиск подстроки
INSTR (<строка>, <подстрока> [, <начало поиска> [,
<номер вхождения> ]])
– <начало поиска> задает начальную позицию в строке для поиска <подстроки>; если не задано, то по умолчанию принимается значение 1;
– <номер вхождения> задает порядковый номер искомой под- строки; если не задан, то по умолчанию принимается значе- ние 1;
– значимые выражения в <начале поиска> или в <номере вхождения> должны иметь беззнаковый целый тип или при- водиться к этому типу;
– тип возвращаемого значения — INT;
– функция возвращает позицию найденной подстроки.
• LENGTH — определение длины строки
LENGTH (<строка>)
– длина <строки>, тип возвращаемого значения — INT;
– функция возвращает NULL, если <строка> имеет NULL -зна- чение.
Пример 1.
Результат запроса
SELECT LPAD (SURNAME, 10, ‘@’), RPAD (NAME, 10, ‘$’)
FROM STUDENT
WHERE KURS = 3 AND STIPEND > 0;
будет выглядеть следующим образом
I zUvOT8nMS7dVCg1x07VQUiguScxLSczJz0u1VapMLVayt+PlAgAAAP//AwBQSwMEFAAGAAgAAAAh AES58IbEAAAA3AAAAA8AAABkcnMvZG93bnJldi54bWxEj81qAkEQhO8B32FowVvsNchqVkcRYyB6 CdHk3tnp/cGdnmVn1M3bZ4RAjkVVfUUt171t1JU7XzvRMBknoFhyZ2opNXyeXh/noHwgMdQ4YQ0/ 7GG9GjwsKTPuJh98PYZSRYj4jDRUIbQZos8rtuTHrmWJXuE6SyHKrkTT0S3CbYNPSZKipVriQkUt byvOz8eLjZQS8X33khTp12x/2F92+L05FFqPhv1mASpwH/7Df+03o2GaPsP9TDwCuPoFAAD//wMA UEsBAi0AFAAGAAgAAAAhAASrOV4AAQAA5gEAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5 cGVzXS54bWxQSwECLQAUAAYACAAAACEACMMYpNQAAACTAQAACwAAAAAAAAAAAAAAAAAxAQAAX3Jl bHMvLnJlbHNQSwECLQAUAAYACAAAACEAMy8FnkEAAAA5AAAAEgAAAAAAAAAAAAAAAAAuAgAAZHJz L3BpY3R1cmV4bWwueG1sUEsBAi0AFAAGAAgAAAAhAES58IbEAAAA3AAAAA8AAAAAAAAAAAAAAAAA nwIAAGRycy9kb3ducmV2LnhtbFBLBQYAAAAABAAEAPcAAACQAwAAAAA= ">
@@@@Петров @@@@Павлов @@@@@Лукин ... |
Петр$$$$$$ Андрей$$$$ Артем$$$$$ ... |
Пример 2.
Запрос
" " |
LENGTH (CITY) FROM STUDENT
WHERE KURS IN (2, 3, 4) AND STIPEND > 0;
выдаст результат
CITY | ||
П.Петров | Курск | |
С.Сидоров | Москва | |
О.Зайцева | Липецк | |
А.Лукин | Воронеж | |
А.Петров | NULL | NULL |
... | ... | ... |
Функции работы с числами.
• ABS — абсолютное значение
ABS (<значимое числовое выражение>)
• |
FLOOR (<значимое числовое выражение>)
• |
CEIL (<значимое числовое выражение>)
• Функция округления — ROUND
ROUND (<значимое числовое выражение>, <точность>) аргумент <точность> задает точность округления (см. пример ниже).
• Функция усечения — TRUNC
TRUNC (<значимое числовое выражение>, <точность>)
• Тригонометрические функции — COS, SIN, TAN COS (<значимое числовое выражение>)
SIN (<значимое числовое выражение>)
TAN (<значимое числовое выражение>)
• Гиперболические функции — COSH, SINH, TANH COSH (<значимое числовое выражение>)
SINH (<значимое числовое выражение>)
TANH (<значимое числовое выражение>)
2 И. Ф. Астахова, В. М. Мельников, А. П. Толстобров, В. В. Фертиков
• Экспоненциальная функция — EXP EXP (<значимое числовое выражение>)
• Логарифмические функции — LN, LOG
LN (<значимое числовое выражение>)
LOG (<значимое числовое выражение>)
• Функция возведения в степень — POWER POWER (<значимое числовое выражение>,
<показатель степени>)
• Определение знака числа — SIGN SIGN (<значимое числовое выражение>)
• Вычисление квадратного корня — SQRT SQRT (<значимое числовое выражение>)
Пример.
Запрос
SELECT UNIV_NAME, RATING, ROUND (RATING, –1), TRUNC (RATING, –1) FROM UNIVERSITY;
вернет результат
UNIV_NAME | RATING | ||
МГУ | |||
ВГУ | |||
НГУ | |||
РГУ | |||
БГУ | |||
ТГУ | |||
ВГМА | |||
... | ... | ... | ... |
Функции преобразования значений.
• Преобразование в символьную строку — TO_CHAR TO_CHAR (<значимое выражение> [, <символьный формат> ])
– <значимое выражение> должно представлять числовое зна- чение или значение типа дата-время;
– для числовых значений <символьный формат> должен иметь синтаксис [S]9[9...][.9[9...]], где S — представление знака числа (при отсутствии предполагается без отображе-
ния знака), 9 — представление цифр-знаков числового зна- чения (для каждого знакоместа). Символьный формат опре- деляет вид отображения чисел. По умолчанию для числовых значений используется формат ‘999999.99’;
– для значений типа ДАТА-ВРЕМЯ <символьный формат>
имеет вид (т. е. вид отображения значений даты и времени)
— в части даты:
‘DD-Mon-YY’
‘DD-Mon-YYYY’ ‘MM/DD/YY’ ‘MM/DD/YYYY’ ‘DD.MM.YY’
‘DD.MM.YYYY’
— в части времени:
‘HH24’ ‘HH24:MI’
‘HH24:MI:SS’
‘HH24:MI:SS.FF’
где:
НН24 — часы в диапазоне от 0 до 24;
MI — минуты;
SS — секунды;
FF — тики (сотые доли секунды).
При выводе времени в качестве разделителя по умолчанию исполь- зуется двоеточие (“:”), но при желании можно использовать любой другой символ.
Возвращаемое значение — символьное представление <значимого выражения> в соответствии с заданным <символьным форматом> преобразования.
• |
TO_NUMBER
TO_NUMBER (<значимое символьное выражение>)
При этом <значимое символьное выражение> должно задавать символьное значение числового типа.
• Преобразование символьной строки в дату — TO_DATE
TO_DATE (<значимое символьное выражение> [,
<символьный формат> ])
– <значимое символьное выражение> должно задавать сим- вольное значение типа ДАТА-ВРЕМЯ;
2*
– <символьный формат> должен описывать представление значения типа ДАТА-ВРЕМЯ в <значимом символьном вы- ражении>. Допустимые форматы (в том числе и формат по умолчанию) приведены выше.
Возвращаемое значение — <значимое символьное выражение> во внутреннем представлении. Тип возвращаемого значения — DATE. Над значениями типа DATE разрешены следующие операции:
• |
• |
• |
получается значение типа DATE.
В бинарных операциях один из операндов должен иметь значение отдельного элемента даты: только год, или только месяц, или только день.
Пример.
Запрос
SELECT SURNAME, NAME, BIRTHDAY, TO_CHAR (BIRTHDAY, ‘DD-Mon-YYYY’), TO_CHAR (BIRTHDAY, ‘DD.MM.YY’)
FROM STUDENT;
вернет результат
SURNAME | NAME | BIRTHDAY | ||
Иванов | Иван | 3/12/1988 | 3-дек-1988 | 3.12.88 |
Петров | Петр | 11/12/1986 | 11-дек-1986 | 11.12.86 |
Сидоров | Вадим | 7/06/1985 | 7-июн-1985 | 7.06.85 |
Кузнецов | Борис | 8/12/1987 | 8-дек-1987 | 8.12.87 |
Зайцева | Ольга | 21/05/1987 | 21-май-1987 | 21.05.87 |
Павлов | Андрей | 5/11/1985 | 5-ноя-1985 | 5.11.85 |
Котов | Павел | NULL | NULL | NULL |
Лукин | Артем | 11/12/1987 | 11-дек1987 | 11.12.87 |
Петров | Антон | 5/08/1987 | 5-авг-1987 | 5.08.87 |
Белкин | Вадим | 20/01/1986 | 20-янв-1986 | 20.01.86 |
... | ... | ... | ... | ... |
Функция CAST является средством явного преобразования данных из одного типа в другой. Синтаксис этой команды имеет вид
CAST <значимое выражение> AS <тип данных>
• |
Любое числовое выражение может быть явно преобразовано в любой другой числовой тип.
• |
• |
• |
• |
• |
• |
Пример.
SELECT CAST STUDENT_ID AS CHAR (10) FROM STUDENT;
УПРАЖНЕНИЯ
1. Составьте запрос для таблицы STUDENT таким образом, чтобы выходная таблица содержала один столбец, содержащий после- довательность разделенных символом “;” (точка с запятой) зна- чений всех столбцов этой таблицы; при этом текстовые значения должны отображаться прописными символами (верхний регистр), т. е. быть представленными в следующем виде: 10;КУЗНЕЦОВ;БОРИС;0;БРЯНСК; 8.12.1987;10.
2. Составьте запрос для таблицы STUDENT таким образом, что- бы выходная таблица содержала всего один столбец в сле- дующем виде: Б.КУЗНЕЦОВ; место жительства - БРЯНСК; родился - 8.12.87.
3. Составьте запрос для таблицы STUDENT таким образом, что- бы выходная таблица содержала всего один столбец в сле- дующем виде: б.кузнецов; место жительства - брянск; родился: 8-дек-1987.
4. Составьте запрос для таблицы STUDENT таким образом, чтобы выходная таблица содержала всего один столбец в следующем виде: Борис Кузнецов родился в 1987 году.
5. Составьте запрос, выводящий фамилии, имена студентов и вели- чину получаемых ими стипендий, при этом значения стипендий должны быть увеличены в 100 раз.
6. То же, что и в упр. 4, но только для студентов 1, 2 и 4 курсов и таким образом, чтобы фамилии и имена были выведены пропис- ными буквами.
38 Гл. 2. Выборка данных (оператор SELECT )
7. Составьте запрос для таблицы UNIVERSITY таким образом, что- бы выходная таблица содержала всего один столбец в следующем виде: Код-10; ВГУ-г.ВОРОНЕЖ; Рейтинг=296.