SQL 查询

本文介绍了SQL中的CASE表达式、CONNECT BY与START WITH子句、GROUP BY与HAVING子句及UNION操作符等高级查询技巧的用法。通过具体实例展示了如何在实际应用中运用这些特性来提高查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 查询

CASE

CASE表达式可以在SQL中实现if-then-else型的逻辑。 语法:

--简单case表达式,使用表达式确定返回值
CASE search_expr
     WHEN exp1 THEN result1
     WHEN exp2 THEN result2
     ...
     WHEN expN THEN resultN
     ELSE default_result
 END
--搜索case表达式,使用条件确定返回值
CASE 
     WHEN cond1 THEN result1
     WHEN cond2 THEN result2

     WHEN condN THEN resultN
     ELSE default_result
 END

eg:

select num,state,
       case state
        when 'TERMINATED' then '终止'
        when 'EFFECTIVE' then '有效'
        when 'INVALID' then '作废'
        else '其他'
       end
from cms_contract where num like '%OT%'

select num,state,
       CASE 
       when state='TERMINATED' then '终止'
       when state='EFFECTIVE' then '有效'
       when state='INVALID' then '作废'
       else '其他'
       END
from cms_contract where num like '%OT%'

CONNECT BY 和 START WITH

connect by 和 start with 子句可以执行层次化查询。 
语法:

SELECT [LEVEL],column,expression,... FROM table
[WHERE where_clause]
[[START WITH start_condition][CONNECT BY PRIOD priod_condition]]

LEVEL 为伪列,代表树的第几层。对根节点为1,子节点依次+1。 
start_condition 定义了层次化查询的起点,依次向父节点查找。 
prior_condition 定义了父行和子行之间的关系,父->子,父在前。

eg:

 select level,name, email, jobname
   from cms_sys_users
  start with id = 44128
 connect by prior super_user_id = id

GROUP BY 和 HAVING

GROUP BY能够将行分组为具有相同列的多个部分。HAVING可以用于过滤。 语法:

SELECT ... FROM ...
WHERE ...
GROUP BY ... HAVING ...
ORDER BY ...

eg:

 select apply_user_id,count(num) from cms_contract 
 group by apply_user_id
 having apply_user_id in (807920,37656)

UNION

UNION ALL   返回各个查询检索出的所有行,包括重复行
UNION       返回各个查询检索出的所有行,不包括重复行
INTERSECT   返回两个查询检索出的共有行
MINUS       返回(第一个查询 - 第二个查询)检出行

需要说明 eg:

select id,name from table1
minus
select id,name from table2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值