кодесурса

PostgreSQL Вставить запись: Вставить строки в таблицу, чтобы убедиться, что набор столбцов содержит значения, которые должны существовать в ссылках на две таблицы

script1adsense2code
script1adsense3code

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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code