oracle 多表查询_Oracle数据库之SQL多表查询

1 前期准备

1.1 创建表

0cbdcfdd89ea076e5a8c0898542d8067.png
/*==============================================================*//* Table: departments部门表 *//*==============================================================*/create table departments ( department_id NUMBER(10) not null, location_id NUMBER, department_name VARCHAR2(100), constraint PK_DEPARTMENTS primary key (department_id));/*==============================================================*//* Table: employees 员工表 *//*==============================================================*/create table employees ( employees_id NUMBER(10) not null, department_id NUMBER(10), last_name VARCHAR2(100), salary NUMBER(10), manager_id NUMBER(10), constraint PK_EMPLOYEES primary key (employees_id));/*==============================================================*//* Table: job_grades 薪资等级 *//*==============================================================*/create table job_grades ( gra VARCHAR2(10), lowest_sal NUMBER, highest_sal NUMBER);/*==============================================================*//* Table: locations 城市表 *//*==============================================================*/create table locations ( location_id NUMBER not null, city VARCHAR2(100), constraint PK_LOCATIONS primary key (location_id));--外键alter table departments add constraint FK_DEPARTME_REFERENCE_LOCATION foreign key (location_id) references locations (location_id);--外键alter table employees add constraint FK_EMPLOYEE_REFERENCE_DEPARTME foreign key (department_id) references departments (department_id);

1.2 初始化数据

城市表

INSERT INTO LOCATIONS VALUES (1, '重庆');INSERT INTO LOCATIONS VALUES (2, '北京');INSERT INTO LOCATIONS VALUES (3, '上海');INSERT INTO LOCATIONS VALUES (4, '大连');

部门表

INSERT INTO DEPARTMENTS VALUES (1, 1, '技术部');INSERT INTO DEPARTMENTS VALUES (2, 2, '人事部');INSERT INTO DEPARTMENTS VALUES (3, 3, '后勤部');INSERT INTO DEPARTMENTS VALUES (4, 4, '研发部');INSERT INTO DEPARTMENTS VALUES (5, 2, '销售不');INSERT INTO DEPARTMENTS VALUES (6, 3, '人事部');

员工表

INSERT INTO EMPLOYEES VALUES (1, 1, '张三', 4500, NULL);INSERT INTO EMPLOYEES VALUES (2, 3, '李四', 3500, 2);INSERT INTO EMPLOYEES VALUES (3, 4, '王五', 8400, 2);INSERT INTO EMPLOYEES VALUES (4, 5, '赵六', 15000, 3);

薪资等级表

INSERT INTO JOB_GRADES VALUES ('A', 20000, 100000);INSERT INTO JOB_GRADES VALUES ('B', 12000, 20000);INSERT INTO JOB_GRADES VALUES ('C', 8000, 12000);INSERT INTO JOB_GRADES VALUES ('D', 5000, 8000);INSERT INTO JOB_GRADES VALUES ('E', 4000, 5000);INSERT INTO JOB_GRADES VALUES ('F', 2000, 4000);

2 笛卡尔集

笛卡尔集会在下面条件下产生:

–省略连接条件

–连接条件无效

–所有表中的所有行互相连接

为了避免笛卡尔集,可以在WHERE加入有效的连接条件

6843f4eabf1feab1e9485e1e37247bee.png

3 Oracle 连接

使用连接在多个表中查询数据。

- 在WHERE字句中写入连接条件。

- 在表中有相同列时,在列名之前加上表名前缀。

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 =table2.column2;

4 等值连接

c96969df979a5a30b9517feab8b4868f.png
6366dea9a305e1b55c07aa1cc9b34310.png

5 连接多个表

f3a2109a630d990d205625ca02559133.png

6 非等值连接

61c5d0a8430d9d4cf7fde473a1094ed8.png
select a.*,b.GRA from EMPLOYEES a,JOB_GRADES b where a.SALARY BETWEEN b.LOWEST_SAL and b.HIGHEST_SAL

7 外链接

f1532323eacec1fadcad2178b00279c6.png

外连接语法

使用外连接可以查询不满足连接条件的数据

外连接的符号是(+)。

bd8fd0c81f7e9085cff9d8328dd747f1.png

8 自连接

e3303701f5a20e19b0b5438de00e949a.png
af61bc2d4d282029e47ab0c77bf87a53.png

9 使用连接从多个表中查询数据

49d1d33108b18b1c4474f181b744e451.png

10 叉集

afbc39e43548ccc7a4e0fcfa4e4a9bf4.png

11 自然连接

NATURAL JOIN子句,会以两个表中具有相同名字的列为条件创建等值连接。

•在表中查询满足等值条件的数据。

•如果只是列名相同而数据类型不同,则会产生错误。

dd3b0aa8e0fa06046dcc2950a7020f88.png

12 使用ON子句创建连接

自然连接中是以具有相同名字的列为连接条件的。

可以使用ON子句指定额外的连接条件。

这个连接条件是与其它条件分开的。

ON子句使语句具有更高的易读性。

975b0946d7e90e971f340471a338212b.png

13 使用ON子句创建多表连接

e616b059b29d025668a681b4eb172ee7.png

14 内连接与外连接

•内连接只返回满足连接条件的数据。

•两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外联接。

•两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,这种连接称为满外联接。

14.1 左外联接

3d9b6e4d6c410db6ae72f9ed7f32ff6a.png

14.2 右外联接

81bba4707d4d9c1c8c1849eb86d57780.png

14.3 满外联接

832fd3274e6e2653bf92a9dc8e3126ad.png

14.4 增加连接条件

0bc40ea6ea65908027678fa2270ff757.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值