第 8 章 高级查询概念 高级查询概念
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
除了第 4 章 "查询基础 "中介绍的六个主要子句和第 7 章 "操作符和函数 "中介绍的常用关键字外,本章还将介绍使用 SQL 查询处理数据的几种高级方法。
表 8-1包括本章所涉及的四个概念的说明和代码示例。
| 概念 | 说明 | 代码示例 |
|---|---|---|
如果满足条件,则返回特定值。否则,返回另一个值。 |
SELECT house_id, CASE WHEN flg = 1 THEN 'for sale' ELSE 'sold' END FROM houses; |
|
将数据分成若干组,汇总每组内的数据,并返回每组的值。 |
SELECT zip, AVG(ft) FROM houses GROUP BY zip; |
|
将数据分成若干组,在每组内对数据进行汇总或排序,并为每一行返回一个值。 |
SELECT zip, ROW_NUMBER() OVER (PARTITION BY zip ORDER BY price) FROM houses; |
|
将一列中的值转化为多列,或将多列合并为一列。受Oracle和SQL Server 支持。 |
-- Oracle syntax
SELECT *
FROM listing_info
PIVOT
(COUNT(*) FOR
room IN ('bd','br'));
|
本章将详细介绍表 8-1中的每个概念以及常见用例。
案例陈述
CASE 语句用于在查询中应用 if-else 逻辑。例如,可以使用CASE 语句来拼写值。 如果看到1 ,则显示vip 。否则,显示generaladmission 。
+--------+ +-------------------+ | ticket | | ticket | +--------+ +-------------------+ | 1 | | vip | | 0 | --> | general admission | | 1 | | vip | +--------+ +-------------------+
在Oracle 中,您可能还会看到 DECODE函数,这是一个较早的函数,其操作类似于CASE 语句。
备注
使用CASE 语句可以在查询期间临时更新值。要保存更新的值,可以使用 UPDATE语句来保存更新后的值。
下面两节将介绍两种类型的CASE语句:
-
单列数据的简单
CASE语句 -
搜索 多列数据的
CASE语句
根据单列的If-Then 逻辑显示值
要检查单列数据的相等性,请使用简单的 CASE 语句语法。
我们的目标
不显示1/0/NULL 的值,而是显示vip/reserved seating/general admission 的值:
-
如果
flag = 1,那么ticket = vip -
如果
flag = 0,那么ticket = reserved seating -
其他
ticket = general admission
下面是一个示例表格:
SELECT * FROM concert; +-------+------+ | name | flag | +-------+------+ | anton | 1 | | julia | 0 | | maren | 1 | | ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access