DML(数据操纵语言)#

INSERT 、UPDATE、 DELETE

插入操作:INSERT:

语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);

注意:列名与列值的类型、个数、顺序要一一对应。

   可以把列名当做java中的形参,把列值当做实参。

   值不要超出列定义的长度。

   如果插入空值,请使用null

   插入的日期和字符一样,都使用引号括起来。

修改操作 UPDATE:

  语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 ........ WHERE 列名=值

删除操作 DELETE:

语法 : DELETE FROM 表名 【WHERE 列名=值】

注意:where语句可以不写

   DELETE :删除表中的数据,表结构还在;删除后的数据可以找回。

   TRUNCATE :删除是把表直接DROP掉,然后再创建一个同样的新表。

   删除的数据不能找回。执行速度比DELETE快。

DQL(数据查询语言)

 **查询表中的所有数据 **

 语法: SELECT 列名 FROM表名

    [WHERE --> GROUP BY -->HAVING--> ORDER BY]

语法:

  SELECT selection_list /*要查询的列名称*/
FROM table_list /*要查询的表名称*/
WHERE condition /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/

  DML是对表中的数据进行增、删、改的操作。不要与DDL(数据定义语言)混淆了。

  查询代码的书写顺序和执行顺序

 查询语句书写顺序:select – from- where- group by- having- order by-limit

 查询语句执行顺序:from -> where  --> group by  --> having --> select --> order by --> limit

注:其中WHERE 语句执行顺序是从右到左

组函数(多行函数,分组函数)

  注:组函数会自动忽略空值,NVL函数使分组函数无法忽略空值

  • AVG(expr) 求平均值

  • COUNT([DISTINCT] expr) 统计行数,当expr=*时,所有的行数,expr=COLUMN时会自动过滤对应列的空值的行数

    DISTINCT 去掉重复行

  • MAX(expr) 求最大值

  • MIN(expr) 求最小

  • SUM(expr) 求和

分组函数(GROUP BY)

  注:SELECT 中的列不在组函数中就必须在 GROUP BY 中

    多个列的分组:先按照第一个列分组,如果相同,再第二个列分组,依次类推

SELECT
deptno,
job,
AVG( sal )
FROM
emp
GROUP BY
deptno,
job;

Oracle的增强GROUP BY:用于做财务报表

**break on deptno skip 2 **

-- 部门号只显示一个,不同的部门号跳过2行

break on null 关闭设置

GROUP BY ROLLUP(a,b) 增强分组

例子

SELECT
deptno,
job,
SUM( sal )
FROM
emp
GROUP BY
ROLLUP (
deptno,
job)

上面代码相当于下面几个分组函数的和

SELECT
deptno,
job,
SUM( sal )
FROM
emp
GROUP BY
deptno,
job;
+
SELECT
deptno,
SUM( sal )
FROM
emp
GROUP BY
deptno,
job;
+
SELECT
SUM( sal )
FROM
emp
GROUP BY
deptno,
job

即:

GROUP BY a,b  +  GROUP BY a + 没有GROUP BY

过滤分组(HAVING)

  注:不能再WHERE子句中使用组函数

    可以在HAVING 子句中使用组函数,尽量使用WHERE

SELECT
deptno,
job,
AVG( sal )
FROM
emp
GROUP BY
deptno,
job
HAVING AVG(sal)>300;

重点:HAVING 可以和组函数配合使用,不是必须和GROUP BY配合,例子如下

	SELECT COUNT(*)
from dual
HAVING COUNT(*)>0;

多表查询

  • 连接类型
  • 等值连接
  • 不等值连接
  • 外连接
  • 自连接

左外连接:当条件不成立的时候,等号左边的表依然包含在最后的结果中

写法:

WHERE e.deptno=d.deptno(+) 或者FROM emp e right outer join dept d on e.deptno=d.deptno

右外连接:当条件不成立的时候,等号右边的表依然包含在最后的结果中

写法:

WHERE e.deptno(+)=d.deptno 或者FROM emp e left outer join dept d on e.deptno=d.deptno

例子

按部门号查询部门号,部门名称,人数

SELECT d.deptno 部门号,d.dname 名称,COUNT(e.empno) 人数
FROM emp e ,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname SELECT d.deptno 部门号,d.dname 名称,COUNT(e.empno) 人数
FROM emp e right outer join dept d
on e.deptno=d.deptno
GROUP BY d.deptno,d.dname

自连接: 通过表的别名,将同一张表视为多张表

注:自连接不适合操作大表

-- 查询员工信息: 员工姓名 老板名

SELECT e1.empno,e1.ename 员工,e2.empno,e2.ename 老板
FROM emp e1 left outer join emp e2
on e1.mgr=e2.empno SELECT e1.empno,e1.ename 员工,e2.empno,e2.ename 老板
FROM emp e1 , emp e2
WHERE e1.mgr=e2.empno(+)

层次查询

实质是单表查询

  在层次查询中Oracle为我们提供了伪列 leval

  

上面的自连接问题:

  查询员工信息: 员工姓名 老板名

SELECT LEVEL ,empno, ename,mgr
FROM emp
CONNECT BY PRIOR empno=mgr
START WITH mgr IS NULL;

Oracle常用sql语句(二)之组函数、多表查询的更多相关文章

  1. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  2. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  3. 剑指Offer——常用SQL语句、存储过程和函数

    剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...

  4. Oracle常用SQL语句大全

    常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...

  5. ysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  6. Mysql常用sql语句(11)- between and 范围查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 between and可以判断值是否在指定范围内 ...

  7. Mysql常用sql语句(19)- in / exists 子查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 子查询在我们查询方法中是比较常用的,通过子查询可 ...

  8. Mysql常用sql语句(7)- order by 对查询结果进行排序

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 通过select出来的结果集是按表中的顺序来排序 ...

  9. Mysql常用sql语句(10)- is null 空值查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 is null是一个关键字来的,用于判断字段的值 ...

随机推荐

  1. Tribles UVA - 11021(全概率推论)

    题意: 有k只麻球,每只只活一天,临死之前可能会出生一些新的麻球, 具体出生i个麻球的概率为P,给定m,求m天后麻球全部死亡的概率. 解析: 从小到大,先考虑一只麻球的情况  设一只麻球m天后全部死亡 ...

  2. 测试开发linux面试之三:后台进程之操作

    Hi,大家好我是Tom,继上次分享之后这次给大家带来新的知识. 进程是Linux系统中一个非常重要的概念.Linux是一个多任务的操作系统,系统上经常同时运行着多个进程.我们不关心这些进程究竟是如何分 ...

  3. POJ.3087 Shuffle'm Up (模拟)

    POJ.3087 Shuffle'm Up (模拟) 题意分析 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到 ...

  4. 前端PHP入门-017-系统内置函数-会查阅API

    大家要知道未来这就是你的工具 如果代码能赚钱,帮你赚钱最多的是基本语法 如果你还在当程序员,你最好的伙伴就是手册 问问你自己:你有CSS2.0/3.0手册,JavaScript手册,Jquery手册, ...

  5. C++ string类析构报错

    我项目中用到了字符串的Base64转码.DES解密等功能,可能DES解密算法只能解密8字节倍数长度的字符串,所以我得到的结果总会存在一个多余的“尾巴”,于是我想要做一个字符串尾部清理的工作.我的做法是 ...

  6. CF540 D 概率 DP

    石头剪刀布三种生物(?) 随机战斗,最后三方各自只有自己方存活下来的概率是多少. 局面的转移明显,注意任选两方决定战斗时有可能出现选了同个种类的,因此注意排除掉同种的组合,也就是条件概率什么的. /* ...

  7. My deep learning reading list

    My deep learning reading list 主要是顺着Bengio的PAMI review的文章找出来的.包括几本综述文章,将近100篇论文,各位山头们的Presentation.全部 ...

  8. 重构改善既有代码设计--重构手法12:Extract Class (提炼类)

    某个类做了应该由2个类做的事.建立一个新类,将相关的字段和函数从旧类搬移到新类. 动机:一个类应该是一个清楚地抽象,处理一些明确的责任.但是在实际工作中,类会不断成长扩展.你会在这儿加入一些功能,在哪 ...

  9. js和jquery中的遍历对象和数组(forEach,map,each)

    arr[].forEach(function(value,index,array){ //do something }) 参数:value数组中的当前项,index当前项的索引,array原始数组: ...

  10. 前端开发进阶:推荐的 CSS 书写规范

    写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文章以及我的个人经 ...