多表连接查询是通过各个表之间共同列的关联性(例如:外键)来查询的。
多表连接查询的分类
内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行。
SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.通用字段名=表2.通用字段名
SELECT 字段列表 FROM 表1 ,表2 WHERE 表1.通用字段名=表2.通用字段名

如果两个表中有相同的字段名,必须在列名前加表名。否则将出现 错误代码:1052 Column ‘studentno’ in field list is ambiguous
查询学生的学号、姓名和成绩,并按照成绩降序排列
#第一种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s INNER JOIN result AS r
ON s.studentno=r.studentno ORDER BY r.studentresult DESC
#第二种写法
SELECT s.studentno,s.studentname,r.studentresult FROM
student AS s,result AS r
WHERE s.studentno=r.studentno
ORDER BY r.studentresult DESC
SELECT 字段列表 FROM 表1 join 表2 on 表1.通用字段名=表2.通用字段名
join 表3 on 表1.通用字段名=表3.通用字段名
join 表4 on 表4.通用字段名=表3.通用字段名
#...
;
自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候,是自己和自己连接,分别给父表和子表取两个不同的别名,然后附上连接条件。
SELECT c1.cname AS "父名称",c2.cname AS "子名称"
FROM tbl_category AS c1, tbl_category AS c2
WHERE c1.cid = c2.pid;
左表(表1)的记录将会全部表示出来,而右表(表2)只会显示符合匹配条件的记录。
#左外连接
SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 表1.通用字段名=表2.通用字段名

#右外连接
SELECT 字段列表 FROM 表1 RIGHT JOIN 表2
ON 表1.通用字段名=表2.通用字段名
右外连接:右表(表2)的记录将会全部表示出来,而左表(表1)只会显示符合匹配条件的记录。

| 操作符名称 | 描述 |
|---|---|
| INNER | JOIN 如果表中有至少一个匹配,则返回行 |
| LEFT JOIN | 不论右表是否有匹配,都会返回左表的所有行 |
| RIGHT JOIN | 不论左表是否有匹配,都会返回右表的所有行 |
