Oracle 数据库 10G 查询待解决
Posted
技术标签:
【中文标题】Oracle 数据库 10G 查询待解决【英文标题】:Oracle Database 10G Query to be solved 【发布时间】:2020-02-23 04:44:38 【问题描述】:create table customer
(cust_id integer not null,
cust_name char(20) not null ,
cust_address varchar2(200) ,
emp_id integer not null,
constraint pk_customer primary key(cust_id)
);
create table account
(account_number integer not null,
account_balance number(8,2) not null,
constraint pk_acount primary key(account_number)
);
create table has
(cust_id integer not null,
account_number integer not null,
constraint pk_has primary key(cust_id, account_number)
);
alter table has
add constraint fk_account_has foreign key(account_number)
references account(account_number);
alter table has
add constraint fk_customer_has foreign key(cust_id)
references customer(cust_id);
alter table customer
add constraint fk_employee_customer foreign key(emp_id)
references employee(emp_id);
Q1 显示帐号为 101 和帐号为 102 的客户的所有信息
Q2 显示所有账户余额高于 500 的客户的帐号和客户 ID。
Q3 显示账户余额不超过 500 的客户的所有信息。
【问题讨论】:
【参考方案1】:应该是这样的:
select c.cust_id, c.cust_address, c.cust_address
from customer c join has h on h.cust_id = c.cust_id
where h.account_number in (101, 102);
我建议您现在停止阅读并 - 查看第一个示例 - 尝试自己编写接下来的 2 个查询。
select c.cust_id, h.account_Number
from customer c join has h on h.cust_id = c.cust_id
join account a on a.account_number = h.account_number
where a.account_balance > 500;
select c.cust_id, c.cust_address, c.cust_address
from customer c join has h on h.cust_id = c.cust_id
join account a on a.account_number = h.account_number
where a.account_balance <> 500;
【讨论】:
select* from customer c, has h where c.cust_id=h.cust_id and account_number in(101,102);这个方法好吗? 毫无疑问,它会起作用,但建议使用显式 JOIN 而不是 oldfashioned ,其中您使用的所有表在 FROM 子句中用逗号分隔。 JOIN 有其优势,尤其是在将同一张表外连接到两个(或更多)其他表时,使用旧的 Oracle(+)
外连接运算符是不可能的。
非常感谢 Littlefoot 的澄清以上是关于Oracle 数据库 10G 查询待解决的主要内容,如果未能解决你的问题,请参考以下文章