orderby⼦查询_SQL查询语法
平常⼤家对于sql可能不是太陌⽣,经常使⽤sql来进⾏数据的存储等操作。今天我就来分享⼀下最简单的也是最基本的SQL查询类的语法操作。如下图所⽰,为PG的语法,应是涵盖了了查询的80%的⽤法。
⼀、关键字的介绍与样例
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
描述:关键字
distinct查询样例: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
0. condition
描述:过滤条件
样例:select col1,col2 from TABLE1 where col1>3
1. GROUP BY expr1,expr2
描述:分组
样例:select col1,col2 from TABLE1 GROUP BY col1
2. 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后⾯不可以使⽤聚合
3. 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;
4. 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后⾯的字段按照先后顺序进⾏排序
5. FOR UPDATE / FOR UPDATE of table_name1,tablename2
描述:要对查询结果所涉及的⾏加排它锁
注意:防⽌死锁
6. LIMIT COUNT/limit ALL
描述:limit count表⽰⾄多返回count⾏,limit all返回offset之后的所有⾏
样例:SELECT a FROM tab1 ORDER BY a DESC LIMIT 1;
7. 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个列。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论