如何在DBMS中关联两个表?

时间:2009-07-03 15:15:11

标签: sql oracle10g

我创建了两个表EMP和DEPT; 现在我想把这两个表联系起来。 也就是说,一个表的数据将来到另一个表。 怎么可能?

4 个答案:

答案 0 :(得分:3)

一个部门可以有很多员工;这是一种经典的一对多关系。

两个表都应该有主键;在员工表中放置一个FOREIGN KEY指向其部门。

答案 1 :(得分:3)

经典地,DEPT表将具有主键列,例如DeptNum。 EMP表还将包含与DEPT.DeptNum相同类型的列DeptNum。将记录插入EMP时,可确保DeptNum值与DEPT中的正确部门匹配。

您有DBMS通过声明EMP.DeptNum是引用DEPT.DeptNum的外键来强制执行此操作。那么DBMS将

  1. 阻止您在EMP.DeptNum中插入或更新与DEPT.DeptNum中的值不匹配的值,并且
  2. 阻止您删除或更新DEPT.DeptNum中仍包含使用部门编号的EMP行的值。

答案 2 :(得分:0)

duffymo和Jonathan Leffler为您提供了解决方案。

另外,如果你想看到完成的工作,你可以看看“HR模式”。安装oracle时,通常会安装HR模式(人力资源),并且您可以根据需要使用EMP表和DEPT表。

答案 3 :(得分:0)

创建表时创建外键约束

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的答案。 其他DB可能会有所不同。

再次阅读您的问题时,您是否也想知道如何在SQL查询中将它们链接在一起?如果是这样,你需要的就是加入。

e.g。如果emp和dept表都有一个名称和id列,那么这个 将加入他们

select emp.name, dept.name from emp inner join dept where emp.id = dept.id

这就是你要追求的吗?