5月23日数据库学习笔记

一、多表查询概述
多表查询是指在数据库中同时对两个或多个表进行数据查询操作,通过表之间的关联关系,获取满足条件的数据集合。它是数据库查询中的重要技术,能够满足复杂的业务场景需求。
二、表的关联方式
内连接(INNER JOIN)
概念 :内连接是最常用的连接方式,它返回两个表中满足连接条件的行。只有当两个表中存在匹配的行时,才会返回结果。
语法 :SELECT 列名 1,列名 2,... FROM 表 1 INNER JOIN 表 2 ON 表 1.关联列 = 表 2.关联列;
示例 :假设有学生表(student)和成绩表(score),学生表包含学号(s_id)、姓名(s_name)等字段,成绩表包含学号(s_id)、课程名(course_name)、成绩(score)等字段。
SELECT student.s_name, score.course_name, score.score
FROM student
INNER JOIN score ON student.s_id = score.s_id;
这个查询将返回所有有成绩记录的学生的姓名、对应的课程名和成绩。
左连接(LEFT JOIN)
概念 :左连接会返回左表(即 “LEFT JOIN” 左边的表)的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,则相应的列显示为 NULL。
语法 :SELECT 列名 1,列名 2,... FROM 表 1 LEFT JOIN 表 2 ON 表 1.关联列 = 表 2.关联列;
示例 :同样是学生表和成绩表,使用左连接:
SELECT student.s_name, score.course_name, score.score
FROM student
LEFT JOIN score ON student.s_id = score.s_id;
即使有些学生没有成绩记录,也会显示他们的姓名,而成绩相关的列显示为 NULL。
右连接(RIGHT JOIN)
概念 :与左连接相反,右连接返回右表的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,则相应的列显示为 NULL。
语法 :SELECT 列名 1,列名 2,... FROM 表 1 RIGHT JOIN 表 2 ON 表 1.关联列 = 表 2.关联列;
示例 :继续以学生表和成绩表为例,使用右连接:
SELECT student.s_name, score.course_name, score.score
FROM student
RIGHT JOIN score ON student.s_id = score.s_id;
即使有些成绩记录没有对应的学号(可能数据异常等情况),也会显示所有成绩记录,而学生姓名可能显示为 NULL。
全连接(FULL JOIN)
概念 :全连接返回左表和右表中所有行的组合,无论是否满足连接条件。如果某表中没有匹配的行,则相应的列显示为 NULL。在 MySQL 中不直接支持 FULL JOIN,但可以通过 UNION(ALL)来实现。
语法示例(通过 UNION 实现) :SELECT 列名 1,列名 2,... FROM 表 1 LEFT JOIN 表 2 ON 表 1.关联列 = 表 2.关联列
UNION ALL
SELECT 列名 1,列名 2,... FROM 表 1 RIGHT JOIN 表 2 ON 表 1.关联列 = 表 2.关联列

posted @ 2025-05-23 23:33  头发少的文不识  阅读(13)  评论(0)    收藏  举报