orcale 之 SQL 数据查询

时间:2022-04-23 15:33:55
  从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
  
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

  SELECT 子句

    指定由查询返回的列。
    语法
SELECT [ ALL | DISTINCT ]
[ TOP n [ PERCENT ] ]

  ALL 指定在结果集中可以显示重复行。ALL 是默认设置。DISTINCT 指定在结果集中只能显示唯一行。为了 DISTINCT 关键字的用途,空值被认为相等。TOP n [PERCENT] 指定只从查询结果集中输出前 n 行。

select * from emp;

  INTO 子句

    创建新表并将结果行从查询插入新表中。
    用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。
    语法
[ INTO new_table ]

  FROM 子句

    指定从其中检索行的表。需要 FROM 子句,除非选择列表只包含常量、变量和算术表达式(没有列名)。
    语法
[ FROM { < table_source > } [ ,...n ] ]
    table_source 根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。new_table 的格式通过对选择列表中的表达式进行取值来确定。new_table 中的列按选择列表指定的顺序创建。new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。

  WHERE 子句

    指定用于限制返回的行的搜索条件。
    语法
[ WHERE < search_condition > | < old_outer_join > ]

  GROUP BY 子句

    指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总 值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。
    说明  如果未指定 ORDER BY 子句,则使用 GROUP BY 子句不按任何特定的顺序返回组。建议始终使用 ORDER BY 子句指定具体的数据顺序。
    语法
[ GROUP BY group_by_expression [ ,...n ]]

    例子:

    1. 统计各个部门的员工的工资的总和
      select deptno ,sum(sal)
      from emp
      group by deptno;
    2. 统计各个部门各个职业的员工的工资的总和 
      select deptno,job,sum(sal)
      from emp
      group by(deptno,job)
      order by deptno;
 select job from emp group by job;

  HAVING 子句

    指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。
    语法
[HAVING <search_condition>]
    search_condition 指定组或聚合应满足的搜索条件。当 HAVING 与 GROUP BY ALL 一起使用时,HAVING 子句替代 ALL。HAVING 子句与组有关,WHERE 子句与单个列有关。
    例子:
    统计各个部门的员工的工资的总和,且工资总和必须在10000以上
    
select deptno ,sum(sal)
from emp
group by deptno
having sum(sal)>10000;

  ORDER BY 子句

    指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
    语法
[ ORDER BY { order_by_expression [ ASC | DESC ] }    [ ,...n ] ]
    order_by_expression 指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
    可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。