為了簡化SQL語句,可以將語句分成若干個視圖來操作,但是建立的試圖將會作為對象儲存在資料庫中,但經常有一些語句只是臨時使用,所以在sql-99規範中有了with as 語句,該語句實質上就是建立臨時視圖,來協助你簡化語句並使語句結構更清晰更容易閱讀。
下面的測試中會用到3張表,courseresults(課程-學生-成績表)、courses(課程表)、students(學生表),先給出建表語句:
create table COURSERESULTS
(
CID NUMBER,
SID NUMBER,
SCORE FLOAT not null
)
create table COURSES
(
CID NUMBER not null,
CNAME VARCHAR2(100) not null,
TID NUMBER,
CREDITS NUMBER not null
)
create table STUDENTS
(
SID NUMBER not null,
SNAME VARCHAR2(50) not null,
SEX CHAR(1),
BIRTHDATE DATE,
EMAIL VARCHAR2(50)
)
例1:擷取student表全部資料
with s as
(select * from students)
select * from s;
例2:擷取小於平均成績的學生學號和成績
with c as
(select avg(score) as value from courseresults)
select sid,score from courseresults,c where score>c.value;
例3:擷取課程平均成績大於85分的男生的學號
with
s1 as
(select sid from courseresults group by sid having avg(score)>85),
s2 as
(select sid from students where sex='m')
select * from s1 intersect select * from s2;
結論:使用with as語句的確可以使複雜的SQL語句具有更清晰的結構。