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字句条件

猜你喜欢

转载自zwxiaole.iteye.com/blog/1838120