Oracle WITH语句的使用

-- Start

说起 WITH 语句,除了那些第一次听说 WITH 语句的人,大部分人都觉得它是用来做递归查询的。那只是它的一个用途而已,其实,它是用来定义临时集合的。下面是一个简单的例子。

CREATE TABLE EMPLOYEE (
NAME     VARCHAR2(20) NOT NULL,---姓名
GENDER   NUMBER(9,0),---性别(1、男2、女)
BIRTHDAY DATE---生日
);

WITH TEST(NAME_TEST, BDAY_TEST) AS
(
SELECT NAME,BIRTHDAY FROM EMPLOYEE--语句1
)
SELECT NAME_TEST FROM TEST WHERE BDAY_TEST = DATE '1949-10-01';--语句2

下面我来解释一下,首先语句1 执行,它会产生一个有两列(NAME,BIRTHDAY)的结果集;接着,我们将这个结果集命名为test,并且将列名重命名为NAME_TEST,BDAY_TEST;最后我们执行语句2,从这个临时集合中找到生日是1949-10-1,也就是共和国的同龄人。怎么样?是不是很简单。

WITH 语句是为复杂查询而设计的,下面我们举个复杂的例子,想提高技术的朋友可千万不能错过。考虑下面的情况:

CREATE TABLE EMPLOYEE
(
NAME          VARCHAR2(20) NOT NULL,--姓名
DEGREE        NUMBER(9,0) NOT NULL,--学历(1、专科2、本科3、硕士4、博士)
ON_BOARD_DATE DATE NOT NULL,--入职时间
SALARY1       NUMBER(9,2) NOT NULL,--基本工资
SALARY2       NUMBER(9,2) NOT NULL--奖金
);

假设现在让你查询一下那些 1.学历是硕士或博士。2.学历相同,入职年份也相同,但是工资(基本工资+奖金)却比相同条件员工的平均工资低的员工。(哈哈,可能是要涨工资),不知道你听明白问题没有?该怎么查询呢?我们是这样想的:

1、查询学历是硕士或博士的那些员工得到结果集1,如下:

SELECT 
	N
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值