今天被面试了,有点惨,我感觉我学的东西还是挺多的,尤其是在JAVA方面,通过面试,我发现我平时学的东西有点糙了,虽然大面上的东西我都是知道的,并且我很注重了解事物的最本质的原理,不要沙上建塔。但是今天面试才发现,虽然一些大概的原理我都是知道的,但是可能是接触的实际的编程比较少,或者是别的其他的原因,我发现我对一些知识掌握的是非常的不够的细致。
今天的面试在SQl这个环节上真的是完败了,还好是电话面试,不然我真的不知所措了,悲剧啊,一定要记下来,防止惨案再次的发生。本科的课程基本上将软件开发的知识完整的摸了一遍,但是也就摸了一遍,至于摸得又多深,手感好不好,那就完全是另外一码事了。我记得那时候我在数据库原理课上是上机实验了的,并且最后成绩还有九十多分呢,但是现在看来完全是一坨屎啊。
关系数据库当中的数据主要是表的形式保存的,而我们不可能将所有的数据保存在一张表中,所以当我们需要查询一条分成两段存储于两张表当中的数据的时候,必须要把这两张表结合起来,至于结合的方式,在SQL当中是以叉乘为基础的,当然也就是笛卡尔集,然后在此基础上进行过滤。表现在SQL语言上,就是考虑到各种实际情况的连接操作,查了一下书,连接操作主要包括两类:外连接(outer join),内连接(inner join)。然后细分的话,外连接主要分为:左外连接(left outer join),右外连接(right outer join),全连接(full join)。内连接操作主要包括:等连接(inner join),自然连接(natural join),交叉连接(cross join)。
不同的数据库会有一些扩展,比如SQLServer会有融合连接(merge join)等等。
其实我一直有个问题,连接的过程当中,不论是相当的连接还是不等的连接,使用的谓词除了相当之外,还有别的谓词可以使用吗?虽然使用不等的谓词的意义并不是很大。怎么说呢,是一种语义学上的问题,一直想知道。
至于这几种连接的区别,内连接表示连接不相等的组合都不显示,外连接表示表示会保留一部分,具体表现在左外连接会保留左边的表的内容,右边的保存右边的表,全外连接保存每个表至少一条。
说的不怎么清楚,要看例子的话,请参见维基百科:http://zh.wikipedia.org/wiki/%E8%BF%9E%E6%8E%A5_(SQL),这里有很详细的例子。