基本语法
SELECT [DISTINCT] {*, column [alias],...}
FROM table;
参数说明
SELECT 标识出所需的数据列、函数、常量和表达式。
Distinct 删除查询结果中相同的值。
星号“*” 表示显示所有的列。
COLUMN指定的列名,表中相应列的数据显示在结果集中。
Alias 为列指定一个别名。
FROM 来自哪个表。

查询所有列
SQL> SELECT * FROM emp;
查询指定列
SQL> SELECT deptno, dname FROM dept;
使用算术表达式
SQL> SELECT empno, sal*0.8 FROM emp;
使用字符常量
SQ> SELECT empno, 'Name is: ', ename FROM emp;
使用函数
SQL> SELECT empno, LOWER(ename) FROM emp;

无条件查询:

定义列的别名
重新命名列标题
用于计算是很有用处的
紧跟列名;在列名和别名之间加入可选关键字AS
如果别名包含空格或特殊关键字符或区分大小写则需要使用双引号
连接操作符
用于连接列与列、列和字符之间的连接
形式上是以两个竖杠||
用于创建字符表达式的结果列

改变列标题
SQL> SELECT ename employeename,sal AS salary
FROM emp;
如果别名包含空格或特殊关键字符或区分大小写则需要使用双引号。例如:
SQL> SELECT ename "Emname",sal AS Salary
FROM emp;
使用连接字符串
SQL> SELECT '员工号:'||empno, '员工名:'||ename
FROM emp;
消除重复行
SQL> SELECT ALL deptno FROM emp;
SQL> SELECT DISTINCT deptno FROM emp;

有条件查询

查询满足条件的元组通过WHERE子句实现。

WHERE条件中常用的运算符号

关系运算

SQL> SELECT empno,ename,sal FROM emp
WHERE deptno != 10;
SQL> SELECT empno,ename,sal FROM emp
WHERE sal>1500

确定范围
使用谓词BETWEEN AND与NOT BETWEEN AND

SQL> SELECT * FROM emp
WHERE deptno BETWEEN 10 AND 20;
SQL> SELECT * FROM emp
WHERE sal NOT BETWEEN 1000 AND 2000;

注意:BETWEEN...AND...指定的范围包括上限值和下限值!

确定集合

使用谓词IN或NOT IN用来查找属性值属于/不属于指定集合的元组。

SQL> SELECT empno,ename,sal FROM emp
WHERE deptno IN(10,30);

字符匹配
使用LIKE或NOT LIKE进行模糊查询。通配符:
%(百分号)代表任意长(长度为0)字符串。
_(下划线)代表任意单个字符。
ESCAPE:定义一个表示转义的字符。

SQL> SELECT * FROM empWHERE ename LIKE '%S%';
SQL> SELECT * FROM emp WHERE ename LIKE '_A%';
SQL> SELECT * FROM emp WHERE ename LIKE '%x_%' ESCAPE 'x';

空值操作
涉及空值查询时使用IS NULL或 IS NOT NULL。
注意:这里的IS不能用=替代!

SQL> SELECT * FROM emp WHERE deptno IS NULL;
SQL> SELECT * FROM emp WHERE comm IS NOT NULL;

逻辑操作
用逻辑运算符NOT、AND和OR来联结多个查询条件。
优先级:NOT、AND、OR(用户可以用括号改变优先级)。
IN谓词实际上是多个OR运算的缩写。

SQL> SELECT * FROM emp
WHERE deptno=10 AND sal >1500;
SQL> SELECT * FROM emp
WHERE (deptno=10 OR deptno=20) AND sal>1500;
注意:
使用BETWEEN…AND,NOT BETWEEN…AND,IN,NOT IN运算符的查询条件都可以转换为NOT,AND,OR的逻辑运算。例如,下面两个语句是等价的:

SQL> SELECT * FROM emp
WHERE sal>=1000 AND sal<=2000;
SQL> SELECT * FROM emp
WHERE sal BETWEEN 1000 AND 2000;

查询排序:

使用ORDER BY子句对查询结果进行排序。
升序、降序排序
ASC: 升序 (缺省);DESC: 降序

SQL> SELECT empno,ename,sal FROM emp ORDER BY sal;

SQL> SELECT empno,ename,sal FROM emp
ORDER BY sal DESC;

多列排序
首先按照第一个列或表达式进行排序;当第一个列或表达式的数据相同时,以第二个列或表达式进行排序,以此类推。

SQL> SELECT * FROM emp ORDER BY deptno,sal DESC;

按表达式排序
可以按特定的表达式进行排序。
SQL> SELECT empno,ename,sal FROM emp
ORDER BY sal*12;

使用别名排序
可以使用目标列或表达式的别名进行排序。

SQL> SELECT empno,sal*12 salary FROM emp
ORDER BY salary;

使用列位置编号排序
如果列名或表达式名称很长,那么使用位置排序可以缩短排序语句的长度。

SQL> SELECT empno,sal*12 salary FROM emp ORDER BY 2;

使用统计函数

例:统计30号部门的总人数、人均工资、最高工资和最低工资。

SQL> SELECT count(*),avg(sal),max(sal),min(sal)
FROM emp WHERE deptno=30;

例7:从员工信息表中查询所有的部门个数

SQL> SELECT count(DISTINCT deptno) FROM emp;

说明:COUNT(DISTINCT expr)返回对于表达式expr非空并且值不相同的行数!

:统计所有员工的平均工资和奖金总和。
SQL> SELECT avg(comm),sum(comm) FROM emp;

注意:结果的计算情况!

例:统计员工工资的方差和标准差。
SQL> SELECT variance(sal),stddev(sal) FROM emp;

注意
除了COUNT(*)函数外,其他的统计函数都不考虑返回值或表达式为NULL的情况。
分组函数只能出现在目标列表达式、ORDER BY子句、HAVING子句中,不能出现在WHERE子句和GROUP BY子句中。
默认对所有的返回行进行统计,包括重复的行;如果要统计不重复的行信息,则可以使用DISTINCT选项。
如果对查询结果进行了分组,则分组函数的作用范围为各个组,否则分组函数作用于整个查询结果。

分组查询:

基本语法
单列分组查询
多列分组查询
使用HAVING子句限制返回组
使用ROLLUP 和CUBE
合并分组查询

Oracle DB中,分组查询由GROUP BY子句、分组函数和
HAVING子句共同实现

SELECT column, group_function, …
FROM table
[WHERE condition]
[GROUP BY [ROOLUP|CUBE|GROUPING SETS]
group_by_expression]
[HAVING group_condition]
[ORDER BY column[ASC|DESC]];

单列分组查询
将查询出来的记录按照某一个指定的列进行分组。
SQL> SELECT deptno,count(*),avg(sal)
FROM emp GROUP BY deptno;

多列分组查询
在GROUP BY子句中指定了两个或多个分组列。
例如,查询各个部门中不同工种的员工人数和平均工资。

SQL> SELECT deptno,job,count(*),avg(sal)
FROM emp GROUP BY deptno,job;

使用HAVING子句限制返回组
可以使用HAVING子句, 只有满足条件的组才会返回。
例如,查询部门平均工资高于1500的部门号、部门人数和部门平均工资。

SQL> SELECT deptno,count(*),avg(sal)
FROM emp WHERE avg(sal)>1500
GROUP BY deptno

注意:HAVING子句作用于组,WHERE子句作用于记录。先根据WHERE条件
查询记录,最后根据HAVING条件决定哪些组返回。

例如,统计20号部门中各个工种的员工人数和平均工资,并返回平均工资高于1000的工种人数和平均工资。

SQL> SELECT job,count(*),avg(sal)
FROM emp WHERE deptno=20
GROUP BY job HAVING avg(sal)>1000;

使用ROLLUP 和CUBE
如果在GROUP BY子句中使用ROLLUP选项,则还可以生成横向统计和不分组统计;
如果在GROUP BY子句中使用CUBE选项,则还可以生成横向统计、纵向统计和不分组统计。
例10:查询各个部门各个工种的平均工资、每个部门的平均工资和所有员工的平均工资。

SQL> SELECT deptno,job,avg(sal)
FROM emp
GROUP BY ROLLUP(deptno,job);

例11:查询各个部门中各个工种的平均工资、每个部门的平均工资、每个工种的平均工资和所有员工的平均工资。

SQL> SELECT deptno,job,avg(sal)
FROM emp
GROUP BY CUBE(deptno,job);

合并分组查询
使用GROUPING SETS可以将几个单独的分组查询合并成一个分组查询。
例如,查询各个部门的平均工资和各个工种的平均工资。
SQL> SELECT deptno,job,avg(sal)
FROM emp
GROUP BY GROUPING SETS(deptno,job);
注意:
GROUP BY子句用于指定分组列或分组表达式。
分组函数用于对分组进行统计。如果未对查询分组,则分组函数将作用于整个查询结果;如果对查询结果分组,则分组函数将作用于每一个组,即每一个分组都有一个集合函数。
HAVING子句用于限制分组的返回结果。
WHERE子句对表中的记录进行过滤,而HAVING子句对分组后形成的组进行过滤。
在分组查询中,SELECT子句后面的所有目标列或目标表达式要么是分组列,要么是分组表达式,要么是分组函数。
目标列、目标表达式指出现在GROUP BY子句中的列或表达式

转载于:https://www.cnblogs.com/XiDaPuBen/p/8678562.html

Oracle的基本查询知识相关推荐

  1. oracle层次查询用处,Oracle描述层次查询(hierarchicalquery)

    欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 有关Oracle描述层次查询(hierarchical query)的详细情况,先看一张图: 正确答案:BD A错误,树 ...

  2. 实战: 如何掌握Oracle和业务IO知识

    作者 | Hardy 来源 | 架构师技术联盟 今天,笔者打算梳理下Oracle架构相关的知识,让读者快速全面掌握Oracle和大数据领域知识. Oracle系统结构由内存结构.物理和逻辑结构等几个部 ...

  3. Oracle PL/SQL基础知识

    Oracle PL/SQL基础知识 过程(存储过程) 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分 ...

  4. oracle nvarchar2问题,oracle中nvarchar2查询结果显示总是少一位

    oracle 中对查询出来的数据进行切割.截取等操作 oracle 中对查询出来的数据进行切割.截取等操作 最近遇到一个问题,需要把一个带有,的字符串拆分成多行.通过查询资料,这个操作需要使用以下2个 ...

  5. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用. ...

  6. 实验五 oracle高级数据查询技术

    实验五 oracle高级数据查询技术 实验目的:  一.掌握日期型数据的操作技术  二.掌握层次查询技术  三.理解情景查询与翻译查询技术  四.了解统计查询技术 实验内容: 一.日期型数据的操作   ...

  7. oracle存储过程 多条件,Oracle多条件查询实际分页存储过程实操

    以下的文章主要是介绍Oracle多条件查询分页存储过程,以下就是Oracle多条件查询分页存储过程具体方案的描述,希望在你今后的学习中会有所帮助.将业务逻辑放到Oracle中使得后台代码很精简,Ora ...

  8. 三、Oracle的简单查询

    Oracle的表查询 前提:搞清楚scott的几张表的含义 EMP:雇员表 字段 类型 注释 EMPNO   员工编号 ENAME   员工姓名 JOB   员工职位 MGR   上级编号 HIRED ...

  9. Oracle之分页查询

    2019独角兽企业重金招聘Python工程师标准>>> Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式 SELECT * FROM ( SELECT ...

  10. oracle分组聚合查询,Oracle中分组查询group by用法规则解析

    本篇文章小编给大家分享一下Oracle中分组查询group by用法规则解析,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Oracle中group by ...

最新文章

  1. shell脚本之 if,case,for的用法
  2. 网络工程师计算机类吗,机房网络工程师 | 网络工程专业的你知道吗?
  3. 三十天学不会TCP,UDP/IP网络编程 - RST的用法
  4. oracle重新启动步骤
  5. Xshell上传、下载文件到linux
  6. 14c语言课程设计题目,2011级数据库课程设计任务书
  7. POJ1226 Substrings(二分+后缀数组)
  8. ubuntu16.04中使用搜狗输入法Qt5无法输入中文解决方式
  9. 社区论坛小程序带订阅功能
  10. css基础媒体查询和rem
  11. VB讲课笔记12:文件管理
  12. python 调用另一个py_Python打包:setuptools与setup.py/.cfg入门简介
  13. 如何在word中的图片上画圈标注_word文字下怎么画圈标记
  14. 涂上你的脸! 如何创建自定义Photoshop笔刷
  15. matlab声压级的计算,声压级计算
  16. python图像坐标系_世界坐标系、相机坐标系和图像坐标系的转换(Python)
  17. 【软件测试基础】控制用例粒度:测试点的组合和拆分
  18. 如何利用MATLAB建立Lotka-Volterra模型及其改进模型
  19. 《挑战程序设计竞赛》 读后感(转载)
  20. Luogu P2708 硬币翻转 题解

热门文章

  1. Visual Studio Code 使用 ESLint 增强代码风格检查
  2. 光伏发电设备被淹或浸水时的相关注意事项
  3. 开源html5游戏-少年行
  4. windows phone笔记
  5. Grails枚举一例
  6. windows 2003下配置IIS6为iis5方式的隔离模式运行
  7. ES中使用nested类型的内嵌对象
  8. 微服务架构及其最重要的10个设计模式
  9. 这个被程序员捧上神坛的IDEA插件出来后,我扔掉了Postman了
  10. 将20M文件从30秒压缩到1秒,我是如何做到的?