MYSQL——多表连结查询(2、左外联结)

分类:

内联结(INNER JOIN)

外联结

——左外连结(LEFT JOIN)

——右外联结(RIGHT JOIN)

——完整联结(FILL JOIN)

交叉联结(CROSS JOIN)

1、DDL语句——学生表——成绩表
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `createDate` datetime DEFAULT NULL,
  `userName` varchar(20) DEFAULT NULL,
  `pwd` varchar(36) DEFAULT NULL,
  `phone` varchar(11) DEFAULT NULL,
  `age` tinyint(3) unsigned DEFAULT NULL,
  `sex` char(2) DEFAULT '男',
  `introduce` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
CREATE TABLE `result` (
  `rid` int(11) NOT NULL AUTO_INCREMENT COMMENT '成绩编号',
  `testName` varchar(255) DEFAULT NULL COMMENT '测试名称',
  `score` double(4,2) DEFAULT NULL COMMENT '成绩',
  `studentId` int(11) DEFAULT NULL COMMENT '学生id',
  PRIMARY KEY (`rid`),
  KEY `studentId` (`studentId`),
  CONSTRAINT `result_ibfk_1` FOREIGN KEY (`studentId`) REFERENCES `student` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、DML语句
insert into student values(0,'2024-02-25 10:10:10','赵灵儿','123',
'15612345678',16,'女','逍遥哥哥,你终于找到我了。');
insert into student values(0,'2024-02-25 10:10:10','王语嫣','123',
'15612345678',17,'女','慕容复,我和你不共戴天。');
insert into student values(0,'2024-02-25 10:10:10','龙姑娘','123',
'15612345678',22,'女','我想过过过儿过过的日子。');
insert into student values(0,'2024-02-25 10:10:10','杨过','123',
'15612345678',18,'男','一遇杨过误终身。');
insert into student values(0,'2024-02-25 10:10:10','杨逍','123',
'15612345678',27,'男','杨过跟程英的大儿子。');
insert into student (userName,age,introduce)values('黄衣女子',26,'杨过与龙姑娘的大女儿。');
 
insert into result values(0,'政治',96,1);
insert into result values(0,'地理',86,5);
insert into result values(0,'政治',77,3);
insert into result values(0,'英语',99,3);
insert into result values(0,'历史',22,6);
insert into result values(0,'化学',69,2);
insert into result values(0,'Java',79,5);
insert into result values(0,'Java',67,6);
insert into result values(0,'政治',97,2);
insert into result values(0,'物理',76,6);
insert into result values(0,'物理',82,2);
insert into result values(0,'化学',56,4);
3、左外联结DQL语句
#两个标的联合查询以及分组排序与having筛选
select studentId '学号',userName '学生姓名',
sum(score) '学生科目总分',
count(score) '考试科目数量',
avg(score) '各科目平均分'
from result inner join student on result.studentId=student.id
# 重新使用学号进行分组
GROUP BY studentID,userName
HAVING avg(score)>60
ORDER BY avg(score) desc;


select * from result left join student on result.studentId=student.id;

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 实现 MySQL 多表树形结构递归可以采用以下步骤: 1. 创建一个包含父级ID的表,用于存储树形结构数据。 2. 在表中插入数据,并且每个数据项都有一个父级ID。 3. 使用递归查询获取树形结构数据。 以下是一个示例 SQL 代码,用于实现 MySQL 多表树形结构递归: ``` WITH RECURSIVE cte AS ( SELECT id, name, parent_id, 0 AS depth FROM category WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, depth + 1 FROM category c JOIN cte ON c.parent_id = cte.id ) SELECT id, name, parent_id, depth FROM cte; ``` 在上面的 SQL 代码中,我们使用了递归查询 (WITH RECURSIVE) 和联结 (JOIN) 的方式获取树形结构数据。其中,第一条 SELECT 语句用于获取根节点,即 parent_id 为 NULL 的数据项。随后,我们使用 UNION ALL 和 JOIN 语句来获取树形结构的各个节点。 最终,我们可以获取到一个包含 id、name、parent_id 和 depth 的树形结构数据。其中,id 表示节点的唯一标识符,name 表示节点的名称,parent_id 表示节点的父级ID,depth 表示节点的深度。 ### 回答2: MySQL多表树形结构递归实现是指使用多个表来构建一个树形结构,并通过递归方式来查询和操作这个树形结构。 在MySQL中,我们可以通过以下步骤来实现多表树形结构的递归查询: 1. 创建表格:首先,我们需要创建一个或多个表格来存储树形结构的数据。一般来说,这些表格包含一个主键字段和一个外键字段,外键字段用于建立表格之间的关系。 2. 插入数据:接下来,我们需要向表格中插入数据,以构建树形结构。通常,每个数据行都包含一个唯一的主键值和一个外键值,外键值指向其父节点的主键值。 3. 查询数据:使用递归查询的方法,我们可以从根节点开始,逐级向下遍历整个树形结构,找到所需的数据。在MySQL中,可以使用WITH RECURSIVE语句来实现递归查询。 4. 更新数据:如果需要修改树形结构中的数据,我们可以通过更新表格中的外键值来实现。例如,如果需要将一个节点从一个父节点移动到另一个父节点,可以通过更新该节点的外键值来实现。 总结而言,MySQL多表树形结构递归实现是一种使用多个表格和递归查询方法来构建和操作树形结构的方法。这种方法可以方便地查询和操作树形结构的数据,在很多场景下都具有较高的实用性。 ### 回答3: MySQL是一种广泛使用的关系型数据库管理系统,可以用于存储和管理大量的数据。在MySQL中,可以使用多个表结构来实现树形结构的递归。 在实现树形结构的递归时,首先需要创建一个包含树节点信息的表。该表至少应包含一个节点ID、节点名称、父节点ID等列。可以使用主键和外键约束来确保节点间的关系正确性。 接下来,可以通过使用递归查询来获取树形结构的数据。在MySQL中,可以使用WITH RECURSIVE子句来实现递归查询。该子句可以将表自身连接多次,从而实现递归查询。 具体步骤如下: 1. 创建一个包含树节点信息的表,例如节点表; 2. 在节点表中,定义一个主键列node_id和一个外键列parent_id,用于建立节点间的层次关系; 3. 使用WITH RECURSIVE子句编写递归查询语句,例如: WITH RECURSIVE cte (node_id, node_name, parent_id, level) AS ( SELECT node_id, node_name, parent_id, 0 FROM node_table WHERE node_id = 1 -- 将根节点的ID作为起点 UNION ALL SELECT n.node_id, n.node_name, n.parent_id, cte.level + 1 FROM node_table n INNER JOIN cte ON n.parent_id = cte.node_id ) SELECT * FROM cte; 4. 执行上述递归查询语句,即可获得树形结构的数据。 通过以上步骤,可以在MySQL中实现多表树形结构的递归查询。递归查询可以帮助我们快速获取树形结构的所有节点和层次关系,非常方便实用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值