-- 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