连接 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;
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?