详解多表链接查询
一、概念的理解:
检索对象为多个表(或视图)时,出现在from后面的不再是一个表(或视图),而是多个表(或视图)的检索对象序列,这样的查询即为多表链接查询。
二、多表查询的处理过程:
先通过计算多个表的笛卡儿积,然后再按join子句的连接条件和where子句的检索条件从中取出满足查询要求(条件)的行。
注:多表链接查询时,若多个表中具有相同的列名,则在引用列名时必须加表名前缀或别名前缀。
三、join子句类型:
交叉连接:
即求两个表的笛卡儿积。
例:select * from table1 cross join table2
内连接:
需要明确列出连接条件。连接条件可以是任何关系表达式或逻辑表达式。
例:select * from table1 ,table2 where table1.id=table2.id
select * from table1 join table2 on table1.id=table2.id
注:内连接只输出满足条件的结果行。
左连接:
规定所有的输出记录都依据连接的左表生成,返回记录为满足连接条件的记录。
例:select * from table1 left join table2 on table1.id=table2.id
注:若右表没有对应的满足连接条件的记录,则只返回相应的左表记录,对应的右表列取空值(null)。
右连接:
右连接与左连接刚好相反,它依据右表生成结果行。
例:select * from table1 right join table2 on table1.id=table2.id
注:若左表没有对应的满足连接条件的记录,则只返回相应的右表记录,对应的左表列取空值(null)。
以上写得不足的地方,请给予指出,欢迎各位拍砖。。。