SQL实战新手入门:自联接-在表内部查找答案
自联接 在表内部查找答案
这是一个新颖的概念 将一个表联接到自身 为什么要这么做呢?读者可能会感到疑惑 表中不是已经包含所需的信息了吗?这既可以说 是 也可以说 否 例如 尝试这样的查询 请按照添加到数据库中的顺序列出在同一年出版的图书列表
可以使用一个自联接查询来回答这一问题
SELECT
fst bk_id
fst bk_title
snd bk_id
snd bk_title
FROM books fst JOIN books snd
ON fst bk_published_year = snd bk_published_year
WHERE fst bk_id < snd bk_id;
bk_id bk_title bk_id bk_title
A La Recherche du Temps Perdu Steppenwolf
Letters From Earth A Short History of Nearly…
( row(s) affected)
首先 请注意已经为该表定义了别名 否则在该语句的其他部分中数据库引擎将无法区分所引用的是哪一个表 在之前的查询中使用别名是一个最佳实践 但在自联接中使用别名是必需的 接下来 根据出版的年份将该表联接到自身 然后再定义筛选条件 指出我们需要同一年出版的不同的图书记录(否则 将从每一个表中获取相同的图书)
尽管在自联接中将表联接到自身 但必须记住的重要内容是 这时处理的依然是该表的两个实例 对于所有的操作和用途 两者是两个彼此独立的表 在一个查询中 对于一个表可以引用自身多少次并没有明确的限制
尽管上面的查询结果也可以使用子查询和GROUP BY子句来获得 但却难以在同一行中列出两本图书的名称
自联接并不是一种特殊类型的联接 但它很好地演示了SQL语法所提供的灵活性
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixinzhi/Article/program/SQL/201311/16468
2023-08-15 广告