PostgreSQL Вставить запись: Вставить строки в таблицу, чтобы убедиться, что набор столбцов содержит значения, которые должны существовать в ссылках на две таблицы
13. Напишите оператор SQL для вставки строк в таблицу сотрудников, в которой набор столбцов департаментов_данных и заданий_данных содержит значения, которые должны существовать в таблицах отделов и заданий.
Пример решения:
Код:
Вот код для создания примера таблицы отделов:
CREATE TABLE departments (
DEPARTMENT_ID integer NOT NULL UNIQUE,
DEPARTMENT_NAME varchar(30) NOT NULL,
MANAGER_ID integer DEFAULT NULL,
LOCATION_ID integer DEFAULT NULL,
PRIMARY KEY (DEPARTMENT_ID)
);
Теперь введите две строки в таблицу отделов:
INSERT INTO departments VALUES(60,'SALES',201,89);
INSERT INTO departments VALUES(61,'ACCOUNTS',201,89);
Вот команда, чтобы увидеть список вставленных строк:
postgres = # выберите * из отделов; отдел_ид | название отдела | manager_id | LOCATION_ID --------------- + ----------------- + ------------ + --- ---------- 60 | ПРОДАЖА | 201 | 89 61 | СЧЕТА | 201 | 89 (2 ряда)
Вот еще одна таблица заданий:
CREATE TABLE jobs (
JOB_ID integer NOT NULL UNIQUE PRIMARY KEY,
JOB_TITLE varchar(35) NOT NULL DEFAULT ' ',
MIN_SALARY decimal(6,0) DEFAULT 8000,
MAX_SALARY decimal(6,0) DEFAULT 20000
);
Теперь введите две строки в таблицу отделов:
INSERT INTO jobs(JOB_ID,JOB_TITLE) VALUES(1001,'OFFICER');
INSERT INTO jobs(JOB_ID,JOB_TITLE) VALUES(1002,'CLERK');
Вот команда, чтобы увидеть список вставленных строк:
postgres = # SELECT * FROM jobs; job_id | job_title | min_salary | max_salary -------- + ----------- + ------------ + ------------ 1001 | ОФИЦЕР | 8000 | 20000 1002 | КЛЕРК | 8000 | 20000 (2 ряда)
Вот еще один стол сотрудников:
CREATE TABLE employees (
EMPLOYEE_ID integer NOT NULL PRIMARY KEY,
FIRST_NAME varchar(20) DEFAULT NULL,
LAST_NAME varchar(25) NOT NULL,
DEPARTMENT_ID integer DEFAULT NULL,
FOREIGN KEY(DEPARTMENT_ID)
REFERENCES departments(DEPARTMENT_ID),
JOB_ID integer NOT NULL,
FOREIGN KEY(JOB_ID)
REFERENCES jobs(JOB_ID),
SALARY decimal(8,2) DEFAULT NULL
);
Теперь вставьте строки в таблицу сотрудников.
INSERT INTO employees VALUES(510,'Alex','Hanes',60,1001,18000);
Вот команда, чтобы увидеть список вставленных строк:
postgres = # SELECT * FROM сотрудников; employee_id | имя_файла | фамилия | отдел_ид | job_id | оплата труда ------------- + ------------ + ----------- + ----------- ---- + -------- + ---------- 510 | Алекс | Ханес | 60 | 1001 | 18000,00 (1 ряд)
Здесь в приведенном выше операторе вставки дочерние столбцы Department_id и job_id дочерних таблиц сотрудников успешно ссылаются на столбцы департаменты_данных и заданий департаментов и заданий родительских таблиц соответственно, поэтому проблем с вставкой не возникло.
Теперь вставьте еще одну строку в таблицу сотрудников.
INSERT INTO employees VALUES(511,'Tom','Elan',60,1003,22000);
Теперь посмотрим на вывод:
postgres = # INSERT INTO VALUES (511, 'Tom', 'Elan', 60,1003,22000); ОШИБКА: вставка или обновление таблицы "employee" нарушает ограничение внешнего ключа "employee_job_id_fkey" ДЕТАЛИ: Ключ (job_id) = (1003) отсутствует в таблице «jobs».
Здесь в приведенном выше операторе вставки показано, что в дочерних столбцах отделы_данных и заданий_данных сотрудников дочерней таблицы отделы_департамента успешно ссылаются с указанием отдела_департамента родительской таблицы, но столбец задания_представления не успешно ссылается на задание_для заданий родительской таблицы, поэтому проблема Возникшая вставка отображала сообщение об ошибке.
Теперь вставьте еще одну строку в таблицу сотрудников.
INSERT INTO employees VALUES(511,'Tom','Elan',80,1001,22000);
Теперь посмотрим на вывод:
postgres = # INSERT INTO VALUES (511, 'Tom', 'Elan', 80,1001,22000); ОШИБКА: вставка или обновление таблицы «сотрудники» нарушает ограничение внешнего ключа «employee_department_id_fkey» ДЕТАЛИ: Ключ (департамент_ид) = (80) отсутствует в таблице «отделы».
Здесь в приведенном выше операторе вставки показано, что в дочерних столбцах отделы_данных и задание_данных сотрудников дочерней таблицы задание job_id успешно ссылается с заданием job_id заданий родительской таблицы, но столбец отдела_идеально не ссылается на отдел_идента отделов родительской таблицы, поэтому проблема возникли до вставки и отобразили сообщение об ошибке.
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Предыдущий: Написать оператор SQL для вставки строк в таблицу job_history, в которой один столбец job_id содержит те значения, которые существуют в столбце job_id таблицы заданий.
Далее: PostgreSQL Basic Simple - упражнения, практика, решение
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования