派生表

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

定义派生表的查询语句要定在一对圆括号内,后面跟着AS子句和派生表的名称。

例:

  SELECT *

    FROM (SELECT custid FROM Customers WHERE country=N‘USA‘) AS USACusts

要有效地定义任何类型的表表达式,查询语句必须满足三个要求:

1.不保证有一定的顺序。表表达式代表的是一个表,而关系表中的行是没有固定顺序的。(也就是说,ANSI
SQL不允许在用于定义表表达式的查询语句中有ORDER BY
子句。T-SQL大体上遵守了这一限制,只有一个例外情况——当在语句中指定了TOP。在带有TOP选项的查询语句中,ORDER BY
子句的逻辑目的只有一个:为TOP 选 项定义要筛选出哪些行。)

2.所有的列必须有名称。表中的所有列必须有列名,在用于定义表表达式的查询语句中,必须为SELECT列表中的表达式起别名。

3.所有的列名必须是唯一的。表中所有的列名必须是唯一的。如果表表达式中有多个列具有相同的名称,则该表表达式是无效的。当定义表表达式的查询联接了两个表,而这两个表存在名称相同的列时,就会发生这种情况。如果确实需要在表表达式中包括这两个同名列,它们就必须具有不同的列名。为了解决这个问题,可以为这两个列起不同的列别名。

时间: 2024-10-17 04:10:30

派生表的相关文章

sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date desc 逻辑上看着挺对 但是报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效.   只要我们在嵌套子查询视图里面加入: top 100 percent 即可 select * from ( select top 100

MySQL 派生表(Derived Table) Merge Optimization

本文将通过演示告诉你:MySQL中派生表(Derived Table)是什么?以及MySQL对它的优化. Background 有如下一张表: mysql> desc city; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

报错: 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图.内联函数.派生表.子查询和公用表表达式中无效. 只要我们在嵌套子查询视图里面加入:top 100 percent即可 例如: select * from ( select top 100 percent * from tb order by col desc ) as a order by col desc

MYSQL优化派生表(子查询)在From语句中的

Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能: 1:之前版本(5.6.3),from语句中的子查询在explain select 查看执行计划语句执行时就会物化.它导致了部分查询执行,但explain语句的目的是获取执行计划信息,而不是执行查询 该版本物化不会在explain中发生,所以explain执行计划结果的得到更快: 2:因为上面提及

MySQL-子查询,派生表,通用表达式

MySQL-子查询 MySQL子查询是嵌套在另一个查询中的查询. MySQL子查询还可以嵌套在另一个子查询中. MySQL子查询称为内部查询,而包含子查询的查询称为外部查询. 查询返回在位于美国(USA)的办公室工作的员工. SELECT lastName, firstName FROM employees WHERE officeCode IN (SELECT officeCode FROM offices WHERE country = 'USA'); MySQL-派生式 派生式和子查询通常

SQL学习--Select(一)TOP、派生表、连接、谓词

TOP关键字 1 select top 4 WITH TIES t.title,sum(s.qty)as totalSales from sales s 2 left join titles t on s.title_id=t.title_id 3 group by t.title 4 order by totalSales 这里的top 4 WITH TIES 是获取前4条数据且需要重复值,但是请注意这个重复值是会影响返回数据的行比如,重复值在第4行出现那么可能就会返回5行数据(2个值的重复)

MySQL 子查询(三) 派生表、子查询错误

From MySQL 5.7 ref:13.2.10.8 Derived Tables 八.派生表 派生表是一个表达式,用于在一个查询的FROM子句的范围内生成表. 例如,在一个SELECT查询的FROM子句中的子查询,就是一个派生表. SELECT ... FROM (subquery) [AS] tbl_name ... [AS] tbl_name子句是必需的,因为FROM子句中的每个表都必须具有名称.且派生表中的任何列都必须具有唯一名称. 为了便于说明,假设现在有这样一个表: CREATE

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

单继承的例子: #include <iostream> using namespace std; class A { public: A() { a = 1; ch = 'a'; //ASCII码97 } private: int a; char ch; }; class C : public A { public: C() { c = 3; } virtual void print() { cout << "C" << endl; } privat

sql 异常&lt;除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。&gt;

问题:当子查询内存在ORDER BY 字句时查询会报错 SQL: SELECT * FROM ( SELECT * FROM USER ORDER BY USER_CORD ) S. 解决办法:在子查询SQL语句SELECT 后加 TOP 100 PERCENT (查询出前百分比为100的数据,也就是查询出全部数据) SQL: SELECT * FROM ( SELECT  TOP 100 PERCENT  * FROM USER ORDER BY USER_CORD ) S