17.自联

  • • 发表于 6年前
  • • 作者 大妖怪
  • • 11171 人浏览
  • • 4 条评论
  • • 最后编辑时间 6年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

首先先创建数据,运行以下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,以及多级回复等等场景,都可以通过自联的方式获取想要的结果。

分享到:
4条评论
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回复:200 积分:7517

已加入社区[2913]天

梦里巷口,可有你倚门回首

作者详情》
Top