10个SQL技巧之一:一切都是表

栏目: 数据库 · 发布时间: 7年前

内容简介:这是最琐碎的技巧,甚至不是真正的技巧,但它是彻底理解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技巧之一:一切都是表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据挖掘导论

数据挖掘导论

Pang-Ning Tan、Michael Steinbach、Vipin Kumar / 范明、范宏建 / 人民邮电出版社 / 2010-12-10 / 69.00元

本书全面介绍了数据挖掘,涵盖了五个主题:数据、分类、关联分析、聚类和异常检测。除异常检测外,每个主题都有两章。前一章涵盖基本概念、代表性算法和评估技术,而后一章讨论高级概念和算法。这样读者在透彻地理解数据挖掘的基础的同时,还能够了解更多重要的高级主题。 本书是明尼苏达大学和密歇根州立大学数据挖掘课程的教材,由于独具特色,正式出版之前就已经被斯坦福大学、得克萨斯大学奥斯汀分校等众多名校采用。 ......一起来看看 《数据挖掘导论》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具