最近在学数据库,逃课的人伤不起啊,只能自己啃书别。
废话不多说,开始正题吧。
自然连接的定义
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。自然连接自动判断相同名称的列,而后形成匹配。缺点是,虽然可以指定查询结果包括哪些列,但不能人为地指定哪些列被匹配。另外,自然连接的一个特点是连接后的结果表中匹配的列只有一个
然后开始建了两张表:
CREATE TABLE D_SUBJECT2 (
CLASSID VARCHAR(10) NOT NULL,
CLASSNAME VARCHAR(10) NOT NULL,
PRIMARY KEY(CLASSID)
)
CREATE TABLE D_STUDENT2 (
ID VARCHAR(10) NOT NULL,
NAME VARCHAR(10) NOT NULL,
CLASSID VARCHAR(10) NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY (CLASSID) REFERENCES D_SUBJECT2 (CLASSID)
)
再插入数据
INSERT INTO D_SUBJECT1(CLASSID, CLASSNAME) SELECT '2','ENGLISH' FROM DUAL UNION ALL SELECT '3','CHINESE' FROM DUAL
INSERT INTO D_STUDENT1(ID, NAME, CLASSID) SELECT '2','liang','2' FROM DUAL UNION ALL SELECT '3', 'zhang', '3' FROM DUAL
查询下表得
SELECT * FROM D_STUDENT2, D_SUBJECT2
结果为
这个和预料中的不一样啊,都变成笛卡尔积了,不过书本上是这样写的,纠结了好久,还在社区提问的。后来问了个师兄才知道。
默认这中情况是笛卡尔积的,要自然连接是要这样的:
SELECT * FROM D_STUDENT2 NATURAL JOIN D_SUBJECT2
被书本坑死啦!!!!尽信书不如无书,古人诚不欺我也。