自连接

自连接:

自己的表和自己的表连接,核心,一张表拆分为两张一样的表即可

父类:

categoriyid

categoryName

2

信息技术

3

软件开发

5

美术技术

子类:

pid

categoryid

categoryName

3

4

数据库

2

8

办公信息

3

6

web开发

5

7

ps技术

操作:查询父类对应的子类关系

父类

子类

信息技术

办公信息

软件开发

数据库

软件开发

web开发

美术技术

ps技术

-- 自连接和联表查询

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

INSERT INTO `category`(`categoryid`,`pid`,`categoryName`)
VALUES ('2','1','信息技术'),
('3','1','软件开发'),
('4','3','数据库'),
('5','1','美术技术'),
('6','3','web开发'),
('7','5','ps技术'),
('8','2','办公信息');
-- --------------------------------

-- 查询父子信息
SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid`= b.`pid`




-- ---------------------------------
-- 查询学生所属年级(学号,姓名,年级名称)
SELECT studentNo,studentName,GradeName
FROM student s
INNER JOIN `grade` g
ON s.`GradeID` =g.`GradeID`

-- 查询科目所属的年级
SELECT `SubjectName`,`GrageName`
FROM `subject` sub
INNER JOIN `grade` g
ON sub.`GradeID` =g.`gradeID`
-- 表grade中的gradeID =4 赋值给表subject中的gradeID
-- 而 表subject表中gradeID为4的其中grameName为大四