Oracle基础(5)-查询进阶

本文详细介绍了Oracle数据库的查询进阶技巧,包括多表查询、子查询、合并查询和连接查询。在多表查询中,强调了如何避免笛卡尔集,并指出在列名相同的情况下需要指定表名或别名。子查询部分涵盖了单行、多行和多列子查询的使用,以及在FROM子句中使用子查询的方法。此外,还讲解了如何通过查询结果创建新表和自我复制数据。在合并查询中,解释了UNION、UNION ALL、INTERSECT和MINUS的操作。最后,连接查询部分涉及自连接、内连接、左外连接、右外连接和完全外连接,以及它们在不同场景下的应用。
摘要由CSDN通过智能技术生成

1.多表查询

多表查询:基于两个或两个以上表或视图进行的查询。在实际开发中,单表查询不可能满足所有的业务需求,这时就需要进行多表查询。

-- 查询员工姓名、工资及其所在部门的名称
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno;
-- 查询员工名称、工资及其所在部门的名称,并按部门名称排序。
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno = d.deptno order by d.dname;
-- 查询部门编号为10的员工姓名、工资及其部门名称
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno and d.deptno='10';
-- 查询员工姓名、工资及其工资级别
select e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal;

注意
(1)在进行多表查询的时候,如果不带任何查询条件,查询结果会出现【笛卡尔集】,如果想要避免出现【笛卡尔集】,多表查询的条件不能小于(表的个数-1)。
(2)在进行多表查询的时候,如果不同的表中列名相同,要加上表名作为前缀进行区分,列名不同时可以不加。但是为了增强可读性,建议都加上表名或别名。

2.子查询

子查询:是指嵌入在其它 sql语句中的 select 语句,也叫做嵌套查询;分为单行子查询、多行子查询、多列子查询。

2.1 单行子查询

单行子查询:只返回一行数据的子查询,查询结果是单行单列。

-- 查询与SMITH同一部门的所有员工信息
select * from emp where deptno = (select deptno from emp where ename = 'SMITH');
-- 查询与SMITH同一部门的所有员工信息,将SMITH排除在外
select * from emp where deptno = (select deptno from emp where ename = 'SMITH') and ename <> 'SMITH';
select * from emp where deptno = (select deptno from emp where ename = 'SMITH') and ename != 'SMITH';

说明:Oracle数据库中不等号的标准格式为<>

2.2 多行子查询

多行子查询:返回多行数据的子查询,查询结果是多行单列。
(1)多行子查询中使用in操作符

-- 查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值