Простейшие SELECT-запросы




Оператор 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\ ’.

\
\
\
В этом выражении символ “ ” с помощью ключевого слова ESCAPE объявляется escape-символом. Первый символ “ _ ” в заданном шаблоне поиска “_ _Р” будет соответствовать, как и ранее, любому набору символов в проверяемой строке. Однако второй символ “ _ ”, следующий после символа “ ”, объявленного 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;

 

является таблица следующего вида:


Например:

" "
SELECT SURNAME ‘_’ NAME, STIPEND

FROM STUDENT

WHERE KURS = 4 AND STIPEND > 0;


Результат запроса будет выглядеть следующим образом:

Сидоров_Вадим Петров_Антон ...
STIPEND ...

 

Символьные функции преобразования букв различных слов в строке.

LOWER — перевод в строчные символы (нижний регистр)

LOWER (<строка>)

UPPER — перевод в прописные символы (верхний регистр)

UPPER (<строка>)

INITCAP — перевод первой буквы каждого слова строки в за- главную (прописную)

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.

Запрос

" "
SELECT SUBSTR (NAME, 1, 1) ‘.’ SURNAME, CITY,

LENGTH (CITY) FROM STUDENT

WHERE KURS IN (2, 3, 4) AND STIPEND > 0;

выдаст результат

 

  CITY  
П.Петров Курск  
С.Сидоров Москва  
О.Зайцева Липецк  
А.Лукин Воронеж  
А.Петров NULL NULL
... ... ...

 

Функции работы с числами.

ABS — абсолютное значение

ABS (<значимое числовое выражение>)

FLOOR — наибольшее целое, не превосходящее заданное число с плавающей точкой

FLOOR (<значимое числовое выражение>)

CEIL — наименьшее целое, которое равно или больше заданного числа

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 можно прибавлять значения типа INTERVAL, в результате чего получается значение типа DATE; при вычитании двух значений типа DATE получается значение типа INTERVAL;

при вычитании из значения типа DATE значения типа INTERVAL

получается значение типа 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 <тип данных>

<значимое выражение> должно иметь числовой или символьный тип языка SQL (возможно, с указанием длины, точности и мас- штаба) или быть NULL -значением.


 

Любое числовое выражение может быть явно преобразовано в любой другой числовой тип.

Символьное выражение может быть преобразовано в любой чис- ловой тип. При этом в результате такого преобразования отсе- каются начальные и конечные пробелы, а остальные символы преобразуются в числовое значение по правилам языка SQL. Если заданная явным образом длина символьного типа недо- статочна и преобразованное значение не размещается в нем, то результативное значение усекается справа.

Возможно явное преобразование символьного типа в символь- ный с другой длиной. Если длина результата больше длины аргумента, то значение дополняется пробелами; если меньше, то усекается.

NULL преобразуется в NULL.

Числовое выражение может быть преобразовано в символьный тип.

Пример.

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.

8. То же, что и в упр. 7, но значения рейтинга требуется округлить до первого знак



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-10-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: