лабораторная работа 8

27
Copyright © Avdeyev V.A. 2008 Системы управления техническими данными на предприятии ЛАБОРАТОРНАЯ РАБОТА №8 Введение в представления и встроенные функции SQL автор: Авдеев Владимир Александрович

Upload: studentkai

Post on 06-Aug-2015

255 views

Category:

Education


0 download

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