SQL学习笔记(三)——联表查询
在SQL中联表查询是非常常见的操作,因为在实际开发中,不同的数据表之间往往存在着复杂的关联关系。本文将会介绍联表查询以及如何进行复杂多表联查。
基本联表查询
联表查询是SQL中最常用的查询之一,其基本语法如下:
SELECT 列名1,列名2...列名n FROM 表1,表2 WHERE 表1.列名 = 表2.列名;
例:假设我们有两个表student和course,其表结构如下:
-- 学生表 student
CREATE TABLE `student` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`sex` varchar(2) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 课程表 course
CREATE TABLE `course` (
`course_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`teacher` varchar(20) NOT NULL,
PRIMARY KEY (`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我们想查询所有学生所选的课程信息,该怎么办呢?我们可以使用下面的SQL语句:
SELECT student.name, course.name
FROM student, course, student_course
WHERE student.student_id = student_course.student_id
AND course.course_id = student_course.course_id
在上述查询语句中,我们使用SELECT
关键字从两个表中选取所需列,即学生姓名和课程名。同时,我们也需要用到FROM
关键字指定表名以及相关联的表名(在这里使用了student_course表来连接学生表和课程表)。接下来,我们通过WHERE
条件指定表关联条件,student.student_id = student_course.student_id
表示学生表ID和student_course表中学生ID相等, course.course_id = student_course.course_id
表示课程表ID和student_course表中课程ID相等。最后,我们得到了我们想要的学生和课程的信息。
多表联查
在实际应用中,我们常常需要从多张表中提取需要的数据。例如,我们需要查询每个学生所选的课程及课程的授课教师,我们可以通过如下 SQL 语句进行多表关联查询:
SELECT student.name, course.name, teacher.name
FROM student, course, teacher, student_course, course_teacher
WHERE student.student_id = student_course.student_id
AND course.course_id = student_course.course_id
AND course.course_id = course_teacher.course_id
AND teacher.teacher_id = course_teacher.teacher_id
在多表联查中,需要考虑的关联关系更加复杂。查询语句中同时涉及到student
、course
和teacher
三张表,并且我们需要用另外两张关系表student_course
和course_teacher
来建立这些表之间的关联关系。
需要注意的是,在多表联查过程中,一定要确保关联条件的正确性,并且不应该出现歧义。
小结
本文介绍了SQL中关联联表查询的基本语法。通过联表查询,我们可以轻松地查询到多个表中的数据,并通过关联条件将这些数据串联成我们想要的结果。联表查询常常用于复杂查询场景,例如多表联查、数据统计等。若想熟练掌握SQL联表查询的技巧,需要不断进行实战练手,此外需要有扎实的SQL语言基础。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sql学习笔记(三)——联表查询 - Python技术站