- •Лабораторная работа № 1 Тема: создание таблиц
- •Ссылка на таблицы других пользователей
- •Параметр default
- •Правила присвоения имен
- •Типы данных в Oracle
- •Ограничения
- •Ограничения целостности данных
- •Ограничение primary key
- •Ограничение foreign key
- •Ограничение check
- •Пример. Создание таблицы базы данных Film, Klient, Dogovor.
- •Ограничение not null
- •Ограничение unique
- •6 Regiser varchar2(20), Таблица создана.
- •Создание таблицы с заполнением строками из другой таблицы
- •Лабораторная работа №2
- •2 Values (1, 'Красотка', 'Поланский','12-12-1987', 30, 2);
- •1 Строка создана.
- •1 Строка создана. Копирование строк из другой таблицы
- •Insert into таблица (столбец[, столбец]}
- •3 Строки создано.
- •Обновление строк
- •1 Строка обновлена.
- •Команды явного управления транзакциями
- •Оператор конкатенации
- •Строки символов (литералы)
- •Обработка неопределенных значений
- •Функция nvl
- •Синтаксис
- •7 Строк выбрано. Преобразование nvl для различных типов
- •Лабораторная работа №4 Тема: ограничение количества выбираемых строк.
- •Азазель 40 5
- •7 Строк выбрано.
- •1 Иванов и.Н. 005363
- •Пример. Вывод названия фильмов и стоимости проката для фильмов, количество которых 3 и 5.
- •Сочетание символов в искомой строке
- •Строки не выбраны
- •2 From film 3 Азазель
- •Пример. Вывод кодов фильмов и их названий, имеющих режиссера.
- •Порядок выполнения операций Правила приоритета
- •1 Красотка 42 3
- •Пример.
- •Пример.
- •Числовые функции
- •Пример.
- •Использование арифметических операторов с датами
- •Арифметические операторы над датами
- •Функции для работы с датами
- •Пример.
- •Функции преобразования
- •Вывод даты в заданном формате
- •Форматы времени
- •Пример.
- •Элементы формата числа
- •Пример.
- •Лабораторная работа №7 Тема: групповые функции Групповые функции
- •Групповые функции
- •Пример. Вывод первого и последнего названия фильма из алфавитного списка всех фильмов.
- •8 Строк выбрано.
- •Предложение having
- •Пример.
- •Лабораторная работа №8 Тема: подзапросы
- •From таблица
- •(Select список_выбора
- •Однострочные подзапросы
- •Многострочные подзапросы
- •Лабораторная работа №9 Тема определение переменных во время выполнения Переменные подстановки с одним амперсантом
- •Команда set verify
- •Определение текстовых строк и дат с помощью переменных подстановки
- •Указание имен столбцов, выражений и текстовых строк во время выполнения
- •Определение переменных пользователя
- •Лабораторная работа №10 Тема: изменение таблиц и ограничений Добавление столбца
- •Изменение столбца
- •Добавление и удаление ограничений
- •Разрешение и запрет ограничений
- •Удаление таблицы
- •Команда rename:
- •Команда truncate: Синтаксис
- •Усечение таблицы.
- •Добавление комментариев к таблице
- •Лабораторная работа №11 Тема: создание последовательности
- •Создание последовательности
- •Проверка параметров последовательности
- •10 Строк выбрано. Псевдостолбцы nextval и currval
- •Пропуски в последовательности
- •Просмотр следующего свободного значения без его увеличения
- •Изменение параметров последовательности
- •Лабораторная работа № 12. Тема: словарь данных.
- •Запросы к словарю данных
- •Классы представлений
- •Прочие представления
- •Лабораторная работа № 13. Тема: создание представлений
- •2 As select filmId, namef, god_vip Дата_выпуска
- •13 Куклы 13.05.99
- •2 (Номер, Название, Дата)
- •2 (ИмяКлиента, посл_Выдача, Перв_выдача)
- •Типы индексов
- •2 (Номер, Название, Дата)
- •Удаление представления
- •Лабораторная работа №14 Тема: создание индексов
- •Создание индекса
- •Просмотр индексов
- •Удаление индекса
Пример. Вывод первого и последнего названия фильма из алфавитного списка всех фильмов.
SQL> SELECT MIN(namef), MAX(namef)
2 FROM film;
MIN(NAMEF) MAX(NAMEF)
------------------------- -------------------------
Азазель Ледниковый период
Функции МАХ и MIN применяются к данным любого типа.
Функция COUNT
Функция COUNT имеет два формата: COUNT(*) и COUNT(выражение). Функция COUNT(*) возвращает количество всех строк в таблице, включая повторяющиеся строки и строки с неопределенными значениями.
Пример.
Вывод количества всех фильмов в базе.
SQL> SELECT COUNT(*)
2 FROM film;
COUNT(*)
------------------
7
В отличие от COUNT(*) функция COUNT(выражение) подсчитывает только строки с определенными значениями в столбце, описанном выражением.
Пример.
Вывод разброса стоимости проката кассет и количества наименований фильмов по каждой цене. Столбец должен иметь заголовок "количество".
SQL> select stoimost_prok, count(*) "количество"
2 from film
3 Group by stoimost_prok;
STOIMOST_PROK количество
------------- ----------
20 1
…
40 4
42 2
7 строк выбрано.
Столбец, заданный в предложении GROUP BY, не обязательно должен присутствовать в предложении SELECT, но его присутствие делает результаты более осмысленными.
Пример.
Вывод общего числа кассет по каждой стоимости проката фильма и с указанием самой стоимости проката.
SQL> select stoimost_prok, sum(kol)
2 from film
3 group by stoimost_prok;
STOIMOST_PROK SUM(KOL)
--------------------------- ----------
20 2
35 7
…
50 1
7 строк выбраны.
Недействительные запросы с групповыми функциями
Если в одной и той же команде SELECT указаны как отдельные элементы данных (namef), так и групповые функции (COUNT), требуется предложение GROUP BY, описывающее эти отдельные элементы (в данном случае — namef). Если предложение GROUP BY опущено, выдается сообщение об ошибке "not a single-group group function" ("групповая функция не для единственной группы"), а под некорректно заданным столбцом появляется звездочка (*).
Пример.
SQL> SELECT namef, COUNT(regiser)
2 from film;
SELECT namef, COUNT(regiser)
*
ошибка в строке 1:
ORA-00937: групповая функция не является одногруппной
Для исправления этой ошибки следует добавить предложение GROUP BY. Теперь namef является именем группы.
SQL> SELECT namef, COUNT(regiser)
2 from film
3 GROUP BY namef;
NAMEF COUNT(REGISER)
------------------------- --------------
Азазель 0
Ва-банк 0
…
Ледниковый период 1
8 Строк выбрано.
Любой столбец из списка SELECT, не являющийся групповой функцией, должен быть описан предложением GROUP BY.
Предложение WHERE для исключения групп не используется.
Пример.
Вывод названия фильма и средней стоимости проката для каждого наименования, где средняя стоимость проката превышает 40.
SQL> SELECT namef, AVG(stoimost_prok)
2 from film
3 where AVG(stoimost_prok)>40
4 GROUP BY namef;
where AVG(stoimost_prok)>40
*
ошибка в строке 3:
ORA-00934: групповая функция здесь не разрешена
Вместо этого для ограничения количества групп следует использовать предложение HAVING.
SQL> SELECT namef, AVG(stoimost_prok)
2 from film
3 GROUP BY namef
4 HAVING AVG(stoimost_prok)>40;
NAMEF AVG(STOIMOST_PROK)
------------------------- -----------------------------------
Ва-банк 42
Звонок 40,3333333
Красотка 42
