2.1 示例
[题目] 从 scott 用户的 emp/dept 表中,找到“来自芝加哥最有钱的那个人”。
首先,我们需要理清思路。
这里总共有两个条件:
- 这个人来自芝加哥
- 这个人是最有钱的,而且是芝加哥最有钱的
我们可以看出,第二个条件是依赖第一个条件的。
所以,分两步查询:
- 找出所有来自芝加哥的人
- 从这些人中,找到最有钱的那个。这一步,可以通过 max 函数或者 order by 方式实现。
下面是语句示例:
---- 第一步:找到来自芝加哥的所有人。下面两种写法等价:
select e.* from emp e
join dept d on (e.deptno=d.deptno)
where d.loc='CHICAGO';
select e.* from emp e, dept d
where d.deptno = e.deptno
and d.loc='CHICAGO';
---- 第二步,基于上面结果,筛选出最有钱的那个
-- 可以通过 max 函数
select e.* from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO'
and sal =
(select max(sal) from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO');
-- 可以通过 order by 方式
select ename from
(select e.*, d.* from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO'
order by sal desc)
where rownum = 1;
注意,实现的方式,不止上面的那些。但总体 思路 是一样的。
所以,思路永远是最重要的。
2.1 示例
[题目] 从 scott 用户的 emp/dept 表中,找到“来自芝加哥最有钱的那个人”。
首先,我们需要理清思路。
这里总共有两个条件:
- 这个人来自芝加哥
- 这个人是最有钱的,而且是芝加哥最有钱的
我们可以看出,第二个条件是依赖第一个条件的。
所以,分两步查询:
- 找出所有来自芝加哥的人
- 从这些人中,找到最有钱的那个。这一步,可以通过 max 函数或者 order by 方式实现。
下面是语句示例:
---- 第一步:找到来自芝加哥的所有人。下面两种写法等价:
select e.* from emp e
join dept d on (e.deptno=d.deptno)
where d.loc='CHICAGO';
select e.* from emp e, dept d
where d.deptno = e.deptno
and d.loc='CHICAGO';
---- 第二步,基于上面结果,筛选出最有钱的那个
-- 可以通过 max 函数
select e.* from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO'
and sal =
(select max(sal) from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO');
-- 可以通过 order by 方式
select ename from
(select e.*, d.* from emp e, dept d
where e.deptno = d.deptno
and d.loc='CHICAGO'
order by sal desc)
where rownum = 1;
注意,实现的方式,不止上面的那些。但总体 思路 是一样的。
所以,思路永远是最重要的。