已经建立了两个表,请问如何用SQL语句建立关联?

已经建立了两个表,请问如何用SQL语句建立关联?,第1张

以下对ORACLE,SQL

SERVER等都适用:

自然连接(列名相同,只选相同列名下两边值相等的行):

SELECT

*

FROM

STUDENT

A

NATURAL

JOIN

SCORE

B

内连接(列名不一定相同,只选满足ON条件的行):

SELECT

*

FROM

STUDENT

A

INNER

JOIN

SCORE

B

ON

A.SNO

=

B.SNO

左外连接(列名不一定相同,只选满足ON条件的行和左表的全部,右表填充空值):

SELECT

*

FROM

STUDENT

A

LEFT

OUTER

JOIN

SCORE

B

ON

A.SNO

=

B.SNO

右外连接(列名不一定相同,只选满足ON条件的行和右表的全部,左表填充空值):

SELECT

*

FROM

STUDENT

A

RIGHT

OUTER

JOIN

SCORE

B

ON

A.SNO

=

B.SNO

全外连接(列名不一定相同,只选满足ON条件的行和两边表的全部,无匹配的全部填充空值)

SELECT

*

FROM

STUDENT

A

FULL

OUTER

JOIN

SCORE

B

ON

A.SNO

=

B.SNO

全连接(笛卡尔积,所有行和所有行交叉组合形成新表)

SELECT

*

FROM

STUDENT

A

CROSS

JOIN

SCORE

B

如果是 父子关系, 或者 一对多 关系。

可以通过 创建外键的方式, 在 父表 与 子表之间, 创建一个关联关系。

例如:

-- 创建测试主表. ID 是主键.

CREATE TABLE test_main (

id INT NOT NULL,

value VARCHAR(10),

PRIMARY KEY(id)

)

-- 创建测试子表.

CREATE TABLE test_sub (

id INT NOT NULL,

main_id INT ,

value VARCHAR(10),

PRIMARY KEY(id)

)

-- 插入测试主表数据.

INSERT INTO test_main(id, value) VALUES (1, 'ONE')

INSERT INTO test_main(id, value) VALUES (2, 'TWO')

-- 插入测试子表数据.

INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE')

INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO')

SQL>-- 创建外键(默认选项)

SQL>ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main

Table altered.

SQL>

SQL>-- 测试删除主表数据. 将出错 ORA-02292: 违反完整约束条件

SQL>DELETE

2test_main

3 WHERE

4ID = 1

DELETE

*

ERROR at line 1:

ORA-02292: integrity constraint (HR.MAIN_ID_CONS) violated - child record found


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9924860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存