Oracle学习——Oracle数据库的多表查询——笛卡尔集、等值与非等值连接、外连接、自连接

本文深入解析Oracle数据库中的多表查询技术,包括笛卡尔集、等值与非等值连接、外连接及自连接的概念与应用实例。通过具体案例,讲解如何避免笛卡尔集,如何正确使用表名前缀和AND操作符进行复杂查询,以及如何利用左(外)连接、右(外)连接和完全(外)连接处理不匹配的数据。

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

Oracle数据库的多表查询

笛卡尔集

多表查询:从多个表中获取数据

笛卡尔集:一种集合 是两个集合的积

表的笛卡尔集:列数相加,行数相乘
举例

	Select emno,ename,员工表.deptno,部门表.deptno,danme from 部门表,员工表,
		Where 员工表.deptno = 部门表.deptno;
		
		注意:为了避免笛卡尔集,可以再where子句中加入有效的连接条件
			  连接条件至少有n-1个,n代表表的个数
			  在表中有相同列时,在列名之前加上表名前缀。

等值与非等值连接

等值连接:指用等值比较符(=)指定连接条件的查询

举例:查询员工信息,要求显示:员工号,姓名,职位,部门,名称

Select empno,ename,job,dname from emp,dept where emp.deptno=dept.deptno;

区分不同表中重复的列名
a.使用表名前缀在多个表中区分相同的列。

Select empno,ename,job,dname
From emp,dept where emp.deptno=dept.deptno;

b.使用表名前缀可以提高执行效率

Select emp.empno,emp.ename,emp.job,dept.dname
From emp,dept

Where emp.deptno = dept.deptno;
c.使用表的别名,可以简化连接查询并提高查询性能。

Select e.empno,e.ename,e.job,d.dname
From emp e,demp d
Where e.deptno = d.deptno;

多个连接条件时使用AND操作符

Select e.empno,e.ename,e.job,d.dname
From emp e,demp d
Where e.deptno = d.deptno and e.deptno = 10;

不等值连接

指使用除等值比较符之外的其他比较操作符执行连接查询

举例:显示所有员工的员工号,姓名,工资及其工资的等级

	Select e.empno,e.ename,e.sal,s.grade
		From emp e,salgrade s
		Where e.sal between losal and hisal;

外连接

标准连接的扩展,不仅会返回满足条件的所有记录,而且还会返回不满足连接条件的部分记录。

举例:按部门统计员工的人数,要求显示:部门号,部门名称,人数

	Select d.deptno,d.dname,count(e.empno) 
    	from emp e,dept d
	    where e.deptno = d.deptno group by d.deptno,d.dname;

外连接的语法:外连接是使用(+)操作符来完成的

左(外)连接:用于返回左表的全部记录,右表的满足条件的记录

LEFT[OUTER]JOIN

Select e.ename,e.sal,d.dname from dept d left join emp e on e.deptno = d.deptno;

左(外)连接
Select  table1column,table2column
				From   table1,table2
				Where  table1.column = table2.column(+);
				//table1.column全部和 table2.column部分
			//带(+)的,都是部分,不带的都是全部

右(外)连接:用于返回右表的全部记录,左表的满足条件的记录

RIGHT[OUTER]JOIN

Select e.ename,e.sal,d.dname from dept d right join emp e on e.deptno=d.deptno;

右(外)连接
			Select  table1column,table2column
			From   table1,table2
			Where  table1.column(+) = table2.column
			//table2.column全部和table1.column部分

完全(外)连接:左表和右表的全部数据 FULL[OUTER] JOIN

Select e.ename,e.sal,d.dname from dept d full join emp e on e.deptno=d.deptno;

自连接

实质:将同一张表看成是多张表
举例:查询所有员工的姓名及其直属上级姓名

Select e.ename m.ename from emp e, emp m
			Where e.mgr = m.empno
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值