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 查询待解决的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 从复杂查询更新 Oracle 10g 数据库

如何在 Play 框架中执行查询(使用 Oracle 10g)

Oracle Forms 10g 自动查询

oracle10g查看主从延迟

安装oracle10g时出现权限不够怎么解决

oracle 10g 在查询结果列中添加rownum列,查询出的条数增多。