sql连接的分类:
一般基于 ANSI 标准的 SQL 列出了五种 JOIN 方式:
内连接(INNER JOIN)
全外连接(FULL OUTER JOIN/FULL JOIN)
左外连接(LEFT OUTER JOIN/LEFT JOIN)
右外连接(RIGHT OUTER JOIN/RIGHT JOIN)
交叉连接(CROSS JOIN)
注意:没有左内连接盒右内连接
外连接
1.左外连接
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的 所有选择列表列均为空值。
select * from jobmark LEFT JOIN student on jobmark.id=student.id
2.右外连接
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
select * from jobmark RIGHT JOIN student on jobmark.id=student.id
3.全外连接
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,
则整个结果集行包含基表的数据值。
mysql不支持直接的全连接即:select * from jobmark FULL OUTER JOIN student on jobmark.id=student.id 会报错但是可以使用合并连接来实现
select * from jobmark LEFT JOIN student on jobmark.id=student.id UNION SELECT * from jobmark RIGHT JOIN student on jobmark.id=student.id
内连接
1.相等连接
内连接为 两个表中必须都同时满足条件时,也可以说是两个表中都必须在另一个表中有对应的项,而不能为空。才返回该行。
select * from jobmark INNER JOIN student on jobmark.id=student.id
或者
select * from jobmark,student WHERE jobmark.id=student.id
2.自然连接
对等价连接的进一步特例化,匹配相同的列(只要名字相同就可以,类型不同也可以)。
SELECT * from jobmark NATURAL JOIN student
表数据
查询结果:
3.交叉连接
交叉连接即返回这两个集合的笛卡尔积。这其实等价于内连接的链接条件为"永真",或连接条件不存在.
select * from jobmark CROSS JOIN student
等同于
select * from jobmark,student