order by 子查询_SQL查询语法

平常大家对于sql可能不是太陌生,经常使用sql来进行数据的存储等操作。今天我就来分享一下最简单的也是最基本的SQL查询类的语法操作。如下图所示,为PG的语法,应是涵盖了了查询的80%的用法。

8098f9172a8fc8c44c452f34c18126b5.png

一、关键字的介绍与样例

  1. 基本查询SQL

    select col1,col2 from TABLE1

  2. ALL(可选)--

    描述:与distinct区分,查询全部值

    样例:select ALL col1,col2 from table1

  3. DISTINCT /DISTINCT on (,)(可选)

    描述:用户返回唯一不同的值,其中DISTINCT为所有字段值不同;若带on字段,则对字段进行判定

    样例:select DISTINCT  col1,col2 from table1

              select DISTINCT  on (col1,col2) col1,col2 from table1

  4. top_option(可选)--

    描述:使用TOP子句限制结果集中返回的行数,如果指定了PERCENT,则是指返回的结果集行的百分比。

    样例:SELECT TOP (9 + (SELECT COUNT(*) FROM IAM.T_IAM_ASSET_TYPE)) PERCENT * FROM IAM.T_IAM_ASSET_TYPE

  5. expr1 AS e1,expr2 AS e2

    描述:查询结果

    样例:select col1 as c1,col2 from TABLE1

  6. select_into_clause

    描述:指定创建一个临时表,使用SELECT:INTO创建临时表是不支持指定ON COMMIT选项,只能创建默认临时表,即事务级临时表。

    样例:select * INTO tab2 from tab1;

  7. FROM

    描述:关键字

    样例:select col1 as c1,col2  from TABLE1

  8. table_reference1,table_reference2

    描述:需要查询的表

    样例:select col1 as c1,col2  from TABLE2 t2

  9. where

    描述:过滤条件的关键字

    样例:select col1,col2 from TABLE1 where col1>3

  10. condition

    描述:过滤条件

    样例:select col1,col2 from TABLE1 where col1>3

  11. GROUP BY expr1,expr2

    描述:分组

    样例:select col1,col2 from TABLE1 GROUP BY col1

  12. HAVING CONDITION

    描述:对分组后的结果进行过滤

    样例:select col1,col2 from TABLE1 GROUP BY col1 having col1>3

    注意:在不同的场景对于having与where的区别,在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

    having是在分组后对数据进行过滤
    where是在分组前对数据进行过滤
    having后面可以使用聚合函数
    where后面不可以使用聚合

  13. union clause

    描述:select:setop,集合操作,分为union/intersect/except   all,其中UNION操作的结果为左右两个子查询结果的并集,同时消除重复;UNION ALL操作的结果为左右两个子查询结果的并,不消除重复。INTERSECT操作的结果为左右两个子查询的交集,同时消除重复;INTERSECT ALL操作的结果为左右两个子查询结果的交集,不消除重复,即若元组A在左右子查询中分别出现M次和N次,则INTERSECT ALL操作的结果中将包含min(M, N)个A元组。EXCEPT操作的结果为左右两个子查询结果的差,同时消除重复;EXCEPT ALL操作的结果为左右两个子查询结果的差,不消除重复,即若元组A在左右子查询中分别出现M次和N次,则EXCEPT ALL操作的结果中将包含M-N个A元组(若M<=N,则结果中将不包含A)。

    ALL:在缺省情况下,集合操作将消除结果中的重复行,用户可以使用ALL关键字指定保留结果中的重复行。

    样例:SELECT * FROM tab1 UNION SELECT * FROM tab2 ORDER BY 1, 2;

  14. order_by_clause

    描述:排序,order by+表达式/排序键/列名(别名) ASC/DESC

    NULLS FIRST:如果Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc)。

    NULLS LAST:如果Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc)。

    样例:SELECT * FROM tab1 ORDER BY a, b, c;

    注意:order by后面的字段按照先后顺序进行排序

  15. FOR UPDATE / FOR UPDATE of  table_name1,tablename2

    描述:要对查询结果所涉及的行加排它锁

    注意:防止死锁

  16. LIMIT COUNT/limit ALL

    描述:limit count表示至多返回count行,limit all返回offset之后的所有行

    样例:SELECT a FROM tab1 ORDER BY a DESC LIMIT 1;

  17. OFFSET offset

    描述:从offet之后开始取值

    样例:SELECT a FROM tab1 ORDER BY a DESC LIMIT 1 OFFSET 1;

二、执行语法

  1. SELECT语句用于数据检索。对于SELECT语句中的各个子句,从逻辑上可以认为系统将按如下的顺序进行处理:

     from>where>group(含聚合)>having>order>select。
    处理FROM子句,得到FROM子句中指定的所有数据源联接的结果;
    处理WHERE子句。对输入根据条件condition进行筛选,返回那些满足条件的行;
    处理GROUP BY子句。将输入按分组属性进行分组;
    处理HAVING子句,过滤掉那些不满足条件的组;
    处理ORDER BY子句,按输入进行排序;
    处理SETOP子句,将输入与另一个查询的结果进行集合操作;
    处理LIMIT和TOP子句,过滤掉那些不在指定范围内的元组;
    处理SELECT子句,对输入进行投影操作,即只保留在SELECT子句指定要返回的列,而舍弃其余的列;
    若语句中包含INTO子句,则将查询结果插入到新创建的表中,否则,将查询结果返回给用户。

  2. FOR UPDATE子句并没有处理在上述的处理流程中,这是由于FOR UPDATE子句并不影响查询结果,而只是告诉执行器要对查询结果所涉及的行加排它锁(在通常情况下加的是共享锁)。

  3. SELECT子句用于指定输出列,一个SELECT语句最多可以输出65535个列。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值