自连接及联表查询练习

-- 自连接
CREATE TABLE`category`(
`categoryid`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT'主题',
`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','3','软件开发'),
('4','3','数据库'),
('5','1','美术设计'),
('6','3','web开发'),
('7','5','ps技术'),
('8','2','办公信息');
/*自己的表和自己的表连接,核心:一张表拆为两张一样的表即可
父类
categoryid categoryName
2 信息技术
3 软件开发
5 美术设计

子类
pid categoryid categoryName
3 4 数据库
2 8 办公信息
3 6 web开发
5 7 ps技术

操作:查询父类对应子类关系
父类 子类
信息技术 办公信息
软件开发 数据库
软件开发 web开发 */

-- 查询父子信息:把一张表看为两个一模一样的表
SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid`=b.`pid`
-- 联表查询(学生的学号,学生姓名,性别)
SELECT s.`id`,s.`name`,ss.`sex`
FROM `student2` s
INNER JOIN `student2_copy` ss
ON s.`id` = ss.`id`
/*关于数据库报错有歧义的列名
原因是,在多表查询时,查询出的结果列字段在多表中重复出现,需要使用别名.列明查询

select语法
select[all | distinct]
{*|table.*[table.fieldl[as aliasl][,table.field2[as alias2]][......]]}
from table_name[as table_alias]
[left | right | inner join table_name]联合查询
[where...]指定结果需满足的条件
[group by ...]指定结果按照哪几个字段来分组
[having]过滤分组的记录必需满足的次要条件
[order by]指定查询记录按一个或多个条件排序
[limit {[offset,]row_count | row_countoffset offset}];指定查询的记录从哪条至哪条
注:[]代表可选的,{}代表必选的*/

 

posted @   同学?  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示