自连接(了解)
MySQL 数据库学习笔记(续)
四、DQL 数据查询语言
4.5 自连接(了解)
1. 创建分类表(自连接专用表)
CREATE TABLE category (
categoryid INT(10) UNSIGNED NOT NULL auto_increment COMMENT '主题ID',
pid INT(10) NOT NULL COMMENT '父ID',
categoryName VARCHAR(50) NOT NULL COMMENT '主题名字',
PRIMARY KEY(categoryid)
) ENGINE=INNODB auto_increment=9 DEFAULT CHARSET = utf8;
2. 插入分类数据
INSERT INTO category(categoryid,pid,categoryName)
VALUES('2','1','信息技术'),('3','1','软件开发'),('4','3','数据库'),
('5','1','美术设计'),('6','3','web开发'),('7','5','PS技术'),('8','2','办公信息');
3. 自连接核心概念与查询
-- =================== 自连接 ==================== --
-- 自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
父类
| categoryid | categoryName |
|---|---|
| 2 | 信息技术 |
| 3 | 软件开发 |
| 5 | 美术设计 |
子类
| pid | categoryid | categoryName |
|---|---|---|
| 3 | 4 | 数据库 |
| 2 | 8 | 办公信息 |
| 3 | 6 | web开发 |
| 5 | 7 | ps设计 |
子类的 pid 等于父类的 categoryid
操作:查询父类对应的子类关系
| 父类 | 子类 |
|---|---|
| 信息技术 | 办公信息 |
| 软件开发 | 数据库 |
| 软件开发 | web开发 |
| 美术设计 | ps设计 |
-- 查询父子信息
SELECT a.categoryid '父栏目',b.categoryid '子栏目'
FROM category a,category b
WHERE a.categoryid = b.pid
总结
- 自连接定义:将同一张表虚拟拆分成两张表,通过自身字段关联进行查询
- 核心条件:子类表的
pid= 父类表的categoryid - 适用场景:查询分类、菜单、树形结构(父栏目-子栏目)数据
- 语法:给同一张表起两个不同别名,通过关联字段匹配查询

浙公网安备 33010602011771号