学习oracle数据库也有一段时间了,现在将一些前期的总结再拿出来总结一下,希望能对初学习或自学的朋友有一定的帮助。

所需的表: (以下操作只涉及到ORACLE数据库中的emp表,如果没有表的朋友可以找我要,但基本都有的)

1.完整的查询语句(可以先了解一下完整的查询语句,下面再一步一步来)

SELECT ‘数据源中的某些具体的字段、函数、常量、*’

FROM  ‘数据源’

WHERE  ‘查询条件’

GROUP BY    ‘分组’           HAVING  筛选条件

ORDER BY  ‘排序’

语法解释:

从数据源中,按条件筛选出部分数据,对该部分数据以某规则进行分组,从分组后的结果中

再一次进行筛选,最终查出需要的字段,并以某排序规则进行排序

连接:||

  1. 逻辑运算

逻辑运算符:  =(等于),>=(大于等于),<=(小于等于),!=(不等于),< >(不等于),>(大于),<(小于)

注意点:空值不参与运算

--查询薪资大于1500的员工
SELECT * FROM EMP WHERE SAL>1500;

函数拓展:

字符串转日期:TO_DATE('字符串','与字符串对应的日期格式')

--查询1981年11月17日入职的员工(emp表中的日期都是很早的了)
SELECT * FROM EMP WHERE HIREDATE=TO_DATE('1981/11/17','YYYY/MM/DD');

日期转字符串:TO_CHAR('日期','日期转成字符串的目标格式')

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'YYYYMMDD')='19811117';

  1. 模糊查询

LIKE:

谓词LIKE可以用来进行字符串的匹配

LIKE:符合

NOT  LIKE:不符合

通配符:

_:有且只有一个字符

%:有零个或者一个或多个字符

转义字符:ESCAPE  ‘/’  :要查询含有_和%的字符串需要将_和%转义为普通的字符,不然查询不了。

例子:

--查询首字母是S的员工
SELECT * FROM EMP WHERE ENAME LIKE 'S%';

--查询首字母不是S的员工
SELECT * FROM EMP WHERE ENAME NOT LIKE 'S%';

转义字符的运用(当需要查询的字段的数据含有%或下划线的时候需要加上转义字符,将通配符转义成普通的符号)如下:

--查询姓名中含有%的员工
SELECT * FROM EMP WHERE ENAME LIKE '%/%%' ESCAPE('/');

注意:/之后的%已经不是通配符%了,经过转义,它现在只是一个%符号。

  1. 包含查询

IN( ):

谓词IN可以用来查找属性值属于指定集合的元组,只要不在该集合中即条件成立。

集合:一组有着相同属性(相同数据类型)的数据

IN( ):包含

--查询10号和20号部门的员工
SELECT * FROM EMP WHERE DEPTNO IN(10,20);

NOT IN( ):不包含

--查询除了10号和20号部门外的所有员工
SELECT * FROM EMP WHERE DEPTNO NOT IN(10,20);

  1. 范围查询

BETWEEN AND  ‘在。。到。。之间’

NOT BETWEEN AND ‘不在。。到,,之间’

语法:SELECT COL_LIST FROM TB_NAME WHERE COL_NAME BETWEEN NUM1 AND NUM2;

--查询薪资在1500到2500的员工(包含1500和2500)
SELECT * FROM EMP WHERE SAL BETWEEN 1500 AND 2500;

注意:1.NUM1<=NUM2

  1. 包含边界值

    1. NULL值判断

NULL:空值

NOT NULL:非空 (前面都跟IS)

语法:SELECT COL_LIST FROM TB_NAME WHERE COL_NAME IS NULL ;

--空值

--查询奖金为空的员工
SELECT * FROM EMP WHERE COMM IS NULL;

SELECT COL_LIST FROM TB_NAME WHERE COL_NAME IS NOT NULL ;

--非空值

--查询奖金不为空的员工
SELECT * FROM EMP WHERE COMM IS NOT NULL;

  1. ANY和ALL

ANY --任意一个

--查询10号和20号部门的员工
SELECT * FROM EMP WHERE DEPTNO=ANY(10,20);

注意:只要部门编号等于any里的任意一个就行,这与in有些相像,

但如果是>any()的话,只需要大于里面最小的行;如果是<any()的话只要小于里面最大的就行。

ALL --所有全部

SELECT * FROM EMP WHERE DEPTNO=ALL(10,20);

没有结果,因为这需要部门编号等于(10,20)的才行,这在表里是不存在的;当>all()时,需要大于里面最大的才行;而<all(),则是小于里面最小的才符合。

  1. 布尔连接

语法:

SELECT COL_NAME FROM TB_NAME WHERE CONDITION1 AND CONDITION2;

SELECT COL_NAME FROM TB_NAME WHERE CONDITION1 OR CONDITION2;

条件连接关键词:AND 和(且)  OR 或

注意:

1)通过布尔连接,可以合并相同字段的条件,也可合并不同字段的条件

--相同字段的条件
--查询部门编号是10号或20号的员工
SELECT * FROM EMP WHERE DEPTNO=10 OR DEPTNO=20;

--不同字段的条件
--查询部门编号是10号和岗位是CLERK的员工
SELECT * FROM EMP WHERE DEPTNO=10 AND JOB='CLERK';

2)AND和OR一块使用时 AND的优先级高于OR

3)如果有小括号 先考虑括号中的条件

2.0 排序查询

语法:

SELECT COL_LIST FROM TB_NAME ORDER BY ODR_CONDITION [ASC|DESC];

语法解释:

对于从TB_NAME中查出的COL_LIST数据按照规则ODR_CONDITION进行排序

ASC:升序(不写的话默认升序)                                          DESC:降序

--按薪资降序排
SELECT * FROM EMP ORDER BY SAL DESC;
--按薪资升序排
SELECT * FROM EMP ORDER BY SAL;

函数扩展:

1)NULL值的默认排序与强制排序

NULL值默认排序为极大值,即升序排列时,空值排在最后,降序排列时,空值排在最前

强制空值排在最前:NULLS FIRST

SELECT * FROM EMP ORDER BY COMM NULLS FIRST;

强制空值排在最后:NULLS LAST

SELECT * FROM EMP ORDER BY COMM NULLS LAST;

2)函数NVL()

用法:NVL(COL_NAME,DEFAULT_VALUE)

--给没有奖金的员工加100奖金
SELECT ENAME,NVL(COMM,100) FROM EMP;  --当comm字段的数据为空时,给它复制100;

3)函数CASE

用法:

CASE WHEN CONDITION1 THEN RESULT1

WHEN CONDITION2 THEN RESULT2

...

ELSE DEFAULT_RESULT

END

--薪资小于等于1500的为低工资,大于1500,小于2500的为中工资,大于或等于2500的为高工资
SELECT A.*,
       CASE
         WHEN SAL <= 1500 THEN
          '低工资'
         WHEN SAL > 1500 AND SAL < 2500 THEN
          '中工资'
         WHEN SAL >= 2500 THEN
          '高工资'
       END 待遇情况
  FROM EMP A;

3.0 分组查询

聚合函数

概念:把分散的数据按某种规则将数据分成不同的组、或所有数据整体作为一个组,对组级别的数据进行分析,每组得到一个返回值。

五个聚合函数:

SUM():求合计值

--求所有员工的薪资合计
  SELECT SUM(SAL) FROM EMP;

MAX():求最大值

--求最大薪资
  SELECT MAX(SAL) FROM EMP;

MIN():求最小值

--求最小薪资
SELECT MIN(SAL) FROM EMP;

AVG():求平均值

--求工资的平均薪资
  SELECT AVG(SAL) FROM EMP;

COUNT():计数

--求所有人数
  SELECT COUNT(ENAME) FROM EMP;

注意:

1)所有聚合函数都是针对非空值进行的统计

2)COUNT()的特殊用法:若是在不确定哪些字段不含空值的情况下统计总数据量,可以使用COUNT(1)或COUNT(*)来统计

3)SUM和AVG只针对数值,其他三个可针对任意类型

GROUP BY ‘分组查询’

语法:

SELECT COL_LIST,聚合函数,常量

FROM TB_NAME

GROUP BY COL_LIST;

语法解释:

对数据源TB_NAME按照COL_LIST分组,统计各分组的分析情况

--统计各部门的平均薪资
SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;

注意:

1.对于含有GROUP BY子句的SQL语句,SELECT子句中仅允许出现

1)GROUP BY中出现过的字段

2)聚合函数

3)常量

2.对于不含有GROUP BY子句但SELECT子句中含有聚合函数的情况,SELECT子句中除聚合函数与常量外,不能再出现其他字段

分组过滤

语法:

SELECT COL_LIST,聚合函数,常量

FROM TB_NAME

GROUP BY COL_LIST

HAVING 以聚合函数为基础的条件判断;

语法解释:

对数据源TB_NAME按照COL_LIST分组,统计各分组的分析情况,并对分析结果进行筛选

--查询平均薪资大于1500的部门
SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING AVG(SAL)>1500;

WHERE与HAVING的区别和联系

1.都是做条件筛选用的

2.WHERE不必和GROUP BY连用,HAVING必须和GROUP BY连用

3.WHERE筛选的是针对FROM后表的数据,HAVING是针对GROUP BY分组之后的数据进行筛选

4.WHERE中的部分条件可以写在HAVING中,但非常影响执行效率,不建议使用

5.只有在GROUP BY子句中出现的字段,才能够由WHERE子句中转写到HAVING子句中

6.WHERE 后面不能跟聚合函数

区分:

书写顺序:SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

执行顺序:FROM ... WHERE ... GROUP BY ... HAVING ... SELECT ... ORDER BY ...

oracle简单查询语句相关推荐

  1. java oracle分页查询语句_Oracle分页查询语句的写法(转)

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

  2. Oracle分页查询语句(六)

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. Oracle分页查询语句(一):http://yangtingkun.itpub.net/post/468/100278 Oracl ...

  3. oracle 操作树大全,oracle树查询语句

    oracle树查询语句 2020-01-13 01:01:01 79 格式: SELECT column FROM table_name START WITH column=value CONNECT ...

  4. java oracle分页查询语句_oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  5. SQL:简单查询语句操作实例

    一.SQL Server简单查询语句 背景知识: 一.查询:SQL中最基本.最常用的操作,用来对数据库进行查询 二.表达式: select 属性列 from 表 where 筛选条件 group by ...

  6. JAVA中oracle分页语句,oracle分页查询语句,java得到分页查询语句的方法

    oracle分页查询语句 select * from ( select a.*, rownum rn from (select * from table_name) a where rownum &l ...

  7. oracle 动态条件查询语句,教您Oracle动态查询语句的用法

    Oracle动态查询语句是一类特殊的查询语句,下面就为您详细介绍Oracle动态查询语句的语法,如果您对Oracle动态查询方面感兴趣的话,不妨一看. 1. 当使用EXECUTE IMMEDIATE语 ...

  8. oracle中简单查询语句的格式及执行顺序分析

    一条简单的查询sql格式如下: SELECT ... FROM .... [WHERE ...] --过滤单行 [GROUP BY ...   [HAVING ...]]--GROUP BY对前面wh ...

  9. Oracle分页查询语句

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM  ( SELECT A.*, ROWNUM RN  FROM (SELECT * FRO ...

最新文章

  1. Ubuntu安装MongoDB
  2. 软件系统的4大技术本质
  3. hibernate之Configuration对象
  4. 五分之一参会者将缺席AAAI 2020,主办方被迫“在线开会”,中国作者可远程演讲...
  5. 分享一个超棒的响应式幻灯jQuery插件 - refineslide
  6. ffmpeg的中文学习文档
  7. Java之反射代码演示说明
  8. Linux文件系统与日志
  9. Qt笔记-AES加密
  10. 海岸鸿蒙甲醇中8种苯系物,甲醇中8种苯系物混合溶液标准物质-8种VOC
  11. DirectX 3D Mesh类
  12. 温习Java和基础汇总
  13. CodeForces #352B.Jeff and Periods
  14. 互联网思维到底是什么?
  15. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(四)...
  16. 技术经理成长复盘-我是什么样的人
  17. Unity3D 文字线条效果
  18. python装在固态还是机械好_大容量与高性能SSD硬盘的比较
  19. Arduino用遥控器控制LED灯开关和亮度
  20. 替换window.showModalDialog 已解决!!!

热门文章

  1. 手机app开发用的是什么语言?有哪些优势?
  2. 新电脑配置显卡驱动及CUDA、CUDNN环境
  3. ROS安装/// rosdep update/the read operation is timed out
  4. JavaScript解析json格式数据简单示例
  5. 微软专利展示了具有灵活触控笔的双屏设备
  6. 各大搜索引擎蜘蛛名称
  7. 【NLP自然语言处理】文本特征提取
  8. ps—选择连续的多个图层、同时操作多个图层、选择所有图层与取消选择图层、锁定图层、锁定透明像素、锁定图像像素、锁定位置、锁定全部
  9. Redhat Enterprise Linux 6.5下安装Oracle11g R2
  10. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)