3урок по oracle sql, UNION, DDL, DML, Транзакции, Индексы
Продолжаем знакомство с возможностями запросов в ORACLE, это третий урок.
--Объединения таблиц
--Отбрасываем одинаковые строки
SELECT employee_id FROM HR.EMPLOYEES
UNION
SELECT employee_id FROM HR.JOB_HISTORY;
--Без отбрасывания дубликатов
SELECT employee_id FROM HR.EMPLOYEES
UNION ALL
SELECT employee_id FROM HR.JOB_HISTORY;
--Что есть общего между таблицами
SELECT employee_id FROM HR.EMPLOYEES
INTERSECT
SELECT employee_id FROM HR.JOB_HISTORY;
--Что есть уникального между таблицами
SELECT employee_id FROM HR.EMPLOYEES
MINUS
SELECT employee_id FROM HR.JOB_HISTORY;
--DML язык манипулирования данными
--INSERT - вставка строк
--С указанием полей
INSERT INTO HR.DEPARTMENTS(DEPARTMENT_ID,DEPARTMENT_NAME,MANAGER_ID,LOCATION_ID) VALUES(777, 'Luck_Dep', 200, 1700); --Без указания полей
INSERT INTO HR.DEPARTMENTS VALUES(770, 'AnyDep', NULL, 1700); --Вставка типа "дата"
INSERT INTO HR.EMPLOYEES VALUES(777,'Tes','Al','?','?',TO_DATE('SEP 12, 1999', 'MON DD, YYYY'),'ST_MAN',1,0.1,100,90); --Вставка с помощью запроса
INSERT INTO HR.REGIONS
SELECT 5, CITY FROM HR.LOCATIONS WHERE POSTAL_CODE = '1730';
--UPDATE - изменение строк
UPDATE HR.REGIONS SET REGION_NAME = 'Sib' WHERE REGION_ID = 5;
UPDATE HR.REGIONS SET REGION_NAME = (SELECT REGION_NAME FROM HR.REGIONS WHERE REGION_ID = 4) WHERE REGION_ID = 5;
--DELETE - удаление строк
DELETE FROM HR.REGIONS WHERE REGION_ID = 5;
--TRUNCATE TABLE - полное удаление данных из таблицы
--TRUNCATE TABLE 'ИмяТаблицы'
--DDL создание и управление таблицами
--Формат команды CRETAE TABLE:
--CREATE TABLE имя_таблицы (имя_столбца тип столбца (атрибуты));
--Создадим таблицу с PRIMARY KEY(первичным ключом):
CREATE TABLE HR.t1(
COUNTRY VARCHAR(30) NOT NULL PRIMARY KEY,
CURRENCY VARCHAR(30) NOT NULL
);
--Создадим отношения(связь) между таблицами с помощью первичных и внешних ключей PRIMARY KEY, FOREGEN KEY
--Добавим CHECK(проверка на условие значений в столбце)
CREATE TABLE HR.t1_1(
CODE varchar(30) NOT NULL,
SALARY decimal NOT NULL,
FOREIGN KEY (CODE) REFERENCES HR.t1(COUNTRY),
CHECK (SALARY != 0)
);
--Создадим таблицу с UNIQUE(уникальными значениями) ограничением на уровне столбца и на уровне таблицы:
CREATE TABLE HR.t2(
I INT NOT NULL UNIQUE,
PROJ CHAR(10) NOT NULL,
ITEM INTEGER NOT NULL,
CONSTRAINT t2_unique UNIQUE (PROJ, ITEM)
);
--Изменение таблицы
--Добавить столбец
alter table HR.t2 add(test char(20)); --Удалить столбец
alter table HR.t2 drop column test; --Изменить столбец
alter table HR.t2 modify(PROJ varchar(20)); --Переименовать столбец
alter table HR.t2 rename column PROJ to PROM ; --Удалить constarint
alter table HR.t2 drop constraint t2_unique; --Добавить primary key
alter table HR.t2 add constraint t2_pk primary key (ITEM);
--Удаление таблицы
drop table HR.t2;
--Транзакции
--Операторы управления транзакциями:
--SAVEPOINT создает в транзакции точку сохранения
--ROLLBACK TO откатывает до указанной точки сохранения SAVEPOINT
--SET TRANSACTION устанавливает атрибуты транзакции, уровень изолированности, только для чтения данных, чтения и записи
--COMMIT work и ROLLBACK утверждают, либо откатывают транзакцию(согласовывают данные)
--Возможная конструкции транзакций():
--используется таблица: create table HR.tran (id number primary key, name char(20), age number);
--Откат(Данные не сохранятся)
insert into HR.tran values (1, 'A', 10);
insert into HR.tran values (2, 'B', 20);
rollback;
select * from HR.tran;
--Пример транзакции с откатом
--WHEN OTHERS THEN обрабатывает все прочие ошибки
begin
insert into HR.tran values (1, 'A', 10);
insert into HR.tran values (2, 'B', 20);
insert into HR.tran values (2, 'B', 20);
commit work;
exception
when others then
rollback;
insert into HR.tran values (1, 'r', 10);
end;
select * from HR.tran;
--Пример с точками сохранения(вторая строка не сохранится)
insert into HR.tran values (2, '2A', 10);
savepoint t1;
insert into HR.tran values (3, '2B', 20);
savepoint t2;
rollback to t1;
commit;
select * from HR.tran;
--Индексы
--Индексы в Oracle дают быстрый доступ к строкам таблиц
--хранят отсортированные значения указанных столбцов
--используют отсортированные значения для быстрого нахождения ассоциированных строк таблицы .
--Правильное использование индексов сокращает до минимума количество операций ввода-вывода.
--Создание индеска
CREATE INDEX employee_id ON HR.employees(FIRST_NAME);
--Удаление индекса
DROP INDEX employee_id;
На этом - все, видео можно посмотреть на моем канале YouTube:
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!