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技巧之一:一切都是表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

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

Concepts, Techniques, and Models of Computer Programming

Concepts, Techniques, and Models of Computer Programming

Peter Van Roy、Seif Haridi / The MIT Press / 2004-2-20 / USD 78.00

This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them p......一起来看看 《Concepts, Techniques, and Models of Computer Programming》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具