лабораторная работа 8
TRANSCRIPT
Copyright © Avdeyev V.A. 2008
Системы управления техническими данными
на предприятииЛАБОРАТОРНАЯ РАБОТА №8
Введение в представления и встроенные функции SQL
автор: Авдеев Владимир Александрович
Лабораторная работа №8
Copyright © Avdeyev V.A. 2008
Цель работы:Знакомство с языком SQL и приобретение практических
навыков по использованию представлений и встроенных функций SQL ORACLE
Содержание работы:Выполнение упражнений по использованию операторов
управления представление
Лабораторная работа №8
Что такое представление?
Copyright © Avdeyev V.A. 2008
Типы таблиц, с которыми вы имели дело до сих пор, назывались — базовыми таблицами. Это — таблицы, которые содержат данные. Однако имеется другой вид таблиц — представления.
Представления это таблицы, чье содержание выбирается или получается из других таблиц. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных
Представление это фактически запрос, который выполняется всякий раз, когда представление становится темой команды. Вывод запроса при этом в каждый момент становится содержанием представления
Лабораторная работа №8
Команда CREATE VIEW
Copyright © Avdeyev V.A. 2008
Вы можете использовать это представление точно так же, как и любую другую таблицу. Она может быть запрошена, модифицирована, вставлена в, удалена из, и соединена с, другими таблицами и представлениями.
CREATE VIEW KazanAS SELECT * FROM Salespeople WHERE city = ‘Казань’
Select * FROM Kazan
CREATE VIEW SalespAS SELECT snum, sname, city FROM Salespeople
Лабораторная работа №8
Модифицирование представлений
Copyright © Avdeyev V.A. 2008
Представление может теперь изменяться командами модификации DML, но модификация не будет воздействовать на само представление. Команды будут на самом деле перенаправлены к базовой таблице
Лабораторная работа №8
UPDATE SalesownSET city = ‘Казань'WHERE snum = 1004;
Если при модификации указали отсутствующие в представлении поле будет – команда будет отвергнута
Именование столбцов
Copyright © Avdeyev V.A. 2008
Иногда нужно снабжать столбцы новыми именами:когда некоторые столбцы являются выводимыми и поэтому не
имеющими имен;когда два или более столбцов в объединении имеют те же имена,
что в их базовой таблице.
Лабораторная работа №8
CREATE VIEW Salesp (N,Name,City)AS SELECT snum, sname, city FROM Salespeople
Если указываете новые имена полям, то должны сделать это для каждого поля в представлении.
Групповые представления
Copyright © Avdeyev V.A. 2008
Групповые представления
это представления, которые содержат предложение GROUP BY, или которые основываются на другие групповые представления
Лабораторная работа №8
CREATE VIEW TotalfordayAS SELECT odate, COUNT(DISTINCT cnum), COUNT(DISTINCT snum),COUNT(onum), AVG(amt), SUM(amt)FROM OrdersGROUP BY odate;
SELECT *FROM Totalforday;
Представления и объединения
Copyright © Avdeyev V.A. 2008
Представления не требуют, чтобы их вывод осуществлялся из одной базовой таблицы. Так как почти любой допустимый запрос SQL может быть использован в представлении, он может выводить информацию из любого числа базовых таблиц, или из других представлений.
Лабораторная работа №8
CREATE VIEW NameordersAS SELECT onum, amt, a.snum, sname, cname FROM Orders a, Customers b, Salespeople c WHERE a.cnum = b.cnum AND a.snum = c.snum;
SELECT *FROM NameordersWHERE sname = ‘Иванов П.А.';
Представления и подзапросы
Copyright © Avdeyev V.A. 2008
Представления могут также использовать и подзапросы, включая соотнесенные подзапросы.
Лабораторная работа №8
CREATE VIEW ElitesalesforceAS SELECT b.odate, a.snum, a.sname, FROM Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = (SELECT MAX (amt) FROM Orders c WHERE c.odate = b.odate);
Предположим, ваша компания предусматривает премию для тех продавцов, которые имеют заказчика с самой высокой суммой Заказа для любой указанной даты.
CREATE VIEW BonusAS SELECT DISTINCT snum, sname FROM Elitesalesforce a WHERE 10 <= (SELECT COUNT (*) FROM Elitesalestorce b WHERE a.snum = b.snum);
премия будет назначаться только продавцу, который имел самую высокую сумму Заказа за последние десять лет
Чего не могут делать представления
Copyright © Avdeyev V.A. 2008
Один из наиболее трудных и неоднозначных аспектов представлений — непосредственное их использование с командами модификации DML. Эти команды фактически воздействуют на значения в базовой таблице представления.
Критерии, по которым определяют, является ли представление модифицируемым или нет: одна базовая таблица, первичный ключ, нет агрегатных функций, нет DISTINCT, нет GROUP BY, нет подзапросов и т.п.
Имеются также некоторые виды запросов, которые не допустимы в определениях представлений. Одиночное представление должно основываться на одиночном запросе; объединение (UNION) не разрешаются.
Упорядочение по ORDER BY никогда не используется в определении представлений.
Лабораторная работа №8
Встроенные функции SQL
Copyright © Avdeyev V.A. 2008
Функция — это нечто вроде мини-команды, которую можно помещать в более крупный SQL-оператор. Функция принимает некоторые данные и возвращает их в преобразованном виде, в зависимости от того, для какой цели она разрабатывалась.
Функции разбиты на две категории: Однострочные функции
выполняют операции, которые могут повлиять на каждую строку таблицы.
Групповые функции
предназначены для получения информации о некоторых подмножествах данных, выбранных любым нужным вам образом.
Лабораторная работа №8
Однострочные функции
Copyright © Avdeyev V.A. 2008
Функция — это нечто вроде мини-команды, которую можно помещать в более крупный SQL-оператор. Функция принимает некоторые данные и возвращает их в преобразованном виде, в зависимости от того, для какой цели она разрабатывалась.
Функции этого типа делятся на следующие категории:Системные переменныеЧисловые функцииСимвольные (текстовые) функцииФункции для работы с датамиФункции преобразования данныхПрочие функции
Лабораторная работа №8
Системные переменные
Copyright © Avdeyev V.A. 2008
Системные переменные создаются СУБД и содержат информацию о среде, в которой функционирует база данных.
SYSDATEвозвращает текущие дату и время
SELECT SYSDATE FROM test_2
INSERT INTO test_2 VALUES (‘1’, 10, sysdate)
INSERT INTO test_2 VALUES (‘1’, 10, sysdate-7)
USER, USERENV
Обе эти функции полезны, когда вам нужно вести аудит действий над таблицей, т.е. следить за тем, кто вставляет, обновляет и удаляет записи.
SELECT USER FROM test_2
SELECT USERENV('TERMINAL') FROM test_2
Лабораторная работа №8
Числовые функции
Copyright © Avdeyev V.A. 2008
Числовые функции оперируют с числовыми значениями, изменяя их в соответствии с вашими потребностями.
ROUNDокругляет числа с любой заданной точностьюROUND(входное_значение,число_знаков_после_десятичной_точки)
SELECT name, ROUND(price,0) FROM test_2
ROUND(1234.5678,2) - 1234.57
ROUND(1234.5678,0) - 1235
ROUND(1234.5678,-2) – 1200
TRUNCусекает число, понижая его точностьTRUNC( 1234.5678, 2) - 1234.56
TRUNC(1234.5678,0) - 1234
Лабораторная работа №8
Текстовые функции (1/3)
Copyright © Avdeyev V.A. 2008
Текстовые функции оперируют с текстовыми строками. Чаще всего с текстовыми строками требуется делать следующее: изменять регистр символов (на верхний, нижний или смешанный); разбивать длинные строки на несколько более коротких подстрок; очищать текст, поступающий из внешнего источника, от избыточных пробелов в конце.
UPPER, LOWER и INITCAPфункции меняют регистр переданного им текстаSELECT UPPER(name) FROM test_2SELECT LOWER(name) FROM test_2SELECT INITCAP(name) FROM test_2
Лабораторная работа №8
Текстовые функции (2/3)
Copyright © Avdeyev V.A. 2008
LENGTHопределяет длину данных, хранимых в столбце таблицыSELECT name, LENGTH(name) NAME_LENGTHFROM test_2WHERE LENGTH(name) > 5ORDER BY name
SUBSTRразделяет многоразрядные данные столбца на дискретные сегменты.Чтобы разрезать строку на подстроки, необходимо указать, в какой позиции должна начинаться подстрока и какой длины она должна бытьSUBSTR (исходный_текст, позиция_начального_символа, количество_символов)SELECT SUBSTR(Project, 1, 2) n,SUBSTR(Project, 4, 3) depFROM test_3
Лабораторная работа №8
Текстовые функции (3/3)
Copyright © Avdeyev V.A. 2008
INSTRищет указанный текст и возвращает число, обозначающееначальную позицию этого текста в строкеINSTR(исходный_текст, текст_для_поиска, позиция _начального_символа)SELECT INSTR(Project,’-’,1) FROM test_3SELECT SUBSTR(Project,1,INSTR(Project,’-’,1)) FROM test_3
LTRIM и RTRIMLTRIM удаляет пробелы в начале строки, а функция RTRIM — в конце.LTRIM(имя_столбца), RTRIM(имя_столбца)SELECT LTRIM(Project) FROM test_3
Лабораторная работа №8
Функции для работы с датами (1/2)
Copyright © Avdeyev V.A. 2008
INSERT INTO test_2
VALUES ('Tanya Ivanova',11.55, SYSDATE);
SYSDATE и TRUNCигнорировалось значение времениКогда лучше использовать функцию TRUNC — на этапе ввода или на этапе вывода? Это зависит от приложения.
Лабораторная работа №8
Функции для работы с датами (2/2)
Copyright © Avdeyev V.A. 2008
ADD_MONTHSвозвращает дату с тем же днем месяца, что и в исходной дате, но отнесенную на заданное количество месяцев в будущее (или прошлое).ADD_MONTHS(‘начальная_дата', количество_месяцев)
LAST_DAYвозвращает последний день любого месяца, указанного в переданной ей датеLAST_DAY(‘дата’)
MONTH_BETWEENвозвращает количество месяцев, разделяющих две датыMONTHS_BETWEEN(конечная_дата, начальная_дата)
Лабораторная работа №8
Функции преобразования данных (1/4)
Copyright © Avdeyev V.A. 2008
Под преобразованием данных (data conversion) понимается преобразование информации одного типа в информацию другого типа — обычно текста в дату, время или число, либо наоборот.
Назначение:позволяют изменять способ отображения дат, времен и чисел.
упрощают импорт данных из других источников.
Лабораторная работа №8
Функции преобразования данных (2/4)
Copyright © Avdeyev V.A. 2008
TO_CHARпреобразует дату, время или число в текст
Форматирование значений даты и времени
ТО_СНАR(входное_значение, код_формата)
SELECT TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS') NOW FROM test_2;SELECT TO_CHAR(SYSDATE, 'MONTH DDTH') FROM test_2;SELECT TO_CHAR(SYSDATE, 'MONTH DDSP') FROM test_2;SELECT TO_CHAR(SYSDATE, 'MONTH DDSPTH') FROM test_2;
Лабораторная работа №8
Функции преобразования данных (3/4)
Copyright © Avdeyev V.A. 2008
TO_CHARпреобразует дату, время или число в текст
Форматирование числовых значений
ТО_СНАR(входное_значение, код_формата)
Лабораторная работа №8
Функции преобразования данных (4/4)
Copyright © Avdeyev V.A. 2008
ТО_DАТЕпреобразует текстовое представление даты (и/или времени) в
действительные значения даты/времени. Хотя ее основное назначение — импорт текстовых файлов с датами и временем из других баз данных, она также полезна при ручном вводе даты в формате, отличном от стандартного формата или при вводе времени.
ТО_DАТЕ(входное_значение, код_формата)
Лабораторная работа №8
Прочие функции (1/2)
Copyright © Avdeyev V.A. 2008
DECODEфункция транслирует одно множество данных в другое, используя
определенные вами значения "до" и "после". Охарактеризовать ее работу можно так: если входное значение равно "А", на выходе будет "В", а если входное значение равно "С", функция вернет "D". Значения "А", "В", "С" и "D" вы определяете сами
DECODE(источник_входных_данных,
входное_знанение_1, выходное_значение_ 1,
входное_значение_2, выходное_значение_2,
последнее_входное_значение, последнее_выходное_значение,
[выходное_значение_по_умолчанию при_отсутствйи_совпадений])
Лабораторная работа №8
Прочие функции (2/2)
Copyright © Avdeyev V.A. 2008
NVLполучив в качестве аргумента null-значение, она возвращает вместо него выбранное вами значение
NVL(входное_значение, результат_если_пиll)
результат_если_пиll - может быть всем, чем угодно: литералом (т.е. жестко закодированным значением), ссылкой на другой столбец или произвольным выражением.
NVL не обновляет никаких значений. Исходные данные таблицы остаются нетронутыми.
Лабораторная работа №8
Вставка комментариев в SQL-сценарии
Copyright © Avdeyev V.A. 2008
Существует два типа комментариев. Комментарии первого типа занимают одну строку и хорошо подходят в качестве небольших памяток или для временного блокирования части кода, который вы не хотите выполнять, но не намерены и удалять. Комментарии второго типа могут содержать сколько угодно строк, но не столь очевидны, поэтому не бросаются в глаза при чтении файла.
SELECT * FROM test_2;-- Эта строка игнорируется.
Если вы намерены сгруппировать несколько строк комментариев, болееподходящим может оказаться другой подход, при котором в начале секциикомментария помещается "/*", а в конце — "*/". Все строки между этими парами символов игнорируются.
Лабораторная работа №8
Упражнения
Copyright © Avdeyev V.A. 2008
Создайте представление, которое бы выводило точность даваемую оборудованием при выполнении всех токарных операций. Вывод должен быть в такой форме: «Номер операции», «Наименование операции», «Модель оборудования» и «Точность оборудования».
Создайте представление, которое бы показывало модель и наименование оборудования в каждом цехе.
Создайте представление, которое бы показывало маршрут изготовления
Лабораторная работа №8