SQL高级知识——派生表

简介: SQL数据库开发

派生表的定义

派生表是在外部查询的FROM子句中定义的,只要外部查询一结束,派生表也就不存在了。


派生表的作用

派生表可以简化查询,避免使用临时表。相比手动生成临时表性能更优越。派生表与其他表一样出现在查询的FROM子句中。

例如:

SELECT * FROM (
SELECT * FROM Customers WHERE 城市='广州'
) Cus

其中Cus就是派生表


派生表的特征

  •  所有列必须要有名称,出现无列名的要重命名
  •  列名称必须是要唯一,相同名称肯定是不允许的
  •  不允许使用ORDER BY(除非指定了TOP)

注意:派生表是一张虚表,在数据库中并不存在,是我们自己创建的,目的主要是为了缩小数据的查找范围,提高查询效率。


派生表嵌套

如果需要用一个本身就引用了某个派生表的查询,去定义另一个派生表,最终得到的就是嵌套派生表。

例子:查询每年处理客户数超过70的订单年度和每年所处理的客户数量。

方法一:不使用派生表

SELECT
YEAR(orderdate) AS Orderyear,
COUNT(DISTINCT custid) AS Numcusts
FROM Sales.Orders
GROUP BY YEAR(Orderdate)
HAVING COUNT(DISTINCT Custid) > 70;


方法二:使用派生表

SELECT Orderyear, Numcusts
FROM (
SELECT Orderyear, COUNT(DISTINCT Custid) AS Numcusts
FROM (
SELECT YEAR(Orderyear) AS Orderyear, Custid
FROM Sales.Orders) AS D1
GROUP BY Orderyear
) AS D2
WHERE Numcusts > 70;

嵌套查询看起来非常复杂,嵌套查询也是很容易产生问题的一个方面。在这个例子中,使用嵌套派生表的目的是为了重用列别名。但是,由于嵌套增加了代码的复杂性,所以对于本例考虑使用方案一。


批注

派生表在我们日常查询中经常使用到,用法也比较灵活,主要是执行效率会相对较高,因为它可以提前缩小查询范围。但是也不可乱用,特别是在不需要使用派生表而强制使用,效果反而会适得其反。

相关文章
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
110 1
|
1月前
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
60 11
|
2月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
2月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
41 0
|
4月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
94 0
|
5天前
|
SQL 数据库
Sql server 表管理(创建 修改 删除)
Sql server 表管理(创建 修改 删除)
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
79 3
【MySQL】——用SQL语句实现数据库和基本表的创建
|
4月前
|
SQL Oracle 关系型数据库
SQL 的 with as 临时中间表
SQL 的 with as 临时中间表
|
4月前
|
SQL 数据库
SQL-修改表操作
SQL-修改表操作
|
4月前
|
SQL 存储 关系型数据库
SQL语句-表操作
SQL语句-表操作