原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
首先先创建数据,运行以下sql:
USE coupletDemo;
CREATE TABLE score(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(5) NOT NULL,
course1 FLOAT NOT NULL, -- 课程1分数
course2 FLOAT NOT NULL, -- 课程2分数
PRIMARY KEY(id)
);
INSERT INTO score (name, course1, course2) VALUES ('小明', 100, 50);
INSERT INTO score (name, course1, course2) VALUES ('小红', 80, 90);
INSERT INTO score (name, course1, course2) VALUES ('小黑', 60, 40);
INSERT INTO score (name, course1, course2) VALUES ('小刚', 70, 70);
INSERT INTO score (name, course1, course2) VALUES ('小妖怪', 60, 70);
假设这是个分数表,里面有课程1的分数、课程2的分数,如果我们想要查课程1的分数比课程2的分数高的同学,这时候就需要用自联了。
SELECT s1.* FROM score s1, score s2 WHERE s1.id = s2.id AND s1.course1 > s2.course2;
这样就行啦。通过语句可以看出,其实这是一个内联,只不过是score表自己和自己联表,因此自联和左联右联不一样,所以单独开了一张出来没有和左联这几章一起写。自联其实是一种联表的用法,并不是一种联表方式,原理就是让一张表自己和自己联表,联表的方式可以是内联,也可以是左联右联。自联的用途也挺广泛的,除了文中这样,还有别的场景可以使用,比如有一个职工表,里面有姓名,职位,部门,还有上级id,如果是最高级,上级id是0,以及多级回复等等场景,都可以通过自联的方式获取想要的结果。