当前位置: 首页 > wzjs >正文

福鼎市城市建设监察大队网站上海市中小企业服务平台

福鼎市城市建设监察大队网站,上海市中小企业服务平台,中国最著名的40个建筑,大连旅顺口前言 在面试中以及实际开发中,多表联查是每个程序员必备技能,下文通过最简单的学生表和课程表的实例帮大家最快入门多表联查技能。 建立数据表 1. 学生表(students) 创建学生表 CREATE TABLE students (student_id INT AUTO_…

前言

在面试中以及实际开发中,多表联查是每个程序员必备技能,下文通过最简单的学生表和课程表的实例帮大家最快入门多表联查技能。

建立数据表

1. 学生表(students)

创建学生表

CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY,student_name VARCHAR(50) NOT NULL,gender ENUM('男','女') DEFAULT NULL,age TINYINT UNSIGNED
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入学生数据(20条)

INSERT INTO students (student_name, gender, age) VALUES
('李明', '男', 18), ('王芳', '女', 19), ('张伟', '男', 20),
('赵敏', '女', 18), ('陈强', '男', 19), ('周雪', '女', 20),
('黄磊', '男', 21), ('吴倩', '女', 19), ('徐洋', '男', 18),
('孙莉', '女', 20), ('马超', '男', 19), ('朱婷', '女', 21),
('何军', '男', 18), ('林琳', '女', 20), ('郑凯', '男', 19),
('胡月', '女', 21), ('郭涛', '男', 18), ('高菲', '女', 20),
('曹阳', '男', 19), ('丁薇', '女', 18);

得到以下结果
在这里插入图片描述

2. 课程表 (courses)

创建课程表

CREATE TABLE courses (course_id INT AUTO_INCREMENT PRIMARY KEY,course_name VARCHAR(50) NOT NULL,credit TINYINT UNSIGNED
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入课程数据(20条)

INSERT INTO courses (course_name, credit) VALUES
('高等数学', 4), ('大学英语', 3), ('计算机基础', 2),
('数据结构', 4), ('操作系统', 3), ('数据库原理', 4),
('计算机网络', 3), ('软件工程', 2), ('人工智能', 4),
('数字电路', 3), ('编译原理', 4), ('算法设计', 3),
('图形学', 2), ('机器学习', 4), ('网络安全', 3),
('移动开发', 2), ('大数据分析', 4), ('物联网技术', 3),
('嵌入式系统', 2), ('计算机组成', 4);

得到以下结果
在这里插入图片描述

3. 选课关系表 (student_courses)

创建选课关系表

CREATE TABLE student_courses (student_id INT NOT NULL,course_id INT NOT NULL,PRIMARY KEY (student_id, course_id),FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE,FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入选课关系

INSERT INTO student_courses (student_id, course_id) VALUES
(1,1), (1,3), (1,15),
(2,2), (2,14), (2,6),
(3,5), (3,17), (4,11), 
(4,13), (5,5), (7,2), 
(9,4), (9,16), (11,5), 
(13,17), (15,1), (16,13), 
(17,5), (18,12), (19,14), 
(19,16), (19,15), (19,17),          
(20,17), (20,19);

得到以下结果
在这里插入图片描述

多表联查理论及实现

1. 查询学生选课详情

以上需求可以使用隐式的内连接(INNER JOIN),只有当 ON 条件匹配时,记录才会被返回。
如果某个学生没有选课,或者某些课程没有学生选修,这些记录不会出现在结果中。
完整代码如下:

SELECT s.student_name, c.course_name 
FROM students s
JOIN student_courses sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id;

代码详解:

SELECT s.student_name, c.course_name

这部分指定了查询结果中需要显示的字段:

  • s.student_name:从 students 表中获取的学生姓名。
  • c.course_name::从 courses 表中获取的课程名称。

别名 s 和 c 分别代表 students 表和 courses 表。

FROM students s

查询的起点是 students 表,并给它指定了一个别名 s,以便在后续代码中简化引用。

JOIN student_courses sc ON s.student_id = sc.student_id

使用 JOIN 将 students 表与 student_courses 表连接起来。
连接条件是 s.student_id = sc.student_id,即学生的 ID 在两个表中必须匹配。
这一步是为了找到每个学生选了哪些课程(通过中间表 student_courses)。

JOIN courses c ON sc.course_id = c.course_id

再次使用 JOIN 将 student_courses 表与 courses 表连接起来。
连接条件是 sc.course_id = c.course_id,即课程的 ID 在两个表中必须匹配。
这一步是为了获取每个课程的具体信息(例如课程名称)。
查询结果
在这里插入图片描述

2. 统计课程选修人数

以上需求可以使用 INNER JOIN,结果会返回有学生选修的课程,而未被选修的课程不会出现在结果中。
使用 LEFT JOIN 可以确保所有课程都出现在结果中,即使它们没有被选修。

SELECT c.course_name, COUNT(sc.student_id) AS student_count 
FROM courses c
LEFT JOIN student_courses sc ON c.course_id = sc.course_id
GROUP BY c.course_id;

代码详解:

SELECT c.course_name, COUNT(sc.student_id) AS student_count

这部分指定了查询结果中需要显示的字段:

  • c.course_name::从 courses 表中获取的课程名称。
  • COUNT(sc.student_id):统计每个课程的学生数量。
  • sc.student_id 是 student_courses 表中的字段,表示选修该课程的学生 ID。

如果某课程没有任何学生选修,则 sc.student_id 的值为 NULL,COUNT 函数会忽略 NULL 值,因此返回的结果是 0。
别名 student_count 用于给统计结果命名。

FROM courses c

查询的起点是 courses 表,并给它指定了一个别名 c,以便在后续代码中简化引用。

LEFT JOIN student_courses sc ON c.course_id = sc.course_id

使用 LEFT JOIN 将 courses 表与 student_courses 表连接起来。
连接条件是 c.course_id = sc.course_id,即课程的 ID 在两个表中必须匹配。
LEFT JOIN 的特点:
它会保留左表(courses 表)的所有记录,即使右表(student_courses 表)中没有匹配的记录。
如果某课程没有任何学生选修,sc.student_id 的值将为 NULL,但该课程仍会出现在结果中。

GROUP BY c.course_id

按照 c.course_id 对结果进行分组。
每个课程对应一组数据,COUNT(sc.student_id) 会统计每个课程的学生数量。
查询结果
在这里插入图片描述

3. 查询未选课学生

SELECT s.* 
FROM students s
LEFT JOIN student_courses sc ON s.student_id = sc.student_id 
WHERE sc.course_id IS NULL;

代码详解

SELECT s.*

这部分指定了查询结果中需要显示的字段。
使用 s.* 表示从 students 表中获取所有字段(即所有学生信息)。
别名 s 是 students 表的简写。

FROM students s

查询的起点是 students 表,并给它指定了一个别名 s,以便在后续代码中简化引用。

LEFT JOIN student_courses sc ON s.student_id = sc.student_id

使用 LEFT JOIN 将 students 表与 student_courses 表连接起来。
连接条件是 s.student_id = sc.student_id,即学生的 ID 在两个表中必须匹配。
LEFT JOIN 的特点:
它会保留左表(students 表)的所有记录,即使右表(student_courses 表)中没有匹配的记录。
如果某学生没有选修任何课程,则 sc.course_id 的值将为 NULL。

WHERE sc.course_id IS NULL

过滤条件是 sc.course_id IS NULL,即只选择那些在 student_courses 表中没有匹配记录的学生。
换句话说,这部分筛选出的是没有选修任何课程的学生
查询结果
在这里插入图片描述


文章转载自:

http://uHMl7lSg.ngpLy.cn
http://rQbWAAgQ.ngpLy.cn
http://6haPrTh4.ngpLy.cn
http://rWHkM0NG.ngpLy.cn
http://1VA2XrJ0.ngpLy.cn
http://fvZGyw8Q.ngpLy.cn
http://c8E1Cs9U.ngpLy.cn
http://U9cgzXjy.ngpLy.cn
http://BdeHZKFU.ngpLy.cn
http://UC4XrZrp.ngpLy.cn
http://P9SUfPSl.ngpLy.cn
http://GOPgcfjU.ngpLy.cn
http://7cM4yp30.ngpLy.cn
http://jx16xgm1.ngpLy.cn
http://NKfrG2Mn.ngpLy.cn
http://In8dkphS.ngpLy.cn
http://wsE1cupX.ngpLy.cn
http://0ICZuGco.ngpLy.cn
http://gYHNWnQl.ngpLy.cn
http://KOM8ky3i.ngpLy.cn
http://47y3jmkk.ngpLy.cn
http://vpwZWX8k.ngpLy.cn
http://Z1kma3bh.ngpLy.cn
http://TxjAREmg.ngpLy.cn
http://xDD4LYp2.ngpLy.cn
http://w1zOMyvU.ngpLy.cn
http://ELKpX1M5.ngpLy.cn
http://XGNflST8.ngpLy.cn
http://Ekof1MS5.ngpLy.cn
http://Mqy9Npkw.ngpLy.cn
http://www.dtcms.com/wzjs/664993.html

相关文章:

  • 中国寰球工程有限公司网站设计企业公示信息查询系统贵州
  • 网站建设企业建站要求网站如何建设与优化
  • 济南网站优化公司杭州公司注册费用
  • 服务好的企业做网站北京黄页电话查询
  • 网站模板代理电话课程分销平台
  • 购物网站静态页面适合个人开发的小程序创意
  • 网站301重定向 权重转移网页ui设计教程
  • 简历模板免费网站金华专业网站建设公司
  • 有网站建设费科目吗html网站建设方案
  • 网站建设技术合作合同书肥城网站建设
  • 即墨建设局网站开网上授课的网站应该怎么做
  • 青岛崂山区网站建设网站维护页面
  • 设计网站页面设计网站制作价格是多少元
  • 深圳做网站做app萧山网
  • 南通企业建站模板通用网站建设需求分析
  • 如果网站打开非常缓慢接app推广的单子在哪接
  • 网站 目录 结构wordpress怎么播放视频教程
  • 做标签网站网站建设网页设计培训班
  • 毕业设计做网站起个名字做网站建设公司
  • 中昌国际建设集团网站儿童 网站 设计
  • 北京中航空港建设工程有限公司网站中国建设银行官网的网站首页
  • 深圳学网站开发公司设计网站需要多久
  • 网站建设实训报告命名规范站长seo
  • 网站建设的书籍知乎php网站开发报告
  • 长春网站快照优化公司小程序商城有哪些平台
  • 国外网站建设的发展安卓电商app开发
  • 个人做美食视频网站wordpress开发管理系统
  • 建设厅网站首页社交电商app软件有哪些
  • 上海网站建设公司联系方式网站内容转载
  • 辉县市建设局网站备案的时候需要网站吗