【计算机三级数据库技术】第6章 高级数据查询--附思维导图

简介: 提供了SQL查询的高级概念和应用,包括一般数据查询(如使用TOP、CASE和INTO关键字)、查询结构的并、交、差运算(UNION、INTERSECT、EXCEPT),相关子查询,替代子查询和派生表,以及开窗函数和公用表表达式(CTE)。文中还包含了思维导图,帮助读者更好地理解SELECT单表查询语句的要点。

1.png

1 一般数据查询

1.1 top

格式

select top 3 Sname from Students

1.2 CASE

select Sname,Slevel =
CASE
    WHEN Sgrade>90 THEN '优秀'
    WHEN Sgrade<90 THEN '一般'
END
from Students

1.3 INTO

select CustomerID,CName INTO #CardIDTable from Table_Customer

将查询结果保存到新的表中,局部临时表通过在表名前面加#来标识

2 查询结构的并、交、差运算

2.1 UNION

并运算

select 语句1
UNION
select 语句2

2.2 INTERSECT

交运算:返回两个查询集合中各列的值均相同的记录,并用这些记录构成交运算的结果

select 语句1
INTERSECT
select 语句2

2.3 EXCEPT

差运算:将返回第一个集合中有但第二个集合中没有的数据

select 语句1
EXCEPT
select 语句2

3 相关子查询

(1)也称为内层查询

  • 对于包含相关子查询,先执行外层查询,再执行内层查询
  • 对于包含基于集合测试子查询,先执行内层查询,再执行外层查询

(2)分类

  • 进行基于集合的子查询
            where 表达式 IN 子查询

这种子查询的语句是分步骤的,先执行子查询,然后在子查询的结果基础再执行外层查询

  • 进行比较的子查询
            where 表达式 比较运算符 (子查询)

要求子查询语句必须是返回单值的查询语句
子查询的查询条件不依赖于外层查询,称这样的子查询为不相关子查询或嵌套查询

  • 进行存在性判断的子查询
where EXISTS (子查询)

6 其他形式的子查询

6.1 替代子查询

在Select语句的选择列表中嵌入一个只返回一个标量值的select 语句,子查询语句通常都是通过一个聚合函数来返回一个单值

        Select Cname,Address (select count(*) from Table_sale a
JOIN Table_Customer b ON a.cardID = b.cardID where CustomerID = 'G001') AS TotalTImes

6.2 派生表

是将子查询作为一个表来处理,这个由子查询产生的新表就被称为派生表,类似于临时表

        Select * from (Select * from T1) AS temp 这里的temp就是派生表

7 其他一些查询功能

7.1 开窗函数

(1)简介
一组行被称为一个窗口,开窗函数是指可以用于“分区”或“分组”计算的函数,SUM、AVG、ROW_NUMBER等都可被称为开窗函数,开窗户函数可以分别应用于每个分区,把每个分区看成是一个窗口,并为每个分区进行计算,开窗函数必须放在OVER子句前边
(2)分类

  • 将OVER子句与聚合开窗函数一起使用
    OVER子句用于确定在应用关联的开窗函数之前对行集的分区和排序
Select Cno,CName,Semester Credit 
SUM(Credit)  OVER(PARTITION BY Semester) AS 'Total' From Course
  • 将OVER子句与排名开窗函数一起使用
    排名函数为分区中的每一行返回一个排名值
    SQL Server提供了四个排名函数:Rank、DENSE_RANK、NTILE和ROW_NUMBER
    RANK()
    返回结果集中每行数据在每个分区的排名
Select OrderID ,ProductID,OrderQty,
RANK() OVER
(PARTITION BY OrderID ORDER BY OrderQty DESC) AS RANK
from OrderDetail
ORDER BY OrderID

DENSE_RANK()
与RANK()一样,唯一区别是DENSE_RANK()函数的排名中间没有间断,即该函数返回的是一个连续的整数值

Select OrderID ,ProductID,OrderQty,
 DENSE_RANK() OVER
(PARTITION BY OrderID ORDER BY OrderQty DESC) AS DENSE_RANK
from OrderDetail
ORDER BY OrderID

NTILE()
将有序分区中的行划分到指定数目的组中,每个组有一个编号,编号从1开始。对于每一行,NTILE()将返回此行所属的组的编号

Select OrderID ,ProductID,OrderQty,
NTILE(4) OVER
(ORDER BY OrderQty DESC) AS FourGroups
from OrderDetail

将全部数据划分为4组,因此不需要进行分区,在OVER子句中只需对订购数量进行降序排序即可

ROW_NUMBER()
返回结果集中每个分区内行的序列号,每个分区的第一行从1开始
查询电冰箱类商品、销售单价以及该商品在该类上商品中的价格排名

SELECT GoodsName,SaleUnitPrice ROW_NUMBER() OVER (ORDER BY SaleUnitPrice DESC )AS 'Number' FROM Table_GoodsClass C JOIN Table_Goods G
ON C.GoodsClassID  = G.GoodsClassID
where GoodsClassName = '电冰箱'

7.2 公用表表达式

将查询语句产生的结果集指定一个临时命名的名字,这些命名的结果集就被称为公用表表达式

定义一个统计每个会员的购买商品总次数的CTE,并利用CTE查询会员卡号和购买商品总次数

WITH BuyCount(CardID,Counts) AS (SELECT CardID ,Count(*)
 From Table_saleBill GROUP BY CardID)
SELECT CardID,Counts FROM BuyCount ORDER BY Counts
目录
相关文章
|
1月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
39 1
|
19天前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
40 8
|
25天前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
52 5
|
25天前
|
Cloud Native 数据库 开发者
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
|
25天前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
云原生数据库2.0问题之PolarDB利用云计算技术红利如何解决
|
28天前
|
关系型数据库 OLAP 分布式数据库
揭秘Polardb与OceanBase:从OLTP到OLAP,你的业务选对数据库了吗?热点技术对比,激发你的选择好奇心!
【8月更文挑战第22天】在数据库领域,阿里巴巴的Polardb与OceanBase各具特色。Polardb采用共享存储架构,分离计算与存储,适配高并发OLTP场景,如电商交易;OceanBase利用灵活的分布式架构,优化数据分布与处理,擅长OLAP分析及大规模数据管理。选择时需考量业务特性——Polardb适合事务密集型应用,而OceanBase则为数据分析提供强大支持。
89 2
|
6天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
6天前
|
SQL 关系型数据库 MySQL
MySQL技术安装配置、数据库与表的设计、数据操作解析
MySQL,作为最流行的关系型数据库管理系统之一,在WEB应用领域中占据着举足轻重的地位。本文将从MySQL的基本概念、安装配置、数据库与表的设计、数据操作解析,并通过具体的代码示例展示如何在实际项目中应用MySQL。
28 0
|
13天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
28 0