zoukankan      html  css  js  c++  java
  • 1030.查询-select子句

    在SELECT命令里的表表达式构造了一个中间的虚拟表, 方法可能有组合表、视图、消除行、分组等等。这个表最后被选择列表传递下去处理。

    选择列表判断中间表的哪个列是实际输出。(where是选择哪些行输出,select选择哪些列输出)

    1.1.1  选择列表项

    最简单的选择列表类型是*,它发出表表达式生成的所有列。否则,一个选择列表是一个逗号分隔的值表达式的列表。

    例如,它可能是一个列名的列表:

    SELECT a, b, c FROM ...

    列名字a、b和c要么是在FROM子句里引用的表中列的实际名字或者别名。在选择列表里可用的名字空间和在WHERE子句里的一样, 除非你使用了分组,这时候它和HAVING子句一样。

    如果超过一个表有同样的列名,那么你还必须给出表名字(避免歧义),如:

    SELECT tbl1.a, tbl2.a, tbl1.b FROM ...

    在使用多个表时,要求一个特定表的所有列也是有用的:

    SELECT tbl1.*, tbl2.a FROM ...

    如果将任意值表达式用于选择列表,那么它在概念上向返回的表中增加了一个新的虚拟列。

    值表达式为结果的每一行进行一次计算,对任何列引用替换行的值。

    不过选择列表中的这个表达式并非一定要引用来自FROM子句中表表达式里面的列,例如它也可以是任意常量算术表达式。

    1.1.2  列标签

    选择列表中的项可以被赋予名字,用于进一步的处理。 例如为了在一个ORDER BY子句中使用或者为了客户端应用显示。例如:

    SELECT a AS value, b + c AS sum FROM ...

    如果没有使用AS指定输出列名,那么系统会分配一个缺省的列名。

    对于简单的列引用, 它是被引用列的名字。

    对于函数调用,它是函数的名字。对于复杂表达式,系统会生成一个通用的名字。

    只有在新列无法匹配任何PostgreSQL关键词时,AS关键词是可选的。为了避免一个关键字的意外匹配,你可以使用双引号来修饰列名。

    例如,VALUE是一个关键字,所以下面的语句不会工作:

    SELECT a value, b + c AS sum FROM ...

    但是这个可以:

    SELECT a "value", b + c AS sum FROM ...

    为了防止未来可能的关键词增加,我们推荐总是写AS或者用双引号修饰输出列名

    注意:输出列的命名和在FROM子句里的命名是不一样的。 它实际上允许你对同一个列命名两次,但是在选择列表中分配的名字是要传递下去的名字。

    1.1.3  DISTINCT

    在处理完选择列表之后,结果表可以可选的删除重复行。

    我们可以直接在SELECT后面写上DISTINCT关键字来指定:

    SELECT DISTINCT select_list ...

    (如果不用DISTINCT你可以用ALL关键词来指定获得的所有行的缺省行为)。

    显然,如果两行里至少有一个列有不同的值,那么我们认为它是可区分的空值在这种比较中被认为是相同的。

    另外,我们还可以用任意表达式来判断什么行可以被认为是可区分的:

    SELECT DISTINCT ON (expression [, expression ...]) select_list ...

    这里expression是任意值表达式,它为所有行计算。如果一个行集合里所有表达式的值是一样的, 那么我们认为它们是重复的并且因此只有第一行保留在输出中。

    请注意这里的一个集合的“第一行”是不可预料的, 除非你在足够多的列上对该查询排了序,保证到达DISTINCT过滤器的行的顺序是唯一的(DISTINCT ON处理是发生在ORDER BY排序后面的)

    DISTINCT ON子句不是 SQL 标准的一部分, 有时候有人认为它是一个糟糕的风格,因为它的结果是不可判定的。

    如果有选择的使用GROUP BY和在FROM中的子查询,那么我们可以避免使用这个构造, 但是通常它是更方便的候选方法。

  • 相关阅读:
    HDU 1069 Monkey and Banana
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    Gym100923H Por Costel and the Match
    Codeforces 682C Alyona and the Tree
    Codeforces 449B Jzzhu and Cities
    Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes
    Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum
    Codeforces 1167c(ccpc wannafly camp day1) News Distribution 并查集模板
    快乐数问题
  • 原文地址:https://www.cnblogs.com/bufuzhou/p/14244199.html
Copyright © 2011-2022 走看看