简单题目,看看你是不是也会挂掉(关于left join)

   也许你看到这篇文章觉得很基础,别忙着吐糟,仔细想想,说不定你也会载在这个上面。关于left join 你到底了解多少?无论你是资深的老鸟还是刚入行的菜鸟,都会有所收获。也许某天你去面试的时候会突然碰到这样的一道题,心里会有所失望,竟然考这么简单的题!ON , 你错了,仔细想想会发现,结果会是这样的吗?

     先来看看你对left join 了解多少把:这里定义了两张表,数据如下:

复制代码
declare @order table(ID int,Name varchar(20))
declare @Detail table(ID int,Price float)

insert into @order(ID,Name) values(1,'aa'),(2,'bb'),(3,'cc')
insert into @Detail(ID,Price) values(1,10.5),(2,12.3),(4,5.9)

select * from @order
select * from @Detail
复制代码

如果运行一下:left join 的联合查询 

select * from @order o left join @Detail d on o.ID=d.ID

都别急着看运行结果,猜猜看结果会是怎样的呢?

结果是会显示出四列:ID Name ID Price 而如果要显示三列就不能用 * 而需要明确的指定列名。

如果这个答案你是正确的,那么我们来看看下面的条件又会出现什么结果呢?

select * from @order o left join @Detail d on 1=1

这个猜测看,我觉得会难道一大批人。这个是我们最熟悉而又最容易摔到的地方,这个语句运行后结果会是记录呢?看看结果吧!

结果出来的时候我们才会恍然大悟。

别急,精彩继续,或许有一天你会被问到 left join 与 left outer join 有什么区别,到底会有什么区别呢?我们来分别执行下下面的语句:

select * from @order o left join @Detail d on o.ID=d.ID
select * from @order o left outer join @Detail d on o.ID=d.ID


select * from @order o left join @Detail d on 1=1
select * from @order o left outer join @Detail d on 1=1

结果如下:

      他们的结果并未区别,这时才恍然大悟,原来只是被面试官给坑了。Left join 只不过是left outer join 的缩写而已,我们习惯了left join时就不会去管left outer join,当某天被突然提及时又有所怀疑。其实高级程序员并非能写出多么高深的代码,而是能将基础深入骨髓,而非似乎是这样。

posted @ 2012-07-13 22:00  超级塞亚人  阅读(269)  评论(0)    收藏  举报