oracle多表联合查询,统计查询,组函数,order by,having,子查询
多表联合查询
通过连接可以建立多表查询,多表查询的数据可以来自多个表,但是表之间必须有适当的连接条件。为了从多张表中查询,必须识别连接多张表的公共列。一般是在WHERE子句中用比较运算符指明连接的条件。
忘记说明表的连接条件是常见的一种错误,这时查询将会产生表连接的笛卡尔积(即一个表中的每条记录与另一个表中的每条记录作连接产生的结果)。一般N个表进行连接,需要至少N-1个连接条件,才能够正确连接。两个表连接是最常见的情况,只需要说明一个连接条件。
两个表的连接有四种连接方式:
* 相等连接。
* 不等连接。
* 外连接。
* 自连接。
1.相等连接
通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。
显示雇员的名称和所在的部门的编号和名称。
执行以下查询:
Sql代码
1.SELECT emp.ename,emp.deptno,dept.dname FROM emp,dept
2. WHERE emp.deptno=dept.deptno;
SELECT emp.ename,emp.deptno,dept.dname FROM emp,dept
WHERE emp.deptno=dept.deptno;
执行结果如下:
Sql代码
1.ENAME DEPTNO DNAME
2. ------------- ------------------------ - ----------
3. SMITH 20 RESEARCH
4. ALLEN 30 SALES
ENAME DEPTNO DNAME
------------- ------------------------ - ----------
SMITH 20 RESEARCH
ALLEN 30 SALES
说明:相等连接语句的格式要求是,在FROM从句中依次列出两个表的名称,在表的每个列前需要添加表名,用“.”分隔,表示列属于不同的表。在WHERE条件中要指明进行相等连接的列。
以上训练中,不在两个表中同时出现的列,前面的表名前缀可以省略。所以以上例子可以简化为如下的表示:
SELECT ename,emp.deptno,dname FROM emp,dept
WHERE emp.deptno=dept.deptno;
2.外连接
在以上的例子中,相等连接有一个问题:如果某个雇员的部门还没有填写,即保留为空,那么该雇员在查询中就不会出现;或者某个部门还没有雇员,该部门在查询中也不会出现。
为了解决这个问题可以用外连,即除了显示满足相等连接条件的记录外,还显示那些不满足连接条件的行,不满足连接条件的行将显示在最后。外连操作符为(+),它可以出现在相等连接条件的左侧或右侧。出现在左侧或右侧的含义不同,这里用如下的例子予以说明。
使用外连显示不满足相等条件的记录。
步骤1:显示雇员的名称、工资和所在的部门名称及没有任何雇员的部门。
执行以下查询:
Sql代码
1.SELECT ename,sal,dname FROM emp,dept
2. WHERE emp.deptno(+)=dept.deptno;
SELECT ename,sal,dname FROM emp,dept
WHERE emp.deptno(+)=dept.deptno;
执行结果为:
Sql代码
1.ENAME SAL DNAME
2. ------------------- -------------- ------------------------
3.CLARK 2450 ACCOUNTING
4. KING 5000 ACCOUNTING
5. MILLER 1300 ACCOUNTING
6. ...  
相关新闻>>
- 发表评论
-
- 最新评论 更多>>