内连接(INNER JOIN)
内连接是最常用的一种连接方式,它只返回两个表中满足连接条件的记录,假设我们有两个表:students
和scores
,我们希望查找选修了课程号为C05109的学生的学号、姓名和期末成绩,可以使用如下SQL语句:
SELECT student.studentno, sname, final FROM student INNER JOIN score ON student.studentno = score.studentno WHERE score.courseno = 'c05109';
或者使用隐式内连接的方式:
SELECT student.studentno, sname, final FROM student, score WHERE student.studentno = score.studentno AND score.courseno = 'c05109';
外连接(OUTER JOIN)
外连接分为左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN),它们分别返回左表或右表的所有记录,即使另一张表中没有匹配的记录。
左外连接:返回左表的所有记录,以及右表中匹配的记录,如果右表中没有匹配的记录,则结果集中该部分为NULL。
SELECT student02.studentno, sname, daily, final FROM student02 LEFT JOIN score1 ON student02.studentno = score1.studentno;
右外连接:返回右表的所有记录,以及左表中匹配的记录,如果左表中没有匹配的记录,则结果集中该部分为NULL。
SELECT teacher.teacherno, tname, major, courseno FROM teacher RIGHT JOIN teach_course ON teacher.teacherno = teach_course.teacherno;
交叉连接(CROSS JOIN)
交叉连接返回两个表的笛卡尔积,即所有可能的行组合,这种方式在实际使用中较少,因为它会产生大量的数据。
SELECT student.studentno, sname, score.* FROM student CROSS JOIN score;
多表连接
在实际应用中,经常需要连接多个表,查询每个学生的姓名、课程名和期末成绩,可以涉及三个表:students
、scores
和courses
,可以使用如下SQL语句:
SELECT student.studentno, sname, course.cname, final FROM student INNER JOIN score ON student.studentno = score.studentno INNER JOIN courses ON score.courseno = courses.courseno;
FAQs
Q1: MySQL中的INNER JOIN和OUTER JOIN有什么区别?
A1: INNER JOIN只返回两个表中满足连接条件的记录,而OUTER JOIN返回左表或右表的所有记录,即使另一张表中没有匹配的记录,LEFT OUTER JOIN返回左表的所有记录及右表中匹配的记录,RIGHT OUTER JOIN则返回右表的所有记录及左表中匹配的记录。
Q2: 在什么情况下应该使用CROSS JOIN?
A2: CROSS JOIN应谨慎使用,因为它会生成两个表的笛卡尔积,可能导致大量数据的产生,通常只在需要列出所有可能的组合时才会使用CROSS JOIN。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1104832.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复