sql server几种Join的区别测试方法
主要来介绍下InnerJoin,FullOutJoin,CrossJoin,LeftJoin,RightJoin的区别。
InnerJoin:筛选两边都有的记录
FullOutJoin:两边都筛选出来,匹配能匹配的,不能匹配的用NULL列出
CrossJoin:列出两边所有组合,也称为笛卡尔集A×B
LeftJoin:以左边的表为主表,列出主表所有记录,匹配能匹配的,不能匹配的用NULL列出
RightJoin:以右边的表为主表,列出主表所有记录,匹配能匹配的,不匹配的用NULL列出
下面来看代码:
创建测试表:
CREATETABLECONSUMERS ( CONSUMER_IDINTNOTNULL, CONSUMER_NAMEVARCHAR(10)NOTNULL ) CREATETABLEORDERS ( CONSUMER_IDINTNOTNULL, ORDER_IDVARCHAR(10)NOTNULL)
编测试数据
INSERTCONSUMERSVALUES(1,'AA') INSERTCONSUMERSvalues(2,'BB') INSERTCONSUMERSvalues(3,'CC') INSERTORDERSVALUES(2,'O100001') INSERTORDERSVALUES(3,'O100002') INSERTORDERSVALUES(3,'O100003') INSERTORDERSVALUES(4,'O100004')
测试
--InnerJoin --筛选两边都有的记录 SELECT* FROMORDERSoINNERJOINCONSUMERSc ONo.CONSUMER_ID=c.CONSUMER_ID --FullOutJoin --两边都筛选出来,匹配能匹配的,不能匹配的用NULL列出 SELECT* FROMORDERSoFULLOUTERJOINCONSUMERSc ONo.CONSUMER_ID=c.CONSUMER_ID --CrossJoin --列出两边所有组合,即笛卡尔集A×B SELECT* FROMORDERSoCROSSJOINCONSUMERSc --LeftJoin --以左边的表为主表,列出主表所有记录,匹配能匹配的,不能匹配的用NULL列出 SELECT* FROMCONSUMERScleftjoinORDERSo onc.CONSUMER_ID=o.CONSUMER_ID --RightJoin --以右边的表为主表,列出主表所有记录,匹配能匹配的,不能匹配的用NULL列出 SELECT* FROMCONSUMERScRIGHTJOINORDERSo onc.CONSUMER_ID=o.CONSUMER_ID
ok了,具体的大家可以参考毛票票以前发布的文章。