MYSQL 命令之 JOIN 命令
MYSQL 命令之 JOIN 命令
概述:
MYSQL 命令中的 JOIN 命令是学习数据库最为重要的命令之一,但是JOIN 命令比较多,包裹(INNER JOIN,LEFT JOIN,RIGHT JOIN),加之比较复杂,让人晦涩难懂,在此,小编通过 文氏图 Venn diagrams解释了SQL的 JOIN 命令,希望对大家有所帮助。
join 用于多表中字段之间的联系,语法如下:
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona
table1:左表;table2:右表。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。
LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
注意:
mysql不支持Full join,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join.
students 表
select * from students;
scores 表
select * from scores;
1. 常用几种 JOIN 之间的关系(前者相当于后者的缩写)
2. JOIN = inner join
内连接,也叫等值连接,inner join产生同时符合A和B的一组数据。
eg:
SELECT stu.id,stu.name,sco.course_name,sco.course_score FROM students stu INNER JOIN scores sco ON stu.id = sco.student_id;
3. LEFT JOIN = left outer join
left join,(或left outer join:在Mysql中两者等价,推荐使用left join.)左连接从左表(A)产生一套完整的记录,与匹配的记录(右表(B)) .如果没有匹配,右侧将包含null。
eg:
SELECT stu.id,stu.name,sco.course_name,sco.course_score FROM students stu LEFT JOIN scores sco ON stu.id = sco.student_id;
如果想只从左表(A)中产生一套记录,但不包含右表(B)的记录,可以通过设置where语句来执行,如下:
SELECT stu.id,stu.name,sco.course_name,sco.course_score FROM students stu LEFT JOIN scores sco ON stu.id = sco.student_id WHERE sco.id IS NULL;
4. RIGHT JOIN
right join 与 left join 相反
总结:
一般在开发中也只会用到这几种连接,其他的连接基本用不到。
一般也只会两张表连接,最多三张表,其实不管多少张,JOIN 原理都是一样的,都是前边的查询结果再与后者JOIN 的表进行连接。
浙公网安备 33010602011771号