sql 语句的 内连接 外连接 以及 交叉连接
sql的连接 分为三大类
1.内连接 2.外连接 3.交叉连接
?
1.内连接
内连接又分为3类? inner join
等值连接,不等值连接,自然连接
select *from table1 join table2? on table1.条件列名 = table2.条件列名
等价于
?select table1.* ,table2.* from table1 A ,table2 B where table1.条件列名 =table2.条件列名
?select * form table1 cross join table2 where table1.条件列名 = table2.条件列名
2.外连接
外连接分也分为3类
左向(外)连接 left (outer) join
取得的结果个数 = 左表的个数 如果连接后面带了条件 那么右表中不匹配的那个字段显示为null(这种情况只适用于2表之间满足一个条件的记录各表都只有一条 如果对应有多条记录 那么不能那么计算)
右向(外)连接 right(outer) join
取得的结果个数 = 右表的个数 如果连接后面带了条件 那么左表中不匹配的那个字段显示为null(这种情况只适用于2表之间满足一个条件的记录各表都只有一条 如果对应有多条记录 那么不能那么计算)
全(外)连接 full (outer)join
取得的结果个数 = 符合条件匹配的行数+左表未匹配到的行数+右表未匹配到的行数(这种情况只适用于2表之间满足一个条件的记录各表都只有一条 如果对应有多条记录 那么不能那么计算)
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。???
3交叉连接
cross join 取笛卡尔积
1.没有 WHERE 子句的交叉联接
将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小
即 没有where字句? 取得的结果个数 = 左表行数 乘以 右表行数
注意 不带where字句的交叉连接相当于 select * from table1,table2
即 select * from table1,table2?? 等价于 select * from? table1CROSS JOIN table2;
2.有where字句的交叉连接
相当于内连接 +where字句条件
?