Oracle_4 sql标准 连接 select小结
sql标准
sql92标准中的连接条件和数据过滤条件都是混在where语句中,这样使人很同意混淆,如下面语句:
为了解决这个问题,sql99标准改善了这个问题,用join语句表示连接条件,where中只剩下数据过滤
条件。新的语法定义比较清晰,语句更容易读,如以下语句:
若是等值连接还有另一种简便的写法,如以上可写成:
但是不推荐这一种写法,因为这种写法不易让人理解,也容易出错用join连接3个表,这种写法比用
where更容易理解,如下:
左外连接:会把左边那张表的多余的数据(不能和另外一张表产生连接的数据)显示出来
左向外联接的结果集包括left子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某
行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
右内连接: 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有
匹配行,则将为左表返回空值
完整连接: 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的
选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值
select小结:select实例:
--求部门中哪些人的薪水最高
--求部门平均薪水的等级
--比普通员工的最高薪水还要高的经理人名称
最后说一个面试题:比较下面两条语句的执行效率:
两条语句在执行时理论上是第一条效率较高,因为匹配数字比匹配字符串更快,所以先过滤掉数字效率
会更高些但是在实际应用中,比如oracle数据库中,在使用第2条语句时,oracle会自动优化查询,它仍
然会像第1条语句那样执行,所以在具体的数据库中他们的效率还要看具体情况