SQL查询语句(SELECT)进阶分组函数(Group Functions):对多行进行操作,并为每一组给出一个结果。

AVG([DISTINCT|ALL] expression) 平均值
COUNT ({ * | [DISTINCT|ALL] expression}) 含有非NULL的行数
MAX ([DISTINCT|ALL] expression) 最大值
MIN ([DISTINCT|ALL] expression) 最小值
STDDEV ([DISTINCT|ALL] expression) 统计标准差
SUM ([DISTINCT|ALL] expression) 加总
VARIANCE ([DISTINCT|ALL] expression) 统计方差


例子
SQL> SELECT    AVG(sal), MAX(sal),
  2        MIN(sal), SUM(sal)
  3    FROM    emp
  4    WHERE    job LIKE 'SALES%';

AVG(SAL)  MAX(SAL)  MIN(SAL)  SUM(SAL)
-------- --------- --------- ---------
    1400      1600      1250      5600

分组函数(Group Functions):数据分组使用GROUP BY子句将表中的行划分成小组语法:

SELECT    column, group_function(column)
FROM        table
[WHERE    condition]
[GROUP BY    group_by_expression]
[ORDER BY    column];

SQL> SELECT   deptno, AVG(sal)
  2  FROM     emp
  3  GROUP BY deptno;

DEPTNO  AVG(SAL)
--------- ---------
       10 2916.6667
       20      2175
       30 1566.6667

分组函数(Group Functions):数据分组(用多列)

SQL> SELECT   deptno, job, sum(sal)
  2  FROM     emp
  3  GROUP BY deptno, job;

DEPTNO JOB        SUM(SAL)
--------- --------- ---------
       10 CLERK          1300
       10 MANAGER        2450
       10 PRESIDENT      5000
       20 ANALYST        6000
       20 CLERK          1900
...
9 rows selected.


分组函数(Group Functions):非法使用分组函数
在WHERE子句中不能直接使用组函数。
在HAVING子句中可以直接使用组函数。
SQL> SELECT     deptno, AVG(sal)
  2  FROM     emp
  3  WHERE     AVG(sal) > 2000(报错)
  4  GROUP BY     deptno;

WHERE AVG(sal) > 2000

*
ERROR at line 3:
ORA-00934: group function is not allowed here


限制选择租

SQL查询语句(SELECT)进阶
分组函数(Group Functions):限制选择组
使用HAVING子句来限制选择组
在HAVING子句中能够使用组函数
语法:

SELECT    column, group_function
FROM        table
[WHERE    condition]
[GROUP BY    group_by_expression]
[HAVING    group_condition]
[ORDER BY    column];

分组函数(Group Functions):限制选择组(HAVING子句)[请注意group by having 以及 order by 的顺序 ]
SQL> SELECT    job, SUM(sal) PAYROLL
  2  FROM      emp
  3  WHERE      job NOT LIKE 'SALES%'
  4  GROUP BY  job
  5  HAVING    SUM(sal)>5000
  6  ORDER BY  SUM(sal);

JOB         PAYROLL
--------- ---------
ANALYST        6000
MANAGER        8275


分组函数(Group Functions):组函数嵌套
SQL> SELECT   max(avg(sal))
  2  FROM     emp
  3  GROUP BY deptno;

MAX(AVG(SAL))
-------------
    2916.6667


子查询( subquery ):
子查询(内部查询)在主查询之前执行。
子查询的查询结果提供给主查询(外部查询)使用。

SELECT    select_list
FROM    table
WHERE    expr operator
             (SELECT    select_list
               FROM        table);

子查询( subquery ):使用原则

子查询应该封装在括号内。
子查询在比较条件的右边。
子查询中一般不使用ORDER BY子句。
单行子查询使用单行操作符,对行子查询使用多行操作符。


子查询( subquery ):非法的子查询

SQL> SELECT empno, ename
  2  FROM   emp
  3  WHERE  sal =
  4        (SELECT   MIN(sal)(报错)
  5        FROM      emp
  6        GROUP BY  deptno);

ERROR:
ORA-01427: single-row subquery returns more thanone row
no rows selected

子查询( subquery ):多行子查询

返回多行查询结果
使用多行(multiple-row)比较操作

举例

SQL> SELECT  e.empno, e.ename
2    FROM    emp e
3    WHERE   EXISTS (SELECT 'X'
4                  FROM  dept d
5                  WHERE e.deptno=d.deptno
6                  and d.loc= 'NEW YORK');


Insert 新增加行到表中

使用上面的语法仅仅只能插入一行数据
SQL> INSERT INTO    dept (deptno, dname, loc)
  2  VALUES        (50, 'DEVELOPMENT', 'DETROIT');
1 row created.

插入SYSDATE函数值, SYSDATE函数返回当前的日期和时间。
SQL> INSERT INTO    emp (empno, ename, job,
  2            mgr, hiredate, sal, comm,
  3            deptno)
  4  VALUES        (7196, 'GREEN', 'SALESMAN',
  5            7782, SYSDATE, 2000, NULL,
  6            10);
1 row created.

在插入多行数据。

SQL> INSERT INTO managers(id, name, salary, hiredate)
  2                  SELECT    empno, ename, sal, hiredate
  3                  FROM   emp
  4                  WHERE    job = 'MANAGER';
3 rows created.

注:不能使用VALUES子句


UPDATE语法:
UPDATE        table
SET        column = value [, column = value]
[WHERE         condition];

SQL> UPDATE     emp
  2  SET        deptno = 20
  3  WHERE      empno = 7782;
1 row updated.

使用子查询更新行的多列数据

SQL> UPDATE  emp
  2  SET     (job, deptno) =
  3                 (SELECT job, deptno
  4                          FROM    emp
  5                          WHERE   empno = 7499)
  6  WHERE   empno = 7698;
1 row updated.

使用子查询更新行数据

SQL>    UPDATE    employee
  2    SET    deptno =  (SELECT    deptno
  3            FROM    emp     
  4            WHERE    empno = 7788)
  5    WHERE    job    =  (SELECT    job
  6            FROM    emp
  7            WHERE    empno = 7788);
2 rows updated.

oracle数据操纵语言(DML)data manipulation language(续集)的更多相关文章

  1. oracle数据操纵语言(DML)data manipulation language

    数据库操纵语言(DML)用于查询和操纵模式对象中的数据,它不隐式地提交当前事务. SELECTINSERTUPDATEDELETECALLEXPLAIN PLANLOCK TABLEMERGE使用算术 ...

  2. 数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

    2018-02-19 18:03:54 一.数据操纵语言(Data Manipulation Language) 数据操纵语言是指插入,删除和更新语言. 二.视图(View) 数据库三级模式,两级映射 ...

  3. Hive 6、Hive DML(Data Manipulation Language)

    DML主要是对Hive 表中的数据进行操作的(增 删 改),但是由于Hadoop的特性,所以单条的修改.删除,其性能会非常的低所以不支持进行级操作: 主要说明一下最常用的批量插入数据较为常用的方法: ...

  4. (让你提前知道软件开发33):数据操纵语言(DML)

    文章2部分 数据库SQL语言 数据操纵语言(DML) 数据操纵语言(Data Manipulation Language,DML)包含insert.delete和update语句,用于增.删.改数据. ...

  5. MySQL之数据操纵语言(DML)

    数据操纵语言(DML) 数据操纵语(Data Manipulation Language),简称DML. DML主要有四个常用功能. 增 删 改 查 insert delete update sele ...

  6. 【转】Hive Data Manipulation Language

    Hive Data Manipulation Language Hive Data Manipulation Language Loading files into tables Syntax Syn ...

  7. 30442数据操纵语言DML

    5.5 SQL的数据操纵功能 5.5.1 数据插入 使用CREATE语句创建的数据表还只是一个“空壳”,表中没有任何数据.利用SQL语言提供的INSERT语句可以完成向数据表插入数据的任务. INSE ...

  8. 【MySQL笔记】数据操纵语言DML

    1.数据插入   INSERT INTO table_name (列1, 列2,...) VALUES(值1, 值2,....),(第二条),(第三条)...   注: 1)如果表中的每一列均有数据插 ...

  9. mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

    0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...

随机推荐

  1. 开机自动播放音乐的vbs

    今天无意间看到了vbs这小玩意,就突发奇想,自学了一下,倒弄出如下的小玩意,大牛勿喷!这个可用做撩妹神技也可以用于提醒自己!使用方法:复制程序到txt文本里面保存,然后改后缀为vbs,丢到C:\Pro ...

  2. Objective-C 学习记录--toches、Motion/Size/Rect/Point/CGFloat/protocol

    - (void)touchesBegan touchesEnd touchesCancelled touchesMoved //代表的是手指在屏幕上的动作,开始 结束 取消 移动 //还有就是代表摇动 ...

  3. Unity3d:Unknown type 'System.Collections.Generic.CollectionDebuggerView'1

    问题描述:如图,在调试状态下说:Unknown type 'System.Collections.Generic.CollectionDebuggerView'1<ignore_js_op> ...

  4. (剑指Offer)面试题36:数组中的逆序对

    题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 思路: 1.顺序扫描 顺序扫描整个数组,每扫描到一个数字,就将该数 ...

  5. ActionBar ShareActionProvider

    添加share按钮 添加share按钮的主要步骤: 1. 在ActionBar中添加share按钮 2. 从item中获取ShareActionProvider ShareActionProvider ...

  6. PostgreSQL关闭不了时怎么办

    停止模式分为: smart, fast, immediate : 分别对应着:    SIGTERM, SIGINT, SIGQUIT 信号 当我采用 fast模式无法关机的时候,可以使用如下办法: ...

  7. Python在Windows上的安装

    1:下载 http://dlsw.baidu.com/sw-search-sp/soft/6e/17016/python-3.3.5.1395976247.msi 2:直接next安装 3:验证安装是 ...

  8. python flask model 序列化

    class DictSerializable(object):     def as_dict(self,*args):         result = OrderedDict()         ...

  9. Codeforces Gym 100531G Grave 水题

    Problem G. Grave 题目连接: http://codeforces.com/gym/100531/attachments Description Gerard develops a Ha ...

  10. xmf 翻译

    避免在详细信息视图的确认对话框显示? https://documentation.devexpress.com/#Xaf/CustomDocument3160 我如何获得从登录窗口应用程序的数据库? ...