Oracle 连接 JOIN、LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN

Oracle 连接 JOIN、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN的理解和用法。

首先了解连接后的数据情况会是什么样:

 模拟一下数据情况:

CREATE TABLE FRUIT_COUNTER (
    NAME VARCHAR2(20),
    PRICE NUMBER
);
COMMENT ON TABLE FRUIT_COUNTER IS '水果-柜台售卖';
COMMENT ON COLUMN FRUIT_COUNTER.NAME IS '水果-名称';
COMMENT ON COLUMN FRUIT_COUNTER.PRICE IS '水果-价格';

INSERT INTO FRUIT_COUNTER (NAME, PRICE) VALUES ('苹果', 8);
INSERT INTO FRUIT_COUNTER (NAME, PRICE) VALUES ('草莓', 15);
INSERT INTO FRUIT_COUNTER (NAME, PRICE) VALUES ('樱桃', 45);
COMMIT;

CREATE TABLE FRUIT_REPERTORY (
    NAME VARCHAR2(20),
    REPERTORY NUMBER
);
COMMENT ON TABLE FRUIT_REPERTORY IS '水果库存';
COMMENT ON COLUMN FRUIT_REPERTORY.NAME IS '水果-名称';
COMMENT ON COLUMN FRUIT_REPERTORY.REPERTORY IS '水果-库存数量';

INSERT INTO FRUIT_REPERTORY (NAME, REPERTORY) VALUES ('苹果', 200);
INSERT INTO FRUIT_REPERTORY (NAME, REPERTORY) VALUES ('青提', 300);
INSERT INTO FRUIT_REPERTORY (NAME, REPERTORY) VALUES ('樱桃', 100);
COMMIT;

一、JOIN / INNER JOIN

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

语法:

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;

参数说明:

  • column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table1:要连接的第一个表。
  • table2:要连接的第二个表。
  • condition:连接条件,用于指定连接方式。

 举例:

获取'柜台'和'仓库'两张表的同种水果的数据

SELECT *
FROM FRUIT_COUNTER C
JOIN FRUIT_REPERTORY R ON C.NAME = R.NAME ;

 同时出现在柜台和仓库表中的数据

 

 

 

 二、LEFT JOIN

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SQL LEFT JOIN 语法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。

 举例:

获取柜台上的水果在仓库的库存 

SELECT *
FROM FRUIT_COUNTER C
LEFT JOIN FRUIT_REPERTORY R ON C.NAME = R.NAME ;

 

  三、LEFT JOIN

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

SQL RIGHT JOIN 语法

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

注释:在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。

举例: 

获取库存水果在柜台上的价格

SELECT *
FROM FRUIT_COUNTER C
RIGHT JOIN FRUIT_REPERTORY R ON C.NAME = R.NAME ;

   四、FULL JOIN

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

SQL FULL OUTER JOIN 语法

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

举例: 

获取柜台水果的库存,获取库存水果的价格

SELECT *
FROM FRUIT_COUNTER C
FULL JOIN FRUIT_REPERTORY R ON C.NAME = R.NAME ;

 

 总结:

以上就是数据库通过JOIN连接的几种方式,可以在数据库中做几次练习方便直观的理解。

Oracle function 函数的用法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raphael-laq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值