Я создал две таблицы EMP и DEPT; теперь я хочу связать эти две таблицы. То есть данные одной таблицы будут поступать в другую таблицу. Как это возможно?
Как связать две таблицы в СУБД?
Ответы (4)
В одном отделе может быть много сотрудников; это классическая связь "один ко многим".
Обе таблицы должны иметь первичные ключи; поместите ВНЕШНИЙ КЛЮЧ в таблицу сотрудников, чтобы указать на его отдел.
Классически таблица DEPT будет иметь столбец первичного ключа, такой как DeptNum. Таблица EMP также будет содержать столбец DeptNum того же типа, что и DEPT.DeptNum. Когда вы вставляете запись в EMP, вы гарантируете, что значение DeptNum соответствует правильному отделу в DEPT.
Вы заставляете СУБД обеспечивать это, объявляя, что EMP.DeptNum является внешним ключом, который ссылается на DEPT.DeptNum. Тогда СУБД будет
- предотвратить вставку или обновление значения в EMP.DeptNum, которое не соответствует значению в DEPT.DeptNum, и
- предотвратить удаление или обновление значения в DEPT.DeptNum, в котором все еще есть строки в EMP, использующие номер отдела.
duffymo и Джонатан Леффлер дали вам решение.
Кроме того, если вы хотите увидеть проделанную работу, вы можете посмотреть на «HR-схему». Схема HR (Human Resources) обычно устанавливается в качестве примера, когда вы устанавливаете oracle, и у вас есть таблица en EMP и таблица DEPT, связанные именно так, как вы хотите.
Либо вы создаете ограничение внешнего ключа при создании таблиц
CREATE TABLE table_name
(column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
или Использование инструкции ALTER TABLE
e.g.
ALTER TABLE table_name
add CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n);
Например:
ALTER TABLE EMP
add CONSTRAINT fk_dept
FOREIGN KEY (dept_id)
REFERENCES dept(dept_id);
Я предполагаю, что, поскольку вы отметили этот вопрос как Oracle, вам нужен ответ для Oracle. Другие БД могут немного отличаться.
Прочитав ваш вопрос еще раз, вы также хотите знать, как связать их вместе в SQL-запросе? Если да, то вам нужно соединение.
например если есть столбец имени и идентификатора для таблиц emp и dept, то это объединит их
select emp.name, dept.name from emp inner join dept where emp.id = dept.id
Это то, что вам нужно?