Oracle常用sql语句(二)之组函数、多表查询
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语句(二)之组函数、多表查询的更多相关文章
- oracle常用SQL语句(汇总版)
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...
- oracle 常用sql语句
oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...
- 剑指Offer——常用SQL语句、存储过程和函数
剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...
- Oracle常用SQL语句大全
常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...
- ysql常用sql语句(12)- group by 分组查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
- Mysql常用sql语句(11)- between and 范围查询
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 between and可以判断值是否在指定范围内 ...
- Mysql常用sql语句(19)- in / exists 子查询
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 子查询在我们查询方法中是比较常用的,通过子查询可 ...
- Mysql常用sql语句(7)- order by 对查询结果进行排序
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 通过select出来的结果集是按表中的顺序来排序 ...
- Mysql常用sql语句(10)- is null 空值查询
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 is null是一个关键字来的,用于判断字段的值 ...
随机推荐
- String Problem HDU - 3374(最大最小表示法+循环节)
题意: 给出一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串 解析: 能出现多少次就是求整个字 ...
- 高rong效chang的可持久化treap
很多人觉得可持久化treap很慢,但是事实上只是他们可持久化treap的写法不对.他们一般是用split和merge实现所有功能,但是这样会有许多不必要的分裂.其实我们可以用一种特殊的方式来实现插入和 ...
- 用户缓冲式I/O
2018-08-05 (星期日)缓冲式I/O 所有磁盘操作都是按照块来进行的,因此,若所送出的I/O请求,其对齐块便捷为实际块大小的整数倍,则可以优化I/O的性能. 读取操作需要进行的系统 ...
- 【总结】Link-Cut Tree
这是一篇关于LCT的总结 加删边的好朋友--Link Cut Tree Link-Cut Tree,LCT的全称 可以说是从树剖引出的问题 树剖可以解决静态的修改或查询树的链上信息:那如果图会不断改变 ...
- BSGS和扩展BSGS
BSGS: 求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\) 先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\) 然后把这些都存在map ...
- Spring Cloud Greenwich 新特性和F升级分享
2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以下为总结,希望对你使用Spring Cl ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
- 通过系统自带的MSI安装包来提权账号
Windows environments provide a group policy setting which allows a regular user to install a Microso ...
- uoj 36 玛里苟斯
[清华集训2014]玛里苟斯 - 题目 - Universal Online Judge k=1,2,3,4,5各占20pts是提示 应当分开考虑 k=1 拆位,如果第i位有1,则有1/2的概率xor ...
- C++并发编程 thread
std::thread C++11在标准库中为多线程提供组件, 使用线程需要包含头文件 thread, 其命名空间为 std. 启动新线程 每个进程至少有一个线程: 执行main()函数的线程, 其余 ...