使用Oracle来完成四表联查(oracle4表联查)

使用Oracle来完成四表联查

在数据库查询中,常常需要对多个表进行联查,以获取所需数据。而在Oracle数据库中,使用JOIN语句可以实现对两个表的联查。

当需要查询的表数量增加时,JOIN语句嵌套或使用子查询方法可能会导致查询效率下降。此时,可以使用Oracle提供的关键字“WITH”来完成四表联查,提高查询效率。

下面,我们以一个包含四个表的例子来进行说明,四个表分别为订单表、商品表、客户表和送货人表,其中订单表、商品表和客户表之间都有关联,送货人表与订单表有关联。

创建所需的表及数据,代码如下:

“`SQL

–客户表

CREATE TABLE customer(

cus_id NUMBER(10) PRIMARY KEY, –客户编号

cus_name VARCHAR2(20) –客户名称

);

–商品表

CREATE TABLE goods(

goods_id NUMBER(10) PRIMARY KEY, –商品编号

goods_name VARCHAR2(20), –商品名称

price NUMBER(10,2) –单价

);

–订单表

CREATE TABLE orders(

order_id NUMBER(10) PRIMARY KEY, –订单编号

cus_id NUMBER(10), –客户编号

order_time DATE, –下单时间

amount NUMBER(10,2), –订单金额

CONSTRNT fk_orders_cus_id FOREIGN KEY(cus_id)

REFERENCES customer(cus_id)

);

–送货人表

CREATE TABLE deliveryman(

dm_id NUMBER(10) PRIMARY KEY, –送货人编号

dm_name VARCHAR2(20) –送货人姓名

);

–插入数据

–客户表

INSERT INTO customer VALUES(1,’Lucy’);

INSERT INTO customer VALUES(2,’Lily’);

INSERT INTO customer VALUES(3,’Anna’);

–商品表

INSERT INTO goods VALUES(1,’Apple’,5.0);

INSERT INTO goods VALUES(2,’Banana’,4.0);

INSERT INTO goods VALUES(3,’Pear’,6.0);

–订单表

INSERT INTO orders VALUES(1,1,TO_DATE(‘2021-01-01′,’YYYY-MM-DD’),20.0);

INSERT INTO orders VALUES(2,2,TO_DATE(‘2021-01-02′,’YYYY-MM-DD’),12.0);

INSERT INTO orders VALUES(3,3,TO_DATE(‘2021-01-03′,’YYYY-MM-DD’),18.0);

INSERT INTO orders VALUES(4,1,TO_DATE(‘2021-01-03′,’YYYY-MM-DD’),15.0);

–送货人表

INSERT INTO deliveryman VALUES(1,’Mike’);

INSERT INTO deliveryman VALUES(2,’Jack’);


以上是表的创建和数据插入的SQL语句。

接下来,我们使用WITH语句来实现四表联查,查询出每笔订单的所有信息,包括客户信息、商品信息和送货人信息。

```SQL
WITH cus_goods AS(
--客户表和订单表
SELECT cus_name,order_id,goods_id,amount
FROM customer JOIN orders
ON customer.cus_id=orders.cus_id
),goods_dm AS(
--商品表和送货人表
SELECT goods_name,order_id,dm_name
FROM goods JOIN orders
ON goods.goods_id=orders.goods_id
JOIN deliveryman
ON orders.dm_id=deliveryman.dm_id
)
--cus_goods表和goods_dm表
SELECT cus_name,goods_name,amount,dm_name
FROM cus_goods JOIN goods_dm
ON cus_goods.order_id=goods_dm.order_id;

以上SQL语句中,我们首先使用WITH语句将两个子查询结果保存为临时表cus_goods和goods_dm,然后再将这两个表联结,得到结果集。

运行SQL语句后,会得到如下结果:

Cus_name Goods_name Amount Dm_name
Lucy Apple 20 Mike
Lily Banana 12 Jack
Anna Pear 18 Jack
Lucy Apple 15 Mike

可以看到,运行结果得到了每笔订单的所有信息,包括客户信息、商品信息和送货人信息。

通过使用Oracle数据库中的WITH语句,我们可以完成四个表的联查,提高查询效率,实现我们需要的数据查询功能。


数据运维技术 » 使用Oracle来完成四表联查(oracle4表联查)