购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 临时表with...as

在实际工作中,有时候业务问题很复杂,这时的SQL语句中会嵌套太多子查询,那么SQL语句的可读性就会变差,有没有好的办法解决这样的问题呢?

答案是用with...as语句。

with…as语句可以将SQL语句中的子查询定义为临时表,起到提高SQL语句可读性的作用,因此它也被归为子查询部分。

with...as语句定义临时表的语法如下:

可以看到,一个with...as语句中可以定义多个临时表,多个临时表用“,”分隔(注意:with...as语句定义临时表结束后,不能加语句结束符“;”)。

使用临时表时,可以用select语句查询临时表中的数据。

例如,4.1.1节面试题9的SQL语句如下:

里面有3个子查询,分别是:

我们用with...as语句将这3个子查询分别定义为临时表a、b、c。

SQL语句的书写方法如下:

使用with...as语句需要注意如下几点。

(1)用with...as语句定义的临时表,后面必须直接跟使用该临时表的SQL语句,否则临时表将失效,如图4.9所示。

图4.9 with...as语句定义的临时表注意事项一

(2)用with...as语句定义的临时表不需要删除,因为它在创建并使用后即释放,不会真实存放在数据库里。可以理解为,将一条SQL语句中的一部分片段封装起来,方便使用。因此,用with...as语句定义的临时表,属于后面直接使用该临时表的SQL语句的一部分,所以,在定义临时表后不能加语句结束符“;”。上面案例的with...as语句中我们就没有加分号“;”。

(3)如果with...as语句定义的临时表名称与某个数据表或视图重名,则紧跟在该with...as语句后面的SQL语句使用的仍然是临时表,而没有紧跟在with...as语句后面的SQL语句使用的是数据表或视图,如图4.10所示。

图4.10 with...as语句定义的临时表注意事项二 232dqBn/jhwAucgDNJophUIrAxyPVwZy0BEsh7g+SBk0itR39TCwaxuL1KRj3UF0

点击中间区域
呼出菜单
上一章
目录
下一章
×