pgsql的with 用法及case函数


一 、公用表达式 :

         英文(Common Table Expression) 简称:CTE,可以看做一个临时的结果集,在接下来的select ,insert,update,delete可以被多次引用。使用公用表达式CTE可以让语句更加清晰简练。临时存储结果集的方法:临时表和表变量。

         视图:是一条预编译的SQL语句,并不保存实际数据。是一个快照,一个虚表,不分配物理空间。结构:快照

         临时表:保存在tempdb中的实际的表,是客观存在的表类型对象。分配物理空间。               结构:表.

        表变量:和普通的变量一样,在定义表变量的存储过程、批处理、动态语句、函数结束时,会自动清除。

         微软对CTE描述: 可以在一个语句中多次引用公用表达式,GROUP BY语句可以直接作用于子查询所得的标量列,当不需要将结果集作为视图被多个地方引用时,CTE可以使其更加简洁,可以定义递归公用表表达式(CTE)

二、with...as语句


with...as语句,也叫作子查询部分(subquery factoring),定义一个SQL片段,该SQL片段会被整个SQL语句所用到。如果WITH AS所以定的表名被调用两次以上,则优化器会自动将WITH AS所获取的数据放入临时表里,如果只是被调用一次,则不会。可以通过materialize将WITH AS短语里的数据强制放入全局临时表里。

WITH AS可以被紧跟着的一条SQL语句所使用多次,但不能被紧跟着的多条SQL语句使用。

语法:

with  公用表达式名字  as
​
(select * from xxx  where  条件)
​
select * from 公用表达式名字
--下面是一条语句引用多个cte,可以定义多个,中间用逗号分隔:

with cte 
as
(
select * from news
),
cte2 
as
(
select * from news
)
​
select * from cte c
inner join cte2 b
on c.caId =b.id 
--输出结果:

三 、常用case函数

-- case函数
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end
--case搜索函数
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end

Case具有两种格式。简单Case函数和Case搜索函数。

case语句还可以用在根据不同的条件修改单列的值,如果不用此语句需要多个set语句

你可能感兴趣的:(#,mysql,python,开发语言,后端)