关于 JOIN 耐心总结,学不会你打我系列( 三 )


文章插图
 
这时就解决了之前列存在重名,无法连接的情况 。
外连接左外连接: 左表是主表,右表时从表 。
SELECT * FROM Student as s LEFT JOIN Class as c on s.class_id = c.id;ORSELECT * FROM Student as s LEFT OUTER JOIN Class as c on s.class_id = c.id;右外连接:左表是从表,右表时主表 。
SELECT * FROM Student as s RIGHT JOIN Class as c on s.class_id = c.id;ORSELECT * FROM Student as s RIGHT OUTER JOIN Class as c on s.class_id = c.id;全外连接: 左外连接 + 右外的连接的合集
SELECT * FROM Student as s FULL JOIN Class as c ON s.class_id = c.id;

MySQL 中没有全外连接的概念 。
自连接:
SELECT c2.* FROM Class c1 JOIN Class c2 ON c1.number < c2.number and c1.name = "1年1班"; SQL92 和 SQL99 的对比
  1. SQL92 中的等值连接(内连接),非等值连接,自连接对应了 SQL99 的 ON 连接,用于筛选满足连接条件的数据行 。
  2. SQL92 的笛卡尔积连接,对应了 SQL99 的交叉连接 。
  3. SQL92 中的外连接并不包含全外连接,而 SQL99 支持,并且将 SQL92 中 WHERE 换为 SQL99 的 ON. 这样的好处可以更清晰的表达连接表的过程,更直观 。SELECT ... FROM table1 JOIN table2 ON filter_condition JOIN table3 ON filter_condition
  4. SQL99 多了自然连接和 USING 连接的过程,两者的区别是是否需要显式的指定列名 。
总结我们知道,在 SQL 中,按照年份划分了不同的标准,其中最为常用的是 SQL-92 和 SQL-99 两个标准 。
接着,对比了 92 和 99 两者的不同,发现 99 的标准在连接时,更加符合逻辑并且更加直观 。
 

【关于 JOIN 耐心总结,学不会你打我系列】


推荐阅读