如果你(因为你写的)手头的“雇员”表,您可以从中选择3列,并创建一个新的表像这样:
create table ls
as
select
employee_id
, last_name
, department_id
from employees;
请注意,这是一个组合一个SELECT和一个CREATE TABLE。按照......选择首先执行的思路,其输出用于“写入”称为ls的新表。
现在,你可以尝试这样的事情(下面的查询说明):
select *
from ls
where department_id = (
select department_id
from ls
where last_name = 'De Haan'
)
;
看(主查询)WHERE子句。 department_id必须与名字为'De Haan'的人工作的department_id相等。首先,子查询(写在圆括号中)选择一个department_id。这个department_id然后在主查询的WHERE中使用。在主查询中使用“相等”符号时,子查询必须返回一个值。您可以尝试这一点通过自身即
select department_id from ls where last_name = 'De Haan';
运行子查询如果你的子查询返回多个值,使用IN(...),例如
select *
from ls
where department_id in (
select department_id
from ls
where last_name = 'King'
)
;
您可以使用Oracle的APEX( apex.oracle.com)如果你需要一个练习环境。只需要一个工作区。
补遗(实施例2页涉及的表):假设,在后一阶段中,我们发现,对LS表需要一salary列,所以我们添加一个。
alter table ls
add salary number ;
这一栏是空的 - 通过执行检查:
select * from ls;
现在,我们希望从员工表中的原始工资值来填充新列。我们可以为此使用子查询。请注意,UPDATE没有WHERE子句,即它将更新所有行。 SELECT的WHERE子句与2个表的employee_id匹配。
update ls
set salary = (
select salary
from employees
where ls.employee_id = employees.employee_id
)
;
运行检查,使用内加入(全 “差异” 必须为0):
select
employees.employee_id
, employees.salary
, ls.salary
, employees.salary - ls.salary difference
from employees join ls on (employees.employee_id = ls.employee_id) ;
抱歉,SO不是辅导服务。 – OldProgrammer
也许尝试hackhands,如果你需要Skype /逐行解释。 – artm
谁或手什么? – brtnremtp