除了前面讲到的 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接),还有另外一种关联方式,即 FULL OUTER JOIN(全外连接)
FULL OUTER JOIN :左表(table1)和右表(table2)匹配不上的数据行全部都会返回结果。
FULL OUTER JOIN 结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
语法:
SELECT columns
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
columns:要显示的列名。
table1:左表的名称。
table2:右表的名称。
column_name:表中用于连接的列名。
table1.column_name:表示table1表的column_name字段。
MySQL中不支持 FULL OUTER JOIN,实际应用时也基本用不到,这里也就不多做赘述了。
之前我们一直都是两张表进行关联,那么如何进行三张表的关联呢?
那就关联两次就好了,语法:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name
INNER JOIN table3
ON table1.column_name=table3.column_name;
columns:要显示的列名。
table1:左表的名称。
table2:右表的名称。
column_name:表中用于连接的列名。
table1.column_name:表示table1表的column_name字段。
例如:
将学生数据表,学生成绩表,课程数据表关联,查询每个学生的学生id,学生姓名,课程id,课程名,成绩,班级:
SELECT students.id,name,score.subject_id,subject_name,score,clazz
FROM score
INNER JOIN subject
ON score.subject_id = subject.subject_id
INNER JOIN students
ON students.id = score.id;
在使用SQL时,有时为了便于理解,提升可读性,可以为表名称或列名称指定别名。比如在结果中将列名显示为中文。
语法:
SELECT column_name AS alias_name
FROM table_name AS alias_name;
column_name:表中的实际列名;
table_name:表的实际表名;
alias_name:自己给表或者列取的别名;
示例:
查询subject表全列,结果以中文列名显示:
SELECT subject_id AS '课程id', subject_name AS '课程名'
FROM subject;
对上面三表关联的SQL语句进行优化,对表名设置别名:
SELECT c.id AS 学生id,
c.name AS 学生,
a.subject_id AS 课程id,
b.subject_name AS 课程名,
a.score AS 分数,
c.clazz AS 班级
FROM score AS a
INNER JOIN subject AS b
ON a.subject_id = b.subject_id
INNER JOIN students AS c
ON c.id = a.id;
本专栏将持续更新,对数据库SQL感兴趣的同学可以关注一下,谢谢!