Join连接

本文详细介绍了关系数据库中的连接查询,包括内连接、外连接、交叉连接等不同类型的连接方式及其应用场景。通过具体的SQL语句示例展示了如何进行表的创建、数据的插入以及各种连接查询的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连接查询,是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

创建表,插入数据

create table students (
 SID varchar(4) not null primary key,
 NAME varchar(30),
 AGE int,
 CLASSID varchar(3)
);

create table classes (
   CLASSID varchar(3) not null primary key,
   CLASSNAME varchar(20)
);

insert into students(   
select 'S001','Student1','1','C01' from dual union all  
select 'S002','Student2','2','C02' from dual union all  
select 'S003','Student3','3','C04' from dual);

insert into classes(  
select 'C01','Class No.1'from dual union all  
select 'C02','Class No.2' from dual union all  
select 'C03','Class No.3' from dual);

Students :                                                                           Classes:

     

1. 自连接 join, inner join 

  --自连接 :只返回两张表连接列的匹配项。
  --以下三种查询结果一样。
  select * from students s, classes c where s.classid=c.classid; 
  select * from students s inner join classes c on s.classid=c.classid;
  select * from students s join classes c on s.classid=c.classid;

2. 笛卡尔积 cross join 

  --笛卡儿乘积连接 :即不加任何条件,达到 M*N 的结果集。
  --以下两种查询结果一样。
  select * from students,classes;
  select * from students s cross join classes c;

3. 左外连接 left join 

  --左连接 :列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。
  --在(+)计算时,哪个表带(+)则需要条件符合,另一个则显示全部的。即(+)放左即右连接,放右即左连接。
  --以下结果集相同。
  select * from students s left join classes c on s.classid=c.classid;
  select * from students s,classes c where s.classid=c.classid(+);

注:(+)是oracle中的一种特殊用法,(+)表示外连接,并且总是放在非主表的一方,哪个表带(+)则需要符合where条件,否则显示空值。

4. 右外连接 right join 

  --右外连接:与左连接正好相反,列出右边表全部的,及左边表符合条件的,不符合条件的用空值替代。
  --(+)一样,它的位置与连接相反。
  select * from students s right join classes c on s.classid=c.classid;
  select * from students s,classes c where s.classid(+)=c.classid;

5. 全连接 full join 

  --全连接 :产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替。
  select * from students s full join classes c on s.classid=c.classid;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值