当前位置: 代码迷 >> SQL >> orcal sql基础三 联接
  详细解决方案

orcal sql基础三 联接

热度:371   发布时间:2016-05-05 14:19:26.0
orcal sql基础3 联接

连接 9i 之后的用法

?

1. ? cross join?笛卡尔积形式的连接 ? 相当于 select empno,ename,dname from emp , dept;

??没有太大的意义

2.???natural join?自然连接???

?? <1>? 从两张表中选出同名的列的值对应相等的所有行。

?? <2>? 如果两个表同名列的数据类型不同,则出错。

???<3>? 不允许参照列上使用表名或者别名作为前缀。

3.using 子句? select empo,ename,deptno,dname from emp,join??dept using (deptno);

可以指明按照哪几个字段连接。? 不用加上别名

4. on?? select empo,ename,a.deptno,dname from emp a,join? b?dept?on (a.deptno=b.deptno);

必须加上别名

5. 内连接? inner join? 只返回满足连接条件的数据

??? 外连接? outer join <1> left outer join???? 左外连接? 除了返回满足条件的行以外,还返回左表

?????????????????????????????????????????????????????????????????中不满足条件的行????????

?????????????????????????????? <2> right outer join?? 右外联接。。。。。还返回返回右表中不满足的行

???????????????????????????????<3> full outer join????? 满外联接。。。。。还返回两表中不满足条件的所有行。

这几种都配合 using 或? on? 使用

?

?

==================子查询注意事项===============

1? 在查询是基于未知值时应考虑使用子查询

2? 子查询必须包含在括号内

3? 建议将子查询放在比较运算符的右侧,以增强可读性。

4 除非进行Top-N (取前几名?)分析,否则不要在子查询中使用order by 子句。

5对单行子查询使用单行运算符

6对多行子查询使用多行运算符

?

?

===============多行子查询==============

?

运算符??????????????? 含义

in??????????????????????等于列表中的任何一个?? 只要等于in中的都查出来

any?????????????????? 和子查询返回的任意一个值比较?? 大于结果集中最小的

all???????????????????? 和子查询返回的所有值比较?? 大于结果集中最大的

?

?

=============Top-N分析=================

?

select? * from? emp?? order by sal? desc? rownum <5;

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?