内容简介:这是最琐碎的技巧,甚至不是真正的技巧,但它是彻底理解SQL的基础:一切都是一张表!当您看到如下的SQL语句时:一张表person处于From后面,但你是否意识到整个声明也是一张表?例如,你可以写:现在,您已经创建了所谓的“派生表” - 即子句中的嵌套SELECT FROM语句。
这是最琐碎的技巧,甚至不是真正的技巧,但它是彻底理解 SQL 的基础:一切都是一张表!当您看到如下的SQL语句时:
SELECT * FROM person
一张表person处于From后面,但你是否意识到整个声明也是一张表?例如,你可以写:
SELECT * FROM ( SELECT * FROM person ) t
现在,您已经创建了所谓的“派生表” - 即子句中的嵌套SELECT FROM语句。
这很平常,且相当优雅。您还可以在某些数据库(例如PostgreSQL,SQL Server)中使用VALUES()构造器创建特殊的内存表:
SELECT * FROM ( VALUES(1),(2),(3) ) t(a)
这简单地产生:
a — 1 2 3
如果不支持该子句,则可以恢复为派生表,例如在Oracle中:
SELECT * FROM ( SELECT 1 AS a FROM DUAL UNION ALL SELECT 2 AS a FROM DUAL UNION ALL SELECT 3 AS a FROM DUAL ) t
现在您已经看到了这些VALUES()并且派生表实际上是相同的,从概念上讲,让我们回顾一下INSERT这两种风格的语句:
-- SQL Server, PostgreSQL, some others: INSERT INTO my_table(a) VALUES(1),(2),(3); -- Oracle, many others: INSERT INTO my_table(a) SELECT 1 AS a FROM DUAL UNION ALL SELECT 2 AS a FROM DUAL UNION ALL SELECT 3 AS a FROM DUAL
在SQL中,一切都是表。当您将行插入表中时,您实际上并未插入单个行。你真的插入整个表。大多数人恰好在大多数时间碰巧插入单行表,因此没有意识到INSERT真正做到了什么。
一切都是一张表。在PostgreSQL中,甚至函数都是表:
SELECT *
FROM substring('abcde', 2, 3)
输出:
substring ——— bcd
如果您使用 Java 进行编程,则可以使用Java 8 Stream API的类比来更进一步。请考虑以下等效概念:
TABLE : Stream<Tuple<..>> SELECT : map() DISTINCT : distinct() JOIN : flatMap() WHERE / HAVING : filter() GROUP BY : collect() ORDER BY : sorted() UNION ALL : concat()
使用Java 8,“一切都是流”(至少你开始使用Streams)。无论您如何变换流,例如使用map()或filter(),结果类型始终是Stream。
以上所述就是小编给大家介绍的《10个SQL技巧之一:一切都是表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出HTML与CSS、XHTML
[美] 弗里曼 Freeman.E. / 东南大学出版社 / 2006-5 / 98.00元
《深入浅出HTML与CSS XHTML》(影印版)能让你避免认为Web-safe颜色还是紧要问题的尴尬,以及不明智地把标记放入你的页面。最大的好处是,你将毫无睡意地学习HTML、XHTML 和CSS。如果你曾经读过深入浅出(Head First)系列图书中的任一本,就会知道书中展现的是什么:一个按人脑思维方式设计的丰富的可视化学习模式。《深入浅出HTML与CSS XHTML》(影印版)的编写采用了......一起来看看 《深入浅出HTML与CSS、XHTML》 这本书的介绍吧!