22494

SELECT в SQL Oracle. Основные возможности

Лабораторная работа

Информатика, кибернетика и программирование

1] Основные фразы запроса: SELECT и FROM [3.1] Фраза SELECT [3. В противном случае вы должны иметь привилегию SELECT по отношению к таблице.

Русский

2013-08-04

335 KB

9 чел.

Лабораторная работа 4

Предложение SELECT в SQL Oracle. Основные возможности

Содержание

[1] Цели лабораторной работы

[2] Теоретические основы

[2.1] Синтаксис запроса

[2.2] Назначение

[2.3] Предварительные требования

[2.4] Ключевые слова и параметры

[3] Описание и примеры

[3.1] Основные фразы запроса: SELECT и FROM

[3.1.1] Фраза SELECT

[3.1.2] Фраза FROM

[3.2] Фраза WHERE

[3.2.1] Использование простых условий

[3.2.1.1] Использование операторов сравнения

[3.2.1.2] Логические операторы

[3.2.1.3] Выражение над столбцами во фразе WHERE

[3.2.2] Специальные операторы

[3.2.2.1] Оператор IN

[3.2.2.2] Оператор BETWEEN

[3.2.2.3] Оператор LIKE

[3.2.2.4] Операторы IS NULL и IS NOT NULL.

[4] Варианты заданий

[4.1] Вариант 1

[4.2] Вариант 2

[4.3] Вариант 3

[4.4] Вариант 4

[4.5] Вариант 5

[4.6] Вариант 6

[4.7] Вариант 7

[4.8] Вариант 8

[4.9] Вариант 9

[4.10] Вариант 10

[4.11] Вариант 11

[4.12] Вариант 12

[4.13] Вариант 13

[4.14] Вариант 14

[4.15] Вариант 15

[4.16] Вариант 16

[4.17] Вариант 17

[4.18] Вариант 18

[5] Контрольные вопросы

[6] Приложения

[6.1] Приложение A. Операторы SQL Oracle

[6.1.1] Унарные и бинарные операторы

[6.1.2] Старшинство операторов

[6.1.3] Арифметические операторы

[6.1.4] Оператор конкатенации

[6.1.5] Операторы сравнения

[6.1.6] Логические операторы

[6.1.7] Теоретико-множественные операторы

[6.2] Приложение B. Выражения

[6.2.1] Простые выражения

[6.2.2] Составные выражения

[6.2.3] Выражения переменных

[6.2.4] Выражения встроенных функций

[6.2.5] Выражения функций, определенных пользователями

[6.2.6] Выражения конструктора типа

[6.2.7] CAST Expressions

[6.2.8] CURSOR Expressions

[6.2.9] Выражение доступа к объекту

[6.2.10] Выражения DECODE

[6.2.11] Список выражений

[6.3] Приложение C. Комментарии в SQL

  1.  Цели лабораторной работы
  •  Изучить основные возможности SQL Oracle по поиску данных в таблицах базы данных.
  •  Приобрести практический опыт по поиску данных в таблицах базы данных с использованием SQL*Plus
  1.  Теоретические основы
    1.  Синтаксис запроса

  1.  Назначение

Организация поиска данных в таблицах базы данных.

  1.  Предварительные требования

Для выборки данных из таблицы она должна располагаться в вашей схеме. В противном случае вы должны иметь привилегию SELECT по отношению к таблице.

  1.  Ключевые слова и параметры 

DISTINCT | UNIQUE  

Указывает на то, что следует отбирать только по одной копии из тех строк, которые повторяются (эти два слова являются синонимами). Повторяющимися (дубликатами) считаются такие строки, которые совпадают по всем значениям, получаемым в результате вычисления выражений в списке фразы SELECT.  

ALL  

Указывает на то, что отбираются все строки, включая и повторяющиеся. По умолчанию предполагается ALL.  

*  

Указывает, что отбираются все столбцы из всех таблиц, приведенных во фразе FROM.

schema  

Имя схемы, содержащей таблицу. Если схема опущена, то Oracle предполагает, что таблица находится в вашей схеме.  

table.*  

Указывает на то, что следует выбрать все столбцы из указанной таблицы. Вы можете использовать квалификатор схемы для выбора столбцов из таблицы, не принадлежащей вашей схеме. Запрос, который выбирает строки из двух или более таблиц производит их соединение.

expr  

Является выражением, которое следует выбрать. См описание синтаксиса выражений в этой Приложении В. Имя столбца в этом списке может быть квалифицировано с помощью schema только если таблица, содержащая этот столбец, также квалифицирована с помощью schema во фразе FROM.  

c_alias  

Предоставляет другое имя для выражения столбца и этот алиас используется в качестве заголовка столбца. Фраза AS является факультативной. Алиас переименовывает элемент списка фразы SELECT в контексте всего запроса. Алиас может использоваться во фразе ORDER BY, однако его использование в других фразах запрещено.  

FROM

 

 

Специфицирует список таблиц или подзапросов, из которых выбираются данные.  

table

Имя таблицы, из которой выбираются данные.  

t_alias  

Предоставляет имя-синоним (алиас) для таблицы или подзапроса и наиболее часто используется в коррелированных запросах.  

subquery

Запрос, который определяет таблицу, из которой выбираются данные.

WHERE  

Ограничивает выбираемые строки теми, которые удовлетворяют указанным условиям.

condition является любым допустимым в SQL условием, которое основывается на столбцах таблиц из фразы FROM. См. описание синтаксиса условие а Лаб.2 .

outer_join применяется только в том случае, когда фраза FROM специфицирует более одной таблицы. Эта специальная форма условия указывает, что Oracle должен вернуть строки, удовлетворяющие условию, а также ВСЕ те строки одной из соединяемых таблиц, для которых не нашлось строк другой таблицы, которые бы удовлетворили условию соединения.

Если один из элементов фразы FROM является вложенной таблицей, то во фразе WHERE нельзя использовать outer_join.

Если эта фраза опущена, Oracle возвращает все строки таблиц из фразы FROM.  

GROUP BY  

 

 

 

Группирует отобранные на основе уникальности значений выражения exp, и возвращает единственную итоговую строку для каждой группы.

Выражения во фразе GROUP BY могут содержать ссылки на любые столбцы из таблиц во фразе FROM, не зависимо от того, присутствуют они в списке фразы SELECT или нет.  

HAVING  

Ограничивает группы строк теми, на которых указанное условие condition равно TRUE. Если эта фраза опущена, то все созданные группы учавствуют в формировании выходных строк.

СпецифицируйтеGROUP BY и HAVING после фразы WHERE. Если вы используете обе фразы GROUP BY и HAVING, то они могут появляться в произвольном порядке.  

См. также описание синтаксиса для віражений expr в приложении этой Лаб. и описание синтаксиса условий в Лаб. 2.  

UNION |
UNION ALL | INTERSECT | MINUS  

 

Являются теоретико-множественными операторами, которые объединяют строки, возвращаемые двумя предложениями SELECT в общий результат. Количество и тип данных в обоих подзапросах должен быть одинаковым, однако длина столбцов может отличаться.

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

Ограничения: 

  •  Для ссылки на столбец следует воспользоваться его алиасом.
  •  Вы не можете использовать фразу ORDER BY в subquery этих операторов.  

ORDER BY  

 

 

Упорядочивает строки, возвращаемые предложением. Без этой фразы нет ни какой гарантии, что тот же самый запрос, выполненный еще раз, возвратит результат с тем же порядком строк, что и при его предыдущем выполнении.

  •  expr – упорядочивает строки на основе значения выражения expr. Это выражение может использовать столбцы из списка фразы SELECT или столбцы из таблиц фразы FROM.
  •  position – указывает порядковый номер столбца во фразе SELECT, по которому производится упорядочение; position должен быть целым числом.
  •  c_alias – указывает алиас того столбца (выражения) списка фразы SELECT, по которому производится упорядочение.
  •  ASC и DESC специфицируют упорядочение в возрастающем или убывающем порядке. ASC принимается по умолчанию.

Можно указать много выражений во фразе ORDER BY. Oracle сначала отсортирует строки по значению первого выражения. Затем строки с одним и тем же значением первого выражения сортируются по значению второго выражения и т.д. При сортировке значений NULL Oracle размещает их в конце при сортировке по возрастанию, и размещает такие строки в начале при сортировке по убыванию.  

Ограничения: 

  •  Если вы определили оператор DISTINCT в этом предложении, то в этом случае эта фраза может ссылаться только на столбцы из списка фразы SELECT.
  •  Если вы указали фразу GROUP BY в этом же предложении, то фраза ORDER BY ограничивается следующими выражениями:

- Константы

-  Агрегатные функции

- Выражения, идентичные тем, которые используются во фразе GROUP BY. 

- Выражения, включающие перечисленные выше выражения, которые вычисляют одно и то же значение для всех строк группы.

  1.  Описание и примеры

SQL-запрос описывается с помощью предложения SELECT с использование следующих фраз:

SELECT, FROM, WHERE, GROUP BY, HAVING, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY.

Имеются также и другие фразы, которые мы не будем изучать. Среди перечисленных выше фраз только SELECT и FROM являются обязательными, все остальные  – факультативные.

В этой лабораторной работе мы изучим основные возможности фраз SELECT, FROM и WHERE.

  1.  Основные фразы запроса: SELECT и FROM
    1.  Фраза SELECT

В простейшем случае фраза SELECT содержит список столбцов, которые следует вывести, а фраза FROM идентифицирует таблицу.

Вывод указанных столбцов. Для вывода конкретных столбцов они должны быть перечислены во фразе SELECT. Следующий запрос выводит названия факультетов и имена их деканов:

SELECT Name, Dean

FROM   FACULTY;

Вывод всех столбцов. Для вывода всех столбцов таблицы следует либо перечислить все столбцы во фразе SELECT, либо воспользоваться символом ‘*’ вместо списка столбцов. В следующем запросе выводится вся таблица FACULTY:

SELECT *

FROM   FACULTY;

Квалификация имен столбцов именами таблиц. Имя столбца может быть квалифицировано (уточнено) именем таблицы с использованием следующего синтаксиса:

table_name.column_name

Уточнение имени столбца необходимо в том случае, когда запрос использует много таблиц (см. позже) и различные таблицы имеют столбцы с одинаковыми именами. Уточнение имени столбца можно производить и в том случае, когда нет необходимости в этом. Например, следующий запрос считается корректным:

SELECT ROOM.Num, ROOM.Seats, ROOM.Floor

FROM  ROOM;

Удаление повторяющихся строк. Вы можете удалить дубликаты строк результата, используя фразу DISTINCT или UNIQUE во фразе SELECT. Эта фраза применяется ко всей выходной строке, а не к отдельному столбцу. Например, следующий два запроса эквивалентны и дают список всех имеющихся должностей:

SELECT DISTINCT Post  SELECT UNIQUE Post

FROM   TEACHER;    FROM   TEACHER;

Ключевое слово ALL означает, что дубликаты должны быть сохранены. Это значение используется по умолчанию, если перечисленные выше ключевые слова не указываются. Следующие два запроса эквивалентны:

SELECT ALL Post    SELECT Post

FROM   TEACHER;    FROM   TEACHER;

Выражения в списке фразы SELECT. Список фразы SELECT может содержать не только имена столбцов, но и произвольные выражения допустимых типов, которые поддерживаются SQL Oracle. Например, следующий запрос является корректным:

SELECT Name, Salary, Salary + Commission, Commission * 100 / (Salary + Commission)

FROM   TEACHER;

Литералы в списке фразы SELECT. Список фразы SELECT может содержать литералы или литеральные выражения. Во время вывода столбец с литералом будет содержать значение литерала во всех выходных строках. Например, запрос:

SELECT 'The teacher', Name, 'has salary', Salary, 'UAH'

FROM   TEACHER;

может иметь следующий результат:

         Name                 Salary

------------ -----------   ----------- ----------   ---

The teacher  Ivanov        has salary         500  UAH

The teacher  Petrov        has salary         470  UAH

Переименование элементов списка фразы SELECT. Любой элемент списка фразы SELECT может быть переименован с помощью так называемого «алиаса столбца». Это оказывается особенно полезным, когда следует сослаться на элемент, который представляет собой выражение. Алиас столбца также используется в качестве заголовка столбца при выводе результатов. В следующем запросе оба элемента списка SELECT переименовываются с помощью алиаса столбца:

SELECT Name       AS Teacher_name,

  Salary + Commission AS Total_salary

FROM   TEACHER;

Ключевое слово AS факультативно.

Если вы хотите, чтобы алиас представлял собой несколько слов, разделенных пробелами, то алиас следует заключить в двойные кавычки, например:

SELECT Name       AS “Name of the teacher“,

  Salary + Commission AS “Total salary of the teacher“

FROM   TEACHER;

  1.  Фраза FROM

Фраза FROM содержит имя таблицы или список имен таблиц, которые используются для выбора данных.

Одна таблица. В простейшем случае используется одна таблица. Все предыдущие примеры использовали одну таблицу.

Много таблиц. Если вы задаете список таблиц во фразе FROM, то все строки первой таблицы конкатенируются со всеми строками второй таблицы. Например, запрос:

SELECT *

FROM   FACULTY, DEPARTMENT;

производит конкатенацию всех строк таблицы FACULTY со всеми строками таблицы DEPARTMENT. Этот запрос эквивалентен операции декартова произведения реляционной алгебры.

Соединение двух таблиц. Чтобы получить семантически осмысленный результат, следует соединить строки факультетов со теми строками кафедр, которые принадлежат этим факультетам.

Используя столбец FacNo, который присутствует в обоих таблицах, вы может соединить факультеты только с их кафедрами с помощью условия фразы WHERE, как это показано в следующем запросе:

SELECT *

FROM   FACULTY, DEPARTMENT

WHERE  FACULTY.FacNo = DEPARTMENT.FacNo;

Такое соединение называется экви-соединением, так как оно производится по равенству значений двух столбцов из различных таблиц.

Соединение многих таблиц. Вы можете соединять столько таблиц, сколько необходимо, например, в следующем запросе выводятся факультеты с их преподавателями:

SELECT FACULTY.Name, TEACHER.Name

FROM   FACULTY, DEPARTMENT, TEACHER

WHERE  FACULTY.FacNo = DEPARTMENT.FacNo AND DEPARTMENT.DepNo = TEACHER.DepNo;

Обратим внимание, что столбцы таблицы DEPARTMENT не выводятся, она используется только для соединения факультетов с преподавателями. (Логические операторы будут обсуждены далее).

Указание необходимых столбцов. Когда используется более, чем одна таблица, вы можете указать в качестве выходных столбцы из различных таблиц. В случае необходимости имена столбцов могут быть уточнены именами таблиц. Имена столбцов также могут быть переименованы с помощью алиасов, как это сделано в следующем запросе:

SELECT FACULTY.Name   AS Faculty_name,

  DEPARTMENT.Name  AS Department_name,

  DEPARTMENT.Fund AS Department_fund

FROM   FACULTY, DEPARTMENT

WHERE  FACULTY.FacNo = DEPARTMENT.FacNo;

Соединение по условию, отличающемуся от равенства. Экви-соединение использует оператор равенства (=) во фразе WHERE для соединения таблиц, в не экви-соединениях используются другие операторы отношений. Например, в следующем примере выводятся кафедры, которые имеют фонд финансирования, превышающий фонд финансирования его факультета:

SELECT DEPARTMENT.Name, DEPARTMENT.Fund

FROM   FACULTY, DEPARTMENT

WHERE  FACULTY.Fund < DEPARTMENT.Fund;

Обратите внимание, что хотя для получения необходимого ответа мы соединяем две таблицы, однако в результат попадают столбцы только из таблицы DEPARTMENT.

Имена-синонимы (алиасы) для таблиц. Во фразе FROM с именем таблицы может быть связано другое имя, которое выступает в качестве ее синонима (алиаса). Такие имена могут использоваться в любом месте запроса для ссылки на таблицу. Синтаксис определения алиаса таблицы следующий:

table_name table_alias_name

Например, предыдущий запрос может быть представлен следующим образом:

SELECT d.Name, d.Fund

FROM   FACULTY f, DEPARTMENT d

WHERE  f.Fund < d.Fund;

В этом примере использование алисов таблиц является факультативным, однако имеются такие запросы, в которых нельзя обойтись без алиаслов таблиц.

Соединение таблицы с самой собой. Таблица может быть соединена с самой собой. В этом случае алиасы таблиц являются обязательными, так как необходимо различать две различных копии таблицы. В следующем запросе мы получаем пары групп, которые имеют одинаковый рейтинг:

SELECT G1.Num, G2.Num, G1.Rating

FROM   SGROUP G1, SGROUP G2

WHERE  G1.GrpNo = G2.GrpNo;

Внешнее соединение (оuter join). Внешнее соединение расширяет возможности обычного соединения. Внешнее соединение возвращает все строки, которые удовлетворяют условию соединения, а также строки одной из таблиц, для которых не нашлось строки из другой таблицы, которые бы удовлетворили условию соединения. Такие строки не возвращаются обычным соединением. Для того, чтобы произвести внешнее соединение таблиц A и B с получением в результате ВСЕХ строк таблицы A, следует применить оператор внешнего соединения (+) ко всем столбцам таблицы В. Для всех тех строк таблицы А, для которых не нашлось совпадающих строк из таблицы В, Oracle возвращает значение NULL для всех тех выражений из списка SELECT, которые используют столбцы из В. В следующем примере мы получаем список факультетов и их кафедр, причем имена кафедр присутствуют даже в том случае, когда у них нет факультетов – в этом случае вместо имени факультета выводится значение NULL:

SELECT FACULTY.Name AS FacName, DEPARTMENT.Name AS DepName, DEPARTMENT.Fund AS DepFund

FROM  FACULTY, DEPARTMENT

WHERE  FACULTY.FacNo = DEPARTMENT.FacNo (+);

Таблица DUAL. Oracle имеет в своем составе таблицу DUAL, которая не содержит ни строк ни столбцов. Она доступна всем пользователям. Она используется в том случае, когда вы хотите вывести какие-либо значения, которые не выбираются (или не вычисляются) из значений какой-либо таблицы. Например, в следующем запросе выводится текущая системная дата:

SELECT SYSDATE FROM DUAL;

Естественно, что для получения этой даты вы можете воспользоваться любой существующей таблицей, например:

SELECT SYSDATE FROM LECTURE;

однако в этом случае количество выводимых значений системной даты будет равно количеству сток в таблице LECTURE.

  1.  Фраза WHERE

Фраза WHERE позволяет указать условие, которому должны удовлетворять результирующие строки. Мы уже рассмотрели использование WHERE для соединения таблиц.

  1.  Использование простых условий
    1.  Использование операторов сравнения

Пример 1: Выдать всех профессоров:

SELECT Name AS List_of_all_professors

FROM   TEACHER

WHERE  UPPER(Post) = 'PROFESSOR';

Здесь  PROFESSOR- строковый литерал. В SQL строковые литералы заключаются в одинарные кавычки.

Примечание: Обратите внимание, здесь мы воспользовались функцией UPPER для преобразования букв с прописные и указали литерал в виде прописных букв. Рекомендуем использовать эту возможность всякий раз, когда вы сравниваете строки символов, так как в базе данных они могут храниться в виде прописных и/или строчных букв. А Oracle сравнивает строки с учетом регистра.

Пример 2: Привести все факультеты с фондами финансирования, превышающими 30000:

SELECT Name

FROM   FACULTY

WHERE  Fund > 30000;

Здесь фонд является числовым полем, поэтому 30000 не заключается в кавычки.

  1.  Логические операторы

Пример 3 – Логический AND: Выдать факультеты из корпуса 5 с фондами более 20000:

SELECT Name

FROM   FACULTY

WHERE  Building ='5' AND Fund < 200000;

Пример 4 – Логический OR: Привести кафедры из корпуса 7 или 3:

SELECT Name

FROM   DEPARTMENT

WHERE  UPPER(Building) ='7' OR UPPER(Building) ='3';

Пример 5 – Логический NOT: Привести факультеты, отличные от ‘informatics:

SELECT Name

FROM   FACULTY

WHERE  NOT UPPER(Name) ='INFORMATICS';

Пример 6. Комбинирование логических операторов: Выдать преподавателе, имеющих должность ‘assistant' и имеющих ставку менее 150 или надбавку более 100:

SELECT Name

FROM   TEACHER

WHERE  UPPER(Post) ='ASSISTANT' AND ( Salary < 150 OR Commission > 100 );

При комбинировании логических операторов используется следующий их приоритет (в смысле порядка их вычисления):

  •  NOT
  •  AND
  •  OR

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

  1.  Выражение над столбцами во фразе WHERE

Пример 7. Выражение над столбцами: Выдать преподавателей, у которых зарплата (то есть ставка + надбавка) превышает 300:

SELECT Name

FROM   TEACHER

WHERE  Salary + Commission > 300;

  1.  Специальные операторы
    1.  Оператор IN

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

Пример 9. Оператор NOT IN: Привести факультеты, которые располагаются в корпусах, отличающихся от 1, 7, 8, 11:

SELECT Name

FROM   FACULTY

WHERE  UPPER(Building) NOT IN ('1', '7', '8', '10');

Правый операнд в [NOT] IN может быть подзапросом. Эта возможность буде изучена в Лаб. 6.

NULL в операторе NOT IN. Если хотя бы один из элементов множества является  NOT NULL, то для любого значения левого аргумента NOT IN выдает логическое значение UNKNOWN (и поэтому ни одна строка не может удовлетворить такому условию). Например, следующий запрос выдаст факультеты, которые не располагаются в корпусах 1 или 4:

SELECT Name

FROM   FACULTY

WHERE  UPPER(Building) NOT IN ( '1', '4' );

Однако следующий запрос ничего не выдаст:

SELECT Name

FROM   FACULTY

WHERE  UPPER(Building) NOT IN ( '1', '4', NULL );

Здесь условие фразы WHERE эквивалентно следующему:

Building != '1' AND Building != '4' AND Building != null

Так как все условия, которые производят сравнение со значением NULL в качестве результата возвращают UNDEFINED, то и все приведенное выше условие будет всегда равно UNDEFINED не зависимо от значения столбца Building. Такая ситуация вполне возможна в том случае, когда правым аргументом является подзапрос.

  1.  Оператор BETWEEN

Оператор 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 и это значит, что такая строка не удовлетворяет условию.

  1.  Оператор 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%'

Фраза ESCAPE. Вы можете включить в строку шаблона символы "%" или "_", используя фразу ESCAPE. ESCAPE определяет escape-символ. Если escape-символ встречается в шаблоне перед символами "%" или "_", Oracle интерпретирует такой символ в шаблоне буквально, а не как специальный символ шаблона.

Пример 13 – LIKE с ESCAPE: Для поиска преподавателей с шаблоном 'A_B' в их имени можно записать:

SELECT Name

FROM TEACHER

WHERE UPPER(Name) LIKE '%A\_B%' ESCAPE '\';

Здесь ESCAPE определяет символ обратной косой черты (\) в качестве escape-символа. В шаблоне escape-символ предшествует символу подчеркивания (_), поэтому он рассматривается как обычный символ.

Шаблон без %. Если шаблон не содержит символа "%", то условие оказывается равным TRUE только если оба операнда имеют одинаковую длину.

Значение NULL. Если аргумент справа равен NULL, то условие LIKE дает UNKNOWN и это означает, что соответствующая строка не удовлетворяет оператору LIKE.

  1.  Операторы IS NULL и IS NOT NULL.

Оператор IS NULL. Оператор IS NULL позволяет проверить значение столбца на null-значение. Он дает TRUE, если значение столбца NULL, и FALSE, если значение столбца не null.

Пример14 – Проверка на значение NULL: Выдать преподавателей, у которых не определены значения столбцов Salary или Commission:

SELECT Name

FROM   TEACHER

WHERE  Salary IS NULL OR Commission IS NULL;

Оператор IS NOT NULL. Является отрицание к оператору IS NULL.

Функция NVL. Она имеет синтаксис NVL(expr1, expr2). Если expr1 равно null, то возвращает expr2; если же не null, то возвращаетexpr1. Она позволяет вывести специальное значение, если значение столца равно null.

Пример15. Функция NVL: Вывести факультеты и их фондами. Если фонд не определен, то вывести строку “Fund not defined”

SELECT Name, NVL(TO_CHAR(Fund), 'Fund not defined')

FROM   FACULTY;

  1.  Варианты заданий 

Далее приводится 15 вариантов заданий. Каждый вариант состоит из 7 запросов, которые относятся к следующим категориям (в порядке их следования):

  1.  Выражения во фразе SELECT
  2.  Соединение таблиц
  3.  Многократное соединение одной и той же таблицы
  4.  Использование предиката BETWEEN
  5.  Использование предикатов IN и LIKE
  6.  Внешнее соединение, соединение не по предикату равенства
  7.  Использование сложных логических условий

ВНИМАНИЕ. В предлагаемых запросах используются константы (имена преподавателей, названия кафедр и факультетов, названия дисциплин), которые могут отсутствовать в вашей базе данных. ЗАМЕНЯЙТЕ ИХ НА ТЕ, КОТОРЫЕ ДЕЙСТВИТЕЛЬНО ИМЕЮТСЯ В ВАШЕЙ БАЗЕ ДАННЫХ!

 

  1.  Вариант 1

1) Для каждого из преподавателей из таблицы TEACHER выведите его имя, должность, ставку, надбавку, процент надбавки по отношению к ставке (имя этого столбца «Процент1») и процент ставки по отношению к надбавке (имя этого столбца «Процент1»).

2) По каждому факультету вывести его название и название дисциплин, читаемых преподавателями-профессорами этого факультета

3) Вывести подчиненных подчиненных Сидорова

4) Вывести названия кафедр факультета 'компьютерные науки' с фондом финансирования в диапазоне 250000-350000

5) Вывести имена преподавателей-профессоров, которые работают на факультетах, расположенных в корпусах 2,3,6,7,8,10

6)  Вывести названия кафедр и имена преподавателей, которые на них работают. Причем, если на какой-то кафедре нет преподавателей, то эта кафедра все равно выводится, а вместо имени преподавателя выводится строка 'NULL'

7) Вывести имена преподавателей факультета 'компьютерные науки' со ставкой больше 1200 ИЛИ преподавателей факультета 'компьютерные системы' со ставкой больше 1500

  1.  Вариант 2

1 Для каждого из преподавателей из таблицы TEACHER выведите его имя, ставку+надбавку,  процент ставки по отношению к ставке+надбавке (имя этого столбца «Результат1»), процент надбавки по отношению к ставке+надбавке (имя этого столбца «Результат2»)

2) Вывести названия факультетов и дисциплин, которые читаются на этих факультетах преподавателями-доцентами, являющимися кураторами студентов 1-го курса

3)  Вывести руководителя руководителя Иванова

4) Вывести имена преподавателей факультета 'компьютерные науки' с зарплатой (salary+commission) в диапазоне 1000-1500

5)  Вывести имена кафедр факультета 'компьютерные науки', на которых имеются группы с рейтингами 12, 17, 25, 29, 33, 43, 50

6)  Вывести названия кафедр, номера и курс групп этих кафедр. Если на какой-то кафедре нет групп, то эта кафедра все равно выводится, а вместо номера группы и курса выводятся цифры 0. Причем, столбцы результирующей таблицы имеют следующие имена:

Столбец имени кафедры – Кафедра

Столбец номера группы – Группа

Столбец курса - Курс

7) Вывести имена и должности преподавателей, которые НЕ удовлетворяют следующему условию:

преподаватель работает на факультете, расположенном  в корпусе 4, и имеет должность ассистента ИЛИ работает на факультете, расположенном в корпусе 6, и имеет должность доцента

  1.  Вариант 3

1) По каждому преподавателю выведите его имя и сумму hiredate + salary (столбец с именем «Дата»). Что получается в результате вычисления hiredate + salary?

2) По каждой дисциплине вывести ее название и названия факультетов, на которых читаются эти дисциплины на третьем курсе

3) Вывести названия кафедр, преподаватели которых преподают студентам кафедры ИПО

4) Вывести названия кафедр, на которых непосредственные подчиненные заведующих кафедр имеют зарплату (salary+commission) в диапазоне 2000-3000

5)  Вывести названия дисциплин, которые читаются преподавателями-профессорами кафедр, расположенных в корпусах 1, 4, 6, 7 , 9, 10

6) Вывести имена преподавателей и номера групп и курсов,  в которых они являются кураторами. Причем, если какой-то преподаватель не является куратором никакой группы, то его имя все равно выводится, а вместо номера группы и курса выводятся цифры 0.

       

7) Вывести номера групп и их курс факультета с фондом финансирования больше 20000 и рейтингом больше 10 ИЛИ группы факультета из корпуса 6 и с рейтингом меньше 70 ИЛИ группы факультета из корпуса 5 и с рейтингом больше 40

  1.  Вариант 4

1) По каждому преподавателю выведите его имя и разность между датой приема на работу и деления ставки на надбавку (столбец с именем «Выражение»). Что получается в результате вычисления hiredate - (Salary/Commission)?

2) По каждой кафедре вывести их названия и номера аудиторий, в которых их преподаватели читают лекции по понедельникам первой недели

3)  Вывести названия факультетов, преподаватели которых преподают студентам кафедры ИПО

4) Вывести названия кафедр факультета 'компьютерные науки', непосредственные подчиненные заведующих которых (кафедр)  приняты на работу в диапазоне 01.10.2001 – 31.12.2001

5)  Вывести названия факультетов, на которых имеются преподаватели, принятые на работу в одну из следующих дат: 01.02.2000, 01.03.2000, 01.04.2000. 01.05.2000, или имеющих ставку в диапазоне 500-800

6) Вывести пары имен факультетов, удовлетворяющих следующему условию: у первого факультета фонд финансирования превышает больше, чем на  1000, фонд финансирования второго.

7) Вывести номера групп и их рейтинги, которые НЕ удовлетворяют следующему условию:

они находятся на факультете 'компьютерные системы' и курс не равен 5 ИЛИ

они находятся на факультете с фондом финансировании в диапазоне 150000-300000 и имеют рейтинг больше 40 ИЛИ

они находятся на факультете с фондом финансирования больше 200000 и имеют рейтинг в диапазоне 20 50

  1.  Вариант 5

1) Выведите информацию о факультетах в следующем формате:

Факультет <название факультета> находится в корпусе  <номер корпуса> и имеет фонд финансирования <фонд финансирования>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о факультетах»

Б) Информация выводится в шести столбцах: первый столбец с именем «Константа1» содержит литерал ‘Факультет ’, второй столбец с именем «Факультет» содержит название факультета, третий столбец с именем «Константа2»  содержит литерал ‘находится в корпусе’, четвертый столбец с именем «Корпус» содержит номер корпуса, пятый столбец с именем «Константа3» содержит литерал ‘и имеет фонд финансирования ’, шестой столбец с именем «Финансирование» содержит фонд финансирования.

2) По каждой аудитории корпуса 6 вывести ее номер и названия кафедр, на которых проволятся занятия в этой аудитории студентам 1 курса.

3) Вывести названия кафедр, студентам которых преподают преподаватели кафедры ИПО

4) Вывести номера групп факультета 'компьютерные науки', кураторы которых (групп) были приняты на работу в одном из следующих діапазон дат: 01.06.2001 – 01.08.2001, 01.01.2002- 01.03.2002

5) Вывести имена непосредственных подчиненных заведующих кафедр ИПО, которые (заведующие кафедр) были приняты на работу в одну из следующих дат: 25.07.2001, 13.08, 2001, 01.12.2001

6) Вывести пары номеров групп, удовлетворяющих следующему условию: первая групп находится на более высоком курсе и ее рейтинг превышает больше, чем на 10, рейтинга второй группы

7) Вывести имена преподавателей и дату их приема на работу, удовлетворяющих следующему условию:

они являются кураторами групп 1 курса или групп с рейтингом больше 15 И

они имеют должность профессора или доцента И

у них зарплата (salary+commission) меньше 1000 или больше 2000.

  1.  Вариант 6

1) Выведите информацию о кафедрах в следующем формате:

Кафедра <название кафедры> с первичным ключом  <номер первичного ключа> имеет удвоенный фонд финансирования <фонд финансирования, умноженный на 2>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о кафедрах»

Б) Информация выводится в шести столбцах: первый столбец с именем «Константа1» содержит литерал ‘Кафедра ’, второй столбец с именем «Кафедра» содержит название кафедры, третий столбец с именем «Константа2»  содержит литерал ‘с первичным ключом’, четвертый столбец с именем «ПК» содержит номер первичного ключа, пятый столбец с именем «Константа3» содержит литерал ‘имеет удвоенный фонд финансирования’, шестой столбец с именем «Финансирование» содержит фонд финансирования, умноженный на 2

2) Вывести номера групп 3-го курса, которым проводят лабораторные работы преподаватели факультета компьютерных наук

3) Вывести названия факультетов, студентам которых преподают преподаватели кафедры ИПО

4) Вывести названия кафедр, в группах которых проводят занятия типа 'лекция' преподаватели, принятые на работу в диапазоне 01.01.2001 01.01.2002

5) Вывести названия кафедр факультета, деканом которого является Иванов, непосредственные подчиненные заведующих которых (кафедр) имеют одну из следующих ставок: 1000, 1500, 2000, 2500, 3000.

6) Вывести пары номеров групп вместе с их курсами, удовлетворяющих следующему условию: факультет первой группы имеет фонд финансирования  больше, чем на 2000, фонда факультет второй группы.

7) Вывести имена преподавателей и дату их приема на работу, которые НЕ удовлетворяют следующему условию:

они являются кураторами групп кафедры с фондом финансирования меньше 200000 или больше 300000 И

они являются кураторами групп с рейтингом больше 15 или групп курса 5 И

они имеют зарплату (salary+commission) между 1000-1200 или между 1300-1500

  1.  Вариант 7

1) Выведите информацию о преподавателях в следующем формате:

<должность преподавателя>  <имя преподавателя> был принят на работу  <дата приема на работу> и имеет зарплату <сумма ставки и надбавки>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о преподавателях»

Б) Информация выводится в шести столбцах: первый столбец с именем «Должность» содержит должность преподавателя, второй столбец с именем «Преподаватель» содержит имя преподавателя, третий столбец с именем «Константа1»  содержит литерал ‘был принят на работу’, четвертый столбец с именем «Дата» содержит дату приема на работу, пятый столбец с именем «Константа2» содержит литерал ‘и имеет зарплату’, шестой столбец с именем «Зарплата» содержит сумму ставки и надбавки.

2) Вывести имена преподавателей-доцентов, которые читают лекции студентам факультета компьютерных наук

3) Вывести названия факультетов, группы которых имеют кураторов из факультета 'компьютерные науки'

4) Вывести названия факультетов, преподаваетели-профессора которых имеют занятия  на парах в диапазоне 2-6

5) Вывести имена преподавателей-профессоров, которые проводят занятия типа 'лекция' в одной из следующих аудиторий корпуса 6: 309, 311, 313, 315, 327

6) Вывести пары номеров групп, удовлетворяющих следующим условиям: декан факультета первой группы зарабатывавет (salary+commission) болше, чем декан факультета второй группы

7)  Вывести имена преподавателей и дату их приема на работу, удовлетворяющих следующему условию:

их  зарплата (salary+commission) больше 1000 или они были приняты на работу после 01.01.2001 И

заведующие их кафедр имеют зарплату (salary+commission) больше 3000 или меньше 2500 И

деканы их факультетов  являются профессорами или доцентами.

  1.  Вариант 8

1) Выведите информацию об аудиториях в следующем формате:

Аудитория <номер аудитории> находится на <номер этажа> этаже корпуса <номер корпуса> и имеет <количество мест> мест

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация об аудиториях»

Б) Информация выводится в следующих девяти столбцах:

- первый столбец с именем «Литерал1» содержит константу ‘Аудитория’

- второй  столбец с именем «Аудитория» содержит номер аудитории

- третий столбец с именем «Литерал2» содержит константу ‘находится на’

- четвертый столбец с именем «Этаж»  содержит номер этажа

- пятый столбец  с именем «Литерал3» содержит константу ‘этаже корпуса’

- шестой столбец с именем «Корпус»  содержит номер корпуса

- седьмой столбец  с именем «Литерал4» содержит константу ‘и имеет’

- восьмой столбец с именем «К-во мест»  содержит количество мест

- девятый столбец  с именем «Литерал5» содержит константу ‘мест’

2) Вывести расписание занятий преподавателей, которое содержит:

- имя преподавателя     - Преподаватель

- название дисциплины    - Предмет

- номер аудитории     - АУД

- корпус, в котором располагается аудитория - КП

- номер группы и ее курс    - ГРП   и  КРС

- неделя      - Неделя

- день недели      - ДН

- пара       - Пара

- тип занятия      - Тип

Укажите имена столбцов результирующей таблицы так, как это указано в правой части приведенного выше списка

3) Вывести названия факультетов, преподаватели которых являются кураторами групп факультета 'компьютерные науки'

4) Вывести номера групп факультета 'компьютерные науки' с количеством студентов в диапазоне 27-32 или с рейтингом в диапазоне 25-45

5) Вывести номера аудиторий и их корпуса, в которых преподаватели-ассистенты проводят занятия типа 'лабораторная' в один из следующих дней: понедельник, середа, четверг, суббота.

6)  Вывести пары имен преподавателей, удовлетворяющих следующим условиям:

- первый преподаватель профессор

- второй преподаватель доцент

- первый преподаватель зарабатывает (salary+commission) больше, чем на 50, второго

7)   Вывести имена преподавателей и дату их приема на работу, НЕ удовлетворяющих следующему условию:

они были приняты на работу в диапазоне 01.01.2000 – 31.12.2005 или они являются доцентами или ассистентами И

деканы их факультетов  получают зарплату (salary+commission) либо между 1200-1500 либо между 1700-2000 И

они являются кураторами групп с рейтингом либо меньше 40 либо больше 60.

  1.  Вариант 9

1) Выведите информацию о лекциях в следующем формате:

На <неделя> неделе в <название дня недели> на <номер пары> проводится <тип занятия>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о лекциях»

Б) Информация выводится в следующих восьми столбцах:

- первый столбец с именем «Литерал1» содержит константу ‘На’

- второй столбец с именем «Неделя» содержит номер недели

- третий столбец с именем «Литерал2» содержит константу ‘неделе в’

- четвертый столбец с именем «День»  содержит название дня недели

- пятый столбец  с именем «Литерал3» содержит константу ‘на’

- шестой столбец с именем «Пара»  содержит порядковый номер пары

- седьмой столбец  с именем «Литерал4» содержит константу ‘паре проводится’

- восьмой столбец с именем «Тип»  содержит тип занятия.

2) Вывести загруженность занятиями аудитории 313 корпуса 6. Вывод содержит:

- неделя   - Неделя

- день недели   - ДН

- пара    - Пара

- тип занятия   - Тип

- номер группы и ее курс - ГРП   и  КРС

- имя преподавателя  - Преподаватель

Укажите имена столбцов результирующей таблицы так, как это указано в правой части приведенного выше списка

3) Вывести имена преподавателей кафедры, заведующим которой является Сидоров

4) Вывести имена преподавателей, являющихся кураторами групп кафедры ИПО, с зарплатой (salary+commission) в диапазоне 900-1700

5) Вывести имена преподавателей-профессоров, которые проводят занятия типа 'лекция' по дисциплинам, отличающимся от следующих: программирование,  С, PASCAL, ИПО.

6) Вывести пары имен преподавателей,  удовлетворяющих следующему условию: первый преподаватель является куратором группы, имеющей рейтинг больше, чем в два раза, рейтинга группы, куратором которой является второй преподаватель

7) Вывести имена преподавателей и их зарплату (salary+commission), которые удовлетворяют следующему условию:

дата их приема на работу находится в диапазоне 02.03.1999–31.12.2007 или они являются профессорами И

их непосредственный руководитель имеет зарплату (salary+commission) в диапазоне 1200-1500 или он был принят на работу после 01.12.1998 И

их непосредственный подчиненный является ассистентом или преподаватель или доцент

  1.  Вариант 10

1) Выведите информацию о дисциплинах в следующем формате:

Название дисциплины в БД: <название дисциплины > Название дисциплины прописними буквами: <название дисциплины прописними буквами > Название дисциплины строчными буквами: <название дисциплины строчными буквами>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о дисциплинах»

Б) Информация выводится в следующих шести столбцах:

- первый столбец с именем «Константа1» содержит константу ’Название дисциплины в БД:’

- второй столбец с именем «Дисциплина1» содержит название дисциплины в БД

- третий столбец с именем «Константа2» содержит константу ’Название дисциплины прописными буквами:’

- четвертый столбец с именем «Дисциплина2» содержит Название дисциплины в БД прописными буквами

- пятый столбец с именем «Константа3» содержит константу ’Название дисциплины строчными буквами: ’

- шестой столбец с именем «Дисциплина3» содержит Название дисциплины в БД строчными буквами

2) Вывести названия дисциплин и номера аудиторий с их номерами корпусов, которые (дисциплины) читаются преподавателями-профессорами факультета 'компьютерные науки' студентам 1 курса

3) Вывести заведующего кафедрой, в которой работает преподаватель Резниченко

4) Вывести номера групп факультета 'компьютерные науки', кураторы которых имеют зарплату (salary+commission) в диапазоне 900-1700

5)  Вывести названия факультетов, на которых читаются дисциплины, отличающиеся от следующих: охрана труда, техника безопасности, физическая культура,

6) Вывести пары имен преподавателей, удовлетворяющих следующему условию: первый преподаватель преподает группе на курсе выше, чем курс группы, которой преподает второй преподаватель.

7)  Вывести имена преподавателей и дату поступления их на работу, которые НЕ удовлетворяют следующему условию:

их ставка (salary) больше 2000 или их надбавка (commission) больше одной четвертой части ставки И

их непосредственный руководитель был принят на работу либо в диапазоне дат 01.01.1995-31.12.1996 либо в диапазоне дат 01.01.1998-07.08.1999 И

их непосредственный подчиненный либо является ассистентом либо имеет зарплату (salary+commission) в диапазоне 2000-3000

  1.  Вариант 11

1) Вывести информацию о группах в следующем формате:

Группа <номер группы> курса <номер курса> с количеством студентов <количество студентов в группе> имеет рейтинг <рейтинг группы>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Сведения о группах»

Б) Информация выводится в следующих восьми столбцах:

- первый столбец с именем «Константа1» содержит константу ’Группа:’

- второй столбец с именем «Группа» содержит номер группы

- третий столбец с именем «Константа2» содержит константу ’курса’

- четвертый столбец с именем «Курс» содержит номер курса

- пятый столбец с именем «Константа3» содержит константу ’ с количеством студентов’

- шестой столбец с именем «К-во студентов» содержит количество студентов в группе

- седьмой столбец с именем «Константа4» содержит константу ’имеет рейтинг’

- восьмой столбец с именем «Рейтинг» содержит рейтинг группы

2) Вывести номера аудиторий с именами преподавателей, в которых (аудиториях) проводятся лабораторные занятия для студентов факультета 'компьютерные науки'

3) Вывести имена преподавателей факультета, деканом которого является Сидоров

4) Вывести названия факультетов, на которых работают преподаватели профессора с зарплатой (salary+commission) в диапазоне 1000-1500

5)  Вывести имена преподавателей-профессоров, которые читают лекции по дисциплине СУБД и которые работают на факультете, в названии которого имеется  подстрока 'ые на'

6) Вывести пары номеров аудиторий, удовлетворяющих следующим условиям:

- первая находится на третьем этаже

- вторая находится на втором этаже

- первая имеет количество мест больше, чем на 20, количества мест второй группы

7) Вывести названия дисциплин, которые удовлетворяют следующему условию:

дисциплина читается профессорами или доцентами или ассистентами И

дисциплина читается на 3 или 4 курсе И

дисциплина читается в понедельник или вторник или четверг

  1.  Вариант 12

1) Вывести информацию о группах в следующем формате

На курсе <номер курса> имеется группа <номер группы>  у которой рейтинг <рейтинг>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о группах»

Б) Информация выводится в следующих шести столбцах

- первый столбец с именем «Константа1» содержит константу ’На курсе’

- второй столбец с именем «Курс» содержит номер курса

- третий столбец с именем «Константа2» содержит константу ’имеется группа’

- четвертый столбец с именем «Группа» содержит номер группы

- пятый столбец с именем «Константа3» содержит константу ’у которой рейтинг’

- шестой столбец с именем «Рейтинг» содержит рейтинг группы

2) Вывести номера групп, номера аудиторий с корпусами и названия преподавателей кафедры ИПО, которые (преподаватели) читают этим группам лекции по дисциплине 'базы данных'.

3) Вывести декана факультета, в котором работает преподаватель Резниченко

4) Вывести названия кафедр факультета 'компьютерные науки', на которых работают преподаватели-доценты с зарплатой (salary+commission) в диапазоне 1000-1500

5) Вывести названия кафедр, преподаватели которых являются кураторами групп кафедр, в названии которых имеется буква 'п'

6) Вывести пары названий кафедр, удовлетворяющих следующему условию: фонд финансирования факультета первой кафедры больше, чем на 10000, фонда финансирования факультета второй кафедры

7) Вывести названия дисциплин, которые НЕ удовлетворяют следующему условию:

дисциплина читается преподавателями кафедры 'ИПО' или кафедры 'программирование' И

дисциплина читается в аудитории 313 корпуса 6 или в аудитории 202 корпуса 5 И

дисциплина читается в понедельник первой недели или вторник второй недели

  1.  Вариант 13

1) Выведите информацию о преподавателях в следующем формате:

Принятый на работу <дата приема на работу> <должность преподавателя>  <имя преподавателя>, имеет ставку <ставка> и надбавку <надбавка> Его телефон <номер телефона >

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация о преподавателях»

Б) Информация выводится в следующих шести столбцах:

- первый столбец с именем «Константа1» содержит константу ‘Принятый на работу’

- второй столбец с именем «Дата» содержит дату приема на работу

- третий столбец с именем «Должность» содержит должность преподавателя,

- четвертый столбец с именем «Преподаватель» содержит имя преподавателя,

- пятый столбец с именем «Констатна2» содержит константу ‘имеет ставку’

- шестой столбец с именем «Ставка» содержит ставку преподавателя

- седьмой  столбец с именем «Констатна3» содержит константу ‘и надбавку’

- восьмой столбец с именем «Надбавка» содержит надбавку преподавателя

- девятый  столбец с именем «Констатна4» содержит константу ‘Его телефон’

- десятый столбец с именем «Телефон» содержит номер телефона преподавателя

2) Вывести имена преподавателей-доцентов и названия дисциплин, которые они преподают студентам 3-го курса факультета 'компьютерные науки'

3) Вывести имена преподавателей, преподающие группе, у которой куратором является преподаватель Иванов.

4) Вывести имена преподавателей кафедры ИПО, являющихся кураторами групп с рейтингом в диапазоне 20-30

5) Вывести имена деканов факультетов, имена заведующих кафедр которых не содержат подстроки 'петр'.

6) Вывести пары названий кафедр, удовлетворяющих следующему условию: первая кафедра находится на  факультете с фондом финансирования большим, чем  на 10000, фонда финансирования факультета второй кафедры

7) Вывести номера аудиторий и их корпуса, которые удовлетворяют следующему условию:

они имеют вместимость в диапазоне 20-30 или в диапазоне 50-70 И

в них проводятся занятия в группах факультета 'компьютерные науки' или 'компьютерные системы' И

в них проводят занятия преподаватели доценты или ассистенты

  1.  Вариант 14

1)  Выведите информацию о преподавателях в следующем формате:

<дата приема на работу>  был принят на работу  <имя преподавателя> на должность <должность преподавателя>  и с зарплатой <зарплата (salary+commission) преподавателя>

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Сведенияо преподавателях»

Б) Информация выводится в следующих шести столбцах:

- первый столбец с именем «Дата» содержит дату приема на работу

- второй столбец с именем «Констатна1 содержит константу ‘был принят на работу‘

- третий столбец с именем «Преподаватель» содержит имя преподавателя

- четвертый столбец с именем «Констатна2» содержит константу ‘на должность’

- пятый столбец с именем «Должность» содержит должность преподавателя,

- шестой  столбец с именем «Констатна3» содержит константу ‘и с зарплатой’

- восьмой столбец с именем «Зарплата» содержит зараплату (salary+commission) преподавателя

2) Вывести имена преподавателей-доцентов факультета 'компьютерные науки', читающих лекции по дисциплине 'базы данных', которые являются кураторами групп 3-го курса.

3) Вывести имена преподавателей, являющихся кураторами групп, которым преподает преподаватель Иванов

4)  Вывести номера групп и имена преподавателей, которые (преподаватели) проводят занятия в этих группах в аудиториях, расположенных в диапазоне этажей 3-10 в корпусе 6

5) Вывести названия кафедр, группам которых на 3 курсе читают дисциплины, в названии которых отсутствует подстрока 'ого_обесп'

6) Вывести пары названий кафедр, удовлетворяющих следующему условию: декан факультета первой кафедры имеет зарплату (salary+commission) большим, чем на 500, декана факультета второй кафедры

7) Вывести номера аудиторий и их корпуса, которые НЕ удовлетворяют следующему условию:

они находятся на любом из этих этажей: ’1’,  ’3’, ’4’, ’5’, ’7’, ’9’, ’10’ И

в них проводят занятия преподаватели из кафедр 'ИПО' или 'программирование' И

в них проводят занятия для студентов кафедр 'ИПО' или 'проектирование систем'

  1.  Вариант 15

1)  По каждому преподавателю выведите его имя и процент отношения разности между ставкой и надбавкой и суммы ставки с надбавкой

2) Вывести номера групп и их курсов кафедры ИПО, которые имеют кураторов-профессоров, читающих лекции в аудиториях корпуса 6

3) Вывести номера групп, которым преподает преподаватель, являющийся куратором группы 304 3-го курса

4) Вывести имена преподавателей, которые проводят занятия в группах с количеством студентов в диапазоне 15-35 и в аудиториях с количеством мест в диапазоне 25-50

5) Вывести названия кафедр, группам которых на 3 курсе читают дисциплины, в названии которых имеется следующая подстрока: между буквами 'с'и 'д' имеются две любих других буквы.

6) Вывести пары названий кафедр, удовлетворяющих следующему условию: куратор группы первой кафедры имеет зарплату (salary+commission) меньшим, чем  300, зарплаты куратора группы второй кафедры

7 Вывести имена преподавателей и названия читаемых ими дисциплин, которые удовлетворяют следующему условию:

преподаватель принят на работу в диапазоне 01.01.1996-31.12.1998 или 01.01.2000-07-08-2005 И

дисциплины читаются в аудитории 309 корпуса 6 или в аудитории 202 корпуса 5  И

занятия по этим дисциплинам проводятся в понедельник первой недели  или четверг второй недели И

эти дисциплины читаются группам кафедр, расположенных в корпусах 5, 6 или 7

  1.  Вариант 16

1) Для каждого из преподавателей из таблицы TEACHER выведите его имя, должность, ставку, надбавку, процент надбавки по отношению к ставке (имя этого столбца «Процент1») и процент ставки по отношению к надбавке (имя этого столбца «Процент1»).

2) Вывести названия факультетов и дисциплин, которые читаются на этих факультетах преподавателями-доцентами, являющимися кураторами студентов 1-го курса

3) Вывести названия кафедр, преподаватели которых преподают студентам кафедры ИПО

4) Вывести названия кафедр факультета 'компьютерные науки', непосредственные подчиненные заведующих которых (кафедр)  приняты на работу в диапазоне 01.10.2001 – 31.12.2001

5) Вывести имена непосредственных подчиненных заведующих кафедр ИПО, которые (заведующие кафедр) были приняты на работу в одну из следующих дат: 25.07.2001, 13.08, 2001, 01.12.2001

6) Вывести пары номеров групп вместе с их курсами, удовлетворяющих следующему условию: факультет первой группы имеет фонд финансирования  больше, чем на 2000, фонда факультет второй группы.

7)  Вывести имена преподавателей и дату их приема на работу, удовлетворяющих следующему условию:

их  зарплата (salary+commission) больше 1000 или они были приняты на работу после 01.01.2001 И

заведующие их кафедр имеют зарплату (salary+commission) больше 3000 или меньше 2500 И

деканы их факультетов  являются профессорами или доцентами.

  1.  Вариант 17

1) Выведите информацию об аудиториях в следующем формате:

Аудитория <номер аудитории> находится на <номер этажа> этаже корпуса <номер корпуса> и имеет <количество мест> мест

Используйте для этого два варианта:

А) Информация выводится в одном столбце с названием «Информация об аудиториях»

Б) Информация выводится в следующих девяти столбцах:

- первый столбец с именем «Литерал1» содержит константу ‘Аудитория’

- второй  столбец с именем «Аудитория» содержит номер аудитории

- третий столбец с именем «Литерал2» содержит константу ‘находится на’

- четвертый столбец с именем «Этаж»  содержит номер этажа

- пятый столбец  с именем «Литерал3» содержит константу ‘этаже корпуса’

- шестой столбец с именем «Корпус»  содержит номер корпуса

- седьмой столбец  с именем «Литерал4» содержит константу ‘и имеет’

- восьмой столбец с именем «К-во мест»  содержит количество мест

- девятый столбец  с именем «Литерал5» содержит константу ‘мест’

2) Вывести загруженность занятиями аудитории 313 корпуса 6. Вывод содержит:

- неделя   - Неделя

- день недели   - ДН

- пара    - Пара

- тип занятия   - Тип

- номер группы и ее курс - ГРП   и  КРС

- имя преподавателя  - Преподаватель

Укажите имена столбцов результирующей таблицы так, как это указано в правой части приведенного выше списка

3) Вывести заведующего кафедрой, в которой работает преподаватель Резниченко

4) Вывести названия факультетов, на которых работают преподаватели профессора с зарплатой (salary+commission) в диапазоне 1000-1500

5) Вывести названия кафедр, преподаватели которых являются кураторами групп кафедр, в названии которых имеется буква 'п'

6) Вывести пары названий кафедр, удовлетворяющих следующему условию: первая кафедра находится на  факультете с фондом финансирования большим, чем  на 10000, фонда финансирования факультета второй кафедры

7) Вывести номера аудиторий и их корпуса, которые НЕ удовлетворяют следующему условию:

они находятся на любом из этих этажей: ’1’,  ’3’, ’4’, ’5’, ’7’, ’9’, ’10’ И

в них проводят занятия преподаватели из кафедр 'ИПО' или 'программирование' И

в них проводят занятия для студентов кафедр 'ИПО' или 'проектирование систем'

  1.  Вариант 18

1) По каждому преподавателю выведите его имя и разность между датой приема на работу и деления ставки на надбавку (столбец с именем «Выражение»). Что получается в результате вычисления hiredate - (Salary/Commission)?

2) По каждой аудитории корпуса 6 вывести ее номер и названия кафедр, на которых проволятся занятия в этой аудитории студентам 1 курса.

3) Вывести названия факультетов, студентам которых преподают преподаватели кафедры ИПО

4) Вывести названия факультетов, преподаваетели-профессора которых имеют занятия  на парах в диапазоне 2-6

5) Вывести номера аудиторий и их корпуса, в которых преподаватели-ассистенты проводят занятия типа 'лабораторная' в один из следующих дней: понедельник, середа, четверг, суббота.

6) Вывести пары имен преподавателей,  удовлетворяющих следующему условию: первый преподаватель является куратором группы, имеющей рейтинг больше, чем в два раза, рейтинга группы, куратором которой является второй преподаватель

7)  Вывести имена преподавателей и дату поступления их на работу, которые НЕ удовлетворяют следующему условию:

их ставка (salary) больше 2000 или их надбавка (commission) больше одной четвертой части ставки И

их непосредственный руководитель был принят на работу либо в диапазоне дат 01.01.1995-31.12.1996 либо в диапазоне дат 01.01.1998-07.08.1999 И

их непосредственный подчиненный либо является ассистентом либо имеет зарплату (salary+commission) в диапазоне 2000-3000

  1.  Контрольные вопросы

Ответьте на следующие вопросы:

1) Как можно специфицировать вывод всех столбцов таблицы?

2) Зачем необходимо квалифицировать имена столбцов? Как это делается?

3) Содержит ли результат запроса повторяющиеся строки? Как можно удалить повторяющиеся строки?

  1.  Что собой преставляет значение выражения, содержащего значение null?
  2.  Зачем необходимо квалифицировать имена столбцов во фразе FROM? Как это делается?
  3.  Следующие предложения ошибочные. Почему?

 a) Select *

 b) Select * from teacher

 c) select name post salary FROM teacher;

  1.  Что выводит следующий запрос:

 SELECT *

 FROM  TEACHER

 WHERE  Salary < 300 OR

     NOT(Hiredate = TO_DATE('17.06.2002', 'dd.mm.yyyy') AND

     UPPER(Post) != 'professor');

  1.  Как можно соединить две или более таблицы.
  2.  Что такое внешнее соединение? Сформулируйте и запишите запрос с внешним соединением.
  3.  Что собой представляет таблица DUAL?
  4.  Представьте истинностную таблицу для логических операторов NOT, AND, OR.
  5.  Приложения 
    1.  Приложение A. Операторы SQL Oracle

Оператор оперирует индивидными элементами данных и возвращает результат. Элементы данных в операторе называются операндами или аргументами. Операторы представляются специальными символами или ключевыми словами. Например, оператор умножения представляется символом звездочка (*), а оператор проверки на значение nulls представляется ключевым словом IS NULL.

  1.  Унарные и бинарные операторы

The two general classes of operators are:

унарные

Унарный оператор имеет один операнд. Обычно унарные операторы имеет следующий формат: operator operand.

binary

Бинарный оператор имеет два операнда и имеет следующий формат: operand1 operator operand2.

Имеются также специальные операторы с более чем два операнда

. Если оператор имеет операнд со значением null, то значение оператора равно всегда null. Единственным оператором, на который не распространяется это условие является оператор конкатенации строк (||).

  1.  Старшинство операторов 

Старшинство – это порядок, в котором SQL Oracle вычисляет операторы в одном выражении. При вычислении выражения со многими операторами Oracle вычисляет сначала операторы с более высоким старшинством, а затем с более низким. SQL Oracle вычисляет операторы с одинаковым старшинством слева направо в пределах выражения.

В таблице ниже приведено старшинство операторов, в порядке их убывания. Операторы, перечисленные в одной строке имеют одинаковое старшинство.

Оператор

Операция

+, -  

унарные плюс и минус  

*, /  

умножение, деление 

+, -, ||  

сложение, вычитание, конкатенация

=, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN

сравнение

NOT  

логическое отрицание  

AND  

конъюнкция 

OR  

дизъюнкция  

Можно использовать круглые скобки для задания порядка вычисления выражения

. Oracle вычисляет сначала выражение внутри круглых скобок.

SQL Oracle также поддерживает теоретико-множественные операторы (UNION, UNION ALL, INTERSECT, и MINUS), которые оперируют множествами строк, возвращаемыми запросами, а не отдельными элементами данных. Эти операторы имеют одинаковое старшинство.

  1.  Арифметические операторы 

Они оперируют числами и возвращают число в качестве своего результата. Некоторые из этих операторов используются для оперирования датами. Ниже приводится список этих операторов.

Оператор

Назначение

Пример

+, -  

Обозначает положительное или отрицательное выражение. Это унарные операторы.

SELECT * FROM orders  SELECT * FROM TEACHER

WHERE qtysold = -1;  WHERE -Salary < 0;

*, /  

Бинарные: умножение и деление.

UPDATE TEACHER SET Salary = Salary * 1.1;

+, -  

Бинарные: сложение и вычитание

SELECT Salary + Commission FROM TEACHER

WHERE SYSDATE - Hiredate > 365;

НЕ используйте два последовательных символа минус

(--) в арифметических выражениях для указания двойного вычитания или вычитания из отрицательного значения. Символы -- используются для указания комментариев в предложениях SQL (См. Приложение C). В этом случае вы должны разделить два последовательных знака минус пробелами или круглыми скобками .

  1.  Оператор конкатенации

Оператор конкатенации манипулирует строками символов.

Оператор

Назначение

Пример

||  

Конкатенирует две строки символов.

SELECT 'Name is ' || Name FROM FACULTY; 

В результате конкатенации получается другая строка символов

. Если обе строки символов типа CHAR, то результат тоже имеет тип CHAR и ограничен 2000 символами. Если хотя бы одна строка типа VARCHAR2, то результат имеет тип VARCHAR2 и ограничен 4000 символами. Пробелы в конце строк сохраняются не зависимо от их типа .

Oracle предоставляет также функцию CONCAT в качестве альтернативы оператора конкатенации.

Oracle трактует строку символов нулевой длины как null, конкатенация строки нулевой длины с другой строкой всегда дает вторую строку в качестве результата. NULL в результате конкатенации получается в том случае, когда обе строки имеют нулевую длину. Однако этот принцип может быть изменен в последующих версиях Oracle. Используйте функцию NVL для явного преобразования строк нулевой длины.

  1.  Операторы сравнения 

Операторы сравнения сравнивают одно выражение с другим. Результатом сравнения может быть TRUE, FALSE или UNKNOWN. Для получения дополнительной информации относительно условий см. Приложение А лабораторной работы 2. Далее в таблице приводятся операторы сравнения SQL.

Оператор

Назначение

Пример

=

Проверка на равенство

SELECT * FROM DEPARTMENT

WHERE  Fund = 15000;

!=, ^=, <>, ¬=

Проверка на неравенство.

SELECT * FROM DEPARTMENT

WHERE  Fund != 15000;

>,
<

Проверка на "больше" и "меньше"

SELECT * FROM FACULTY SELECT * FROM FACULTY

WHERE  Fund > 1500;  WHERE  Fund < 1500;

>=,
<=

Проверка на "больше или равно" и "меньше или равно"

SELECT  * FROM FACULTY SELECT * FROM FACULTY

WHERE  Fund >= 1500; WHERE Fund <= 1500;

IN

Проверка на "вхождение элемента во множество ". Эквивалентно "= ANY"

SELECT Name, Post
FROM
 TEACHER
WHERE  UPPER(
Post) IN

 ('PROFESSOR', 'ASSISTANT');

NOT IN

Эквивалентно !=ALL. Дает FALSE хотя бы один элемент множества равен NULL

SELECT * FROM FACULTY

WHERE  Fund NOT IN

  (SELECT Fund FROM FACULTY
    
WHERE Building IN ('3','5')};

ANY,
SOME

Сравнивает значение с каждым значение в списке или возвращаемым запросом. Им должен предшествовать один из символов =, !=, >, <, <=, >=.  Дает FALSE , если запрос не возвращает строк.

SELECT * FROM TEACHER

WHERE  Salary = ANY

   (SELECT Salary FROM TEACHER

    WHERE UPPER(Post) = 'PROFESSOR');

ALL

Сравнивает значение с каждым значение в списке или возвращаемым запросом. Ему должен предшествовать один из символов =, !=, >, <, <=, >=.  Дает TRUE, если запрос не возвращает строк.

SELECT * FROM TEACHER

WHERE  Salary >= ALL (350, 400, 420);

[NOT] BETWEEN x AND y

[НЕ] больше или равно x и меньше или равно y.

SELECT * FROM TEACHER

WHERE  Salary BETWEEN 350 AND 420;

EXISTS

TRUE, если подзапрос возвращает хотя бы одну строку. Это унарный оператор.

SELECT Name FROM TEACHER

WHERE   EXISTS

(SELECT * FROM LECTURE

 WHERE LECTURE.TchNo=TEACHER. TchNo);

x [NOT] LIKE y [ESCAPE ‘z’]

TRUE, если x [не] соответствут шаблону y. В шаблоне y, символ "%" соответствует произвольной строке ноль или более символов за исключением. Символ "_" соответствует одному произвольному символу. Если символу (%) или (_) предшествует escape-символ, то он воспринимается буквально.

SELECT Name FROM TEACHER

WHERE  UPPER(Name) LIKE 'ИВ%';

IS [NOT] NULL

Проверка на null. Это единственный оператор, который делает проверку на null.

SELECT Name, Tel

FROM   TEACHER

WHERE  Commission IS NULL;

  1.  Логические операторы 

Логический оператор выдает логическое значение на основании логических значений его операнодов. Далее приводится таблица логических операторов.

Оператор

Назначение

Пример

NOT

Унарный оператор. Возвращает TRUE, если условие равно FALSE. Возвращает FALSE , если условие TRUE. Если условие UNKNOWN, то возвращает UNKNOWN.

SELECT * FROM TEACHER

WHERE NOT (Salary BETWEEN 450 AND 500);

AND

Бинарный оператор. Возвращает TRUE, если оба операнда TRUE. Возвращает FALSE, если хотя бы один операнд FALSE. В противном случае возвращает UNKNOWN.

SELECT * FROM   TEACHER

WHERE  Hiredate < TO_DATE('01-JAN-2000', 'DD-MMM-YYYY')
AND Salary > 500;

OR

Бинарный оператор. Возвращает TRUE, если хотя бы один из операндов TRUE. Возвращает FALSE, если оба операнда FALSE. В противном случае возвращает UNKNOWN.

SELECT *

FROM   TEACHER

WHERE  UPPER(Post)='ASSISTANT' AND

 Salary > 500;

Логические операторы имеют следующую истинностную таблицу:

AND

TRUE

FALSE

UNKNOWN

OR

TRUE

FALSE

UNKNOWN

NOT

TRUE

TRUE

FALSE

UNKNOWN

TRUE

TRUE

TRUE

UNKNOWN

TRUE

FALSE

FALSE

FALSE

FALSE

UNKNOWN

FALSE

TRUE

FALSE

UNKNOWN

FALSE

TRUE

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

  1.  Теоретико-множественные операторы 

Теоретико-множественные операторы (или просто операторы над множествами) объединяют результаты двух запросов в единый результат. Запросы, составляющие операнды операторов, называются составными запросами. В таблице ниже приводятся эти операторы.

Оператор

Назначение

Пример

UNION

Возвращает все строки из обоих операнодов. Дубликаты строк удаляются.

SELECT Building FROM DEPARTMENT

UNION

SELECT Building FROM FACULTY;

UNION ALL

Возвращает все строки из обоих операнодов. Дубликаты строк не удаляются.

SELECT Building FROM DEPARTMENT

UNION ALL

SELECT Building FROM ROOM;

INTERSECT

Возвращает строки, принадлежащие обоим.

SELECT Building FROM FACULTY

INTERSECT

SELECT Building FROM ROOM;

MINUS

Возвращает все различные строки первого операнда, не принадлежащие второму операнду.

SELECT Building FROM ROOM

MINUS

SELECT Building FROM FACULTY;

Все операторы имеют одинаковое старшинство

. Если имеется несколько подряд следующих операторов этого класса, то огни вычисляются слева направо.

Соответствующие списки фраз SELECT запросов должны иметь одинаковое количество элементов и типы данных. Если составляющие запросы выбирают данные строкового типа, то возвращаемое значение устанавливается следующим образом:

  •  Если оба запроса имеют во фразе select значения типа CHAR, то в результате значение будет иметь тип CHAR.
  •  Если один из запросов во фразе select имеет значения типа VARCHAR2, то в результате значение будет иметь тип VARCHAR2.
    1.  Приложение B. Выражения 

Выражение – это комбинация одного или более значений, операторов и SQL-функций, которое принимает некоторое значение. Выражение в общем случае имеет тип значения, совпадающее с его компонентами.

Выражение “2*2” дает в результате 4 и имеет тип NUMBER (тот же, что и его компоненты).

Следующее выражение является более сложным и использует как функции, так и операторы. Это выражение добавляет 7 дней к текущей дате, удаляет из даты компоненту времени и преобразует результат в тип CHAR:

TO_CHAR(TRUNC(SYSDATE+7))

Выражения можно использовать:

  •  В списке фразы SELECT предложения SELECT 
  •  В условии фразы WHERE и фразы HAVING 
  •  Во фразах CONNECT BY и ORDER BY 
  •  Во фразе VALUES предложения INSERT 
  •  Во фразе SET предложения UPDATE 

Например, вы можете использовать выражение вместо строки 'smith' во фразе SET предложения UPDATE, которое приведено ниже:

SET ename = 'smith';

Так следующаф фраза SET содержит выражение LOWER(ename) вместо 'smith':

SET ename = LOWER(ename);

Выражения имеют несколько форм, которые приведены ниже:

expr::= 


Oracle не допускает использования всех возможных форм выражений во всех допустимых частях всех SQL-предложений. Если в синтаксисе описания того или предложения присутствует фраза expr, то вы можете использовать только выражения подходящего вида.

  1.  Простые выражения 

Просые выражения специфицируют столбец, константу или NULL.

simple_expression::= 

Примеры простых выражений:

emp.ename

'this is a text string'

10

  1.  Составные выражения 

Составные выражения специфицируют комбинацию других выражений.

compound_expression::= 


Отметим, что некоторые комбинации функций не допустимы и будут отвергнуты. Например, функция LENGTH не может использоваться в агрегатных функциях.

Примеры составных выражений:

('CLARK' || 'SMITH')

LENGTH('MOOSE') * 57

SQRT(144) + 72

my_fun(TO_CHAR(sysdate,'DD-MMM-YY')

  1.  Выражения переменных 

Этот тип выражений не обсуждается здесь.

  1.  Выражения встроенных функций 

Выражение встроенной функции специфицирует обращение к SQL-функции, действующей над строками.

built_in_function_expression::= 


Примеры выражений встроенных функций:

LENGTH('BLAKE')

ROUND(1234.567*43)

SYSDATE

Для получения информации о встроенных функциях см. Приложение лабораторной работы 5.

  1.  Выражения функций, определенных пользователями 

Выражения функций, определенных пользователями  специфицирует обращение к функции, определенной пользователем. Синтаксис таких функций не обсуждается здесь.

  1.  Выражения конструктора типа 

Выражения конструктора типа  специфицирует обращение к конструктору типа. The Аргумент to конструктора типа является выражением или подзапросом.  Синтаксис этого выражения не обсуждается здесь.

  1.  CAST Expressions 

Выражение CAST преобразует один встроенный тип или значение типа коллекции в другой встроенный тип или значение типа коллекции. Синтаксис не обсуждается здесь.

SELECT * FROM t1 WHERE CAST (ROWID AS VARCHAR2) = '01234';

  1.  CURSOR Expressions

Выражение CURSOR возвращает вложенный курсор. Синтаксис не обсуждается здесь.

  1.  Выражение доступа к объекту 

Этот тип выражения не обсуждается здесь.

  1.  Выражения DECODE 

Этот тип выражения не обсуждается здесь.

  1.  Список выражений 

Список віражений – єто список последовательности віражений, разделенніх запятой. Весь список заключается в круглые скобки.

expression_list::= 

Ограничение на размер списка - 1000 выражений. Примеры списков выражений:

(10, 20, 40)

('SCOTT', 'BLAKE', 'TAYLOR')

(LENGTH('MOOSE') * 57, -SQRT(144) + 72, 69)

  1.  Приложение C. Комментарии в SQL

Комментарии в SQL не влияют на выполнение предложений. Комментарий может стоять между любыми ключевыми словами, параметрами или знаками пунктуации в предложении. Существуют следующие способы использования комментариев:

  •  Начало комментария фиксируется косой чертой со звездочкой (/*). Затем следует текст комментария. Текст может занимать несколько строк. Завершается комментарий звездочкой и косой чертой (*/).
  •  Комментарий начинается с двух знаков минус (--). Далее следует текст комментария, который может располагаться только на одной строке. Конец комментария – символ конца строки.

Предложение SQL может содержать комментарии обоих типов.

Пример:

Приводимые далее предложения содержат различные варианты использования комментариев:

SELECT  ename, sal + NVL(comm, 0), job, loc

   /* Select all employees whose compensation is

      greater than that of Jones.*/

FROM  emp, dept

       /*The DEPT table is used to get the department name.*/

WHERE  emp.deptno = dept.deptno

   AND sal + NVL(comm,0) >           /* Subquery:       */

        (SELECT sal + NLV(comm,0)

                             /* total compensation is sal + comm */

            FROM  emp

            WHERE ename = 'JONES');

SELECT ename,                          -- select the name

     sal + NVL(comm, 0),               -- total compensation

  job,                              -- job

     loc                               -- and city containing the office

FROM  emp,                            -- of all employees

  dept

WHERE  emp.deptno = dept.deptno

     AND sal + NVL(comm, 0) >          -- whose compensation

                                      -- is greater than

         (SELECT sal + NVL(comm,0)   -- the compensation

           FROM  emp

           WHERE  ename = 'JONES');   -- of Jones.

PAGE  1


 

А также другие работы, которые могут Вас заинтересовать

30096. Наследственные заболевания органов слуха 12 KB
  Наследственные заболевания органов слуха: Наследственные нарушения слуха возникают под действием генетических факторов в том числе в результате врожденных дефектов. Некоторые исследователи в особую группу факторов снижения слуха выделяют факторы патологического воздействия на орган слуха плода не связанные с генетическим фоном. Несиндромальная форма тугоухости – форма тугоухости при которой снижение слуха не сопровождается другими признаками или заболеваниями других органов и систем которые передавались бы по наследству вместе с...
30097. Сложные сенсорные дефекты при наследственных синдромах 12.17 KB
  Дети с задержкой психического развития которая сочетается с дефектами зрения или слуха; Глухие дети с нарушениями соматического характера врожденные пороки сердца заболевания почек печени желудочнокишечного тракта. Кроме того в дефектологической практике встречаются дети с множественными дефектами. Дети с умственной осталостью слепоглухие; 2. Дети с нарушениями опорнодвигательного аппарата в сочетании с дефектами органов слуха зрения речи или интеллектуальной недостаточностью.
30098. Роль наследственности в паталогии речи 30.74 KB
  Роль наследственности в паталогии речи: Речь как одна из важнейших функций головного мозга не является врожденной как некоторые элементарные формы нервной деятельности а развивается по законам условных рефлексов. Нервные импульсы из области речедвигательного анализатора через черепномозговые нервы приводят в движение органы речи. Итак для нормальной речи и ее развития у ребенка необходимо: а нормальное строение и функция центральной нервной системы и речевых центров; б нормальное состояние органов голосо и речеобразования гортань...
30099. Психогенетические исследования когнитивных фнкций 15.04 KB
  Наименьший коэффициент наследуемости – в изменчивости оценок дивергентного мышления – способности чка генерировать новые идеи альтернативные решения проблем и т. способности близкой к понятию творческости креативности. Максимальное влияние генотипа – в вербальном субтесте – способности к логическому рассуждению в перцептивной скорости и пространственных способностях. когнитивный стиль свидетельствующий о способности чка преодолевать контекст и очевидно являющийся одним из показателей психологической дифференцированности.
30100. Психогенетические исследования темперамента 21.25 KB
  Психогенетические исследования темперамента. Черты темперамента определяют не столько то что человек делает сколько как он это делает т. Концепции темперамента весьма разнообразны. Для психогенетического исследования существенны несколько моментов: 1 В разных возрастах компонентный состав темперамента оказывается разным поскольку некоторые особенности поведения характерные для маленьких детей н р регулярность отправления физиологических функций длительность сна и т.
30101. ТИПЫ ЭЭГ И ИХ НАСЛЕДСТВЕННАЯ ОБУСЛОВЛЕННОСТЬ 21.29 KB
  ТИПЫ ЭЭГ И ИХ НАСЛЕДСТВЕННАЯ ОБУСЛОВЛЕННОСТЬ Наличие устойчивых индивидуальных особенностей ЭЭГ позволяет ставить вопрос о выделении определенных типов ЭЭГ и вслед за этим вопрос о роли факторов генотипа в происхождении данных типов. Для выяснения генетических основ межиндивидуальной вариативности ЭЭГ в этих исследованиях использовались близнецовый генеалогический и популяционный методы. На больших контингентах испытуемых авторы выявили 6 паттернов ЭЭГ в отношении которых в генеалогических исследованиях более 200 семей удалось...
30102. Генотип- средовые соотношения в изменчивости показателей вегетативных реакций 12.87 KB
  Генотип средовые соотношения в изменчивости показателей вегетативных реакций: Традиционным объектом психофизиологических исследований являются показатели функционирования физиологических систем организма сердечнососудистой дыхательной мышечной выделительной которые закономерно изменяются при психической деятельности. Как правило показатели активности этих систем отличаются индивидуальной специфичностью и достаточно устойчивой воспроизводимостью при повторных регистрациях в одинаковых условиях что дает основание ставить вопрос о роли...
30103. Роль наследственности и среды в формировании асимметрии 25.99 KB
  В соответствии с предположением о важной роли факторов среды и культуры установление одной ведущей руки определяется образом жизни общественными традициями и системой воспитания. До недавнего времени считалось что леворукие люди составляют в среднем 5 населения. В то же время дети выходцев из восточных стран которые обучаются в США где в школах нет жёсткого требования использования правой руки предпочитают левую руку чаще – 65. В Японии 72 школьников – не праворукие а если считать леворукими и детей переученных на праворукость то...
30104. Генетика – наука о закономерностях наследственности и изменчивсти 29.79 KB
  Эра ДНК: 1944 Освальд Эвери Колин Маклеод и Маклин Маккарти изолируют ДНК тогда его называли трансформирующим началом trnsforming principle. 1950 Эрвин Чаргафф показывает что хотя доля нуклеотидов в ДНК не постоянна наблюдаются определённые закономерности например что количество аденина равно количеству тимина T Правило Чаргаффа. 1952 Эксперимент Херши Чейз доказывает что генетическая информация бактериофагов и всех других организмов содержится в ДНК. 1953 Структура ДНК двойная спираль расшифрована Джеймсом...