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

成都微网站开发做app的网站

成都微网站开发,做app的网站,如何搭建一个服务平台,网络营销策划书的结构前言 在面试中以及实际开发中,多表联查是每个程序员必备技能,下文通过最简单的学生表和课程表的实例帮大家最快入门多表联查技能。 建立数据表 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://www.dtcms.com/wzjs/202781.html

相关文章:

  • 费县住房和城乡建设局网站网站建设
  • 哪里做网站公司好排名第一的手机清理软件
  • 建网站莱阳哪家强?seo自学网app
  • 做食品网站南京网站推广公司
  • vs做网站如何放背景图seo上首页
  • 做门户网站那个系统好万词霸屏百度推广seo
  • 廊坊企业网站建设百度一下首页官网下载
  • 沈阳做网站的企业电商运营
  • mac中类似wordpress百度seo搜索引擎优化厂家
  • wordpress瀑布主题seoer是什么意思
  • 深圳网站建设公司联系方式赵阳竞价培训
  • 免备案建网站武汉今日新闻头条
  • 个人网站主页html5阿里指数数据分析平台官网
  • 网站域名怎么购买交换链接案例
  • 网站建设步骤图片素材网站seo优化8888
  • 高质量的中山网站建设八爪鱼磁力搜索引擎
  • asp做网站优点整合营销方案案例
  • 酒店网站规划建设方案书品牌关键词优化
  • 做暧暧视频网站下载域名网站
  • html5公司网站欣赏seo基础培训机构
  • 网站开发项目报价方案seo网络优化是做什么的
  • 做3d教学网站培训网站推荐
  • 济南市网站建设广州aso优化公司 有限公司
  • aws个人免费版企业网站优化方案案例
  • cookie做网站访问量代写平台在哪找
  • 网站关键词可以添加吗精准粉丝引流推广
  • 怎么网站设计湖南seo技术培训
  • 公司网站与营销网站在栏目上的不同搜索引擎优化英文简称为
  • 专业网站建设信息全国最新疫情最新消息
  • 做网站会不会亏本百度seo网络营销书