--在SELECT子句中出现的函数或表达式会在结果集中作为字段名,这样的可读性差,因此可以为
--这样的字段添加别名(别名中不能出现空隔,除非是用双引号括起来的)
--别名中如果希望包含空隔或者区分大小写,那么该别名需要使用双引号括起来。
SELECT ename,sal*12 "sal" FROM emp_weiyiji

--使用>,<,>=,<=,!=,<>,=(其中!=和<>是一样的,推荐使用<>,因为<>更通用)
SELECT ename,sal FROM emp_weiyiji
WHERE sal<2000;
SELECT ename,sal,job FROM emp_weiyiji
WHERE deptno <> 10;
SELECT ename,sal,hiredate FROM emp_weiyiji
WHERE hiredate > TO_DATE('1982-1-1','YYYY-MM-DD');

--使用AND,OR关键字
SELECT ename,sal,job FROM emp_weiyiji
WHERE sal>1000 AND job = 'CLERK';
SELECT ename,sal,job FROM emp_weiyiji
WHERE sal>1000 OR job = 'CLERK';

--与,或用来连接多个条件:
--AND优先级高于OR,所以可以通过加括号来提高OR的优先级
SELECT ename,sal,job FROM emp_weiyiji
WHERE sal>1000 AND (job = 'SALESMAN'OR job = 'CLERK');

--LIKE用于模糊匹配字符串,有两个通配符:
-- _:表示单一的一个字符 %:表示任意个字符(0-多个)
查看名字第二个字母是A第四个字母是T的?
SELECT ename,sal,job FROM emp_weiyiji
WHERE ename LIKE '_A_T%';
查看名字最后一个字母是T的?
SELECT ename,sal,job FROM emp_weiyiji
WHERE ename LIKE '%T';

--IN(list),NOT IN(list)判断在列表中或不在列表中他们也常用在子查询中
SELECT ename ,job FROM emp_weiyiji
WHERE job IN ('MANAGER', 'CLERK');
SELECT ename, job FROM emp_weiyiji
WHERE deptno NOT IN (10,20);

--BETWEEN...AND,,,判断在一个区间范围内
查看工资在1500到3000之间的员工?
SELECT ename,sal,deptno FROM emp_weiyiji
WHERE sal BETWEEN 1500 AND 3000;

--ANY,ALL通常是联合>,>=,<,<=的判断,并且判断的是多个值
-->ANY(list):大于列表之一(大于最小即可)
-->ALL(list):大于列表所有(大于最大的)
--<ANY(list):小于列表之一(小于最大即可)
--<ALL(list):小于列表所有(小于最小的)
-- 他们用在子查询的判断中
SELECT ename, sal,deptno FROM emp_weiyiji
WHERE sal<ALL(3500,4000,4500);

--查询条件中使用表达式和函数
查询条件中使用函数:
SELECT ename,sal,job FROM emp_weiyiji
WHERE ename = UPPER('scott');
查询条件中使用表达式:
SELECT ename,sal,job FROM emp_weiyiji
WHERE sal*12>50000;

--DISTINCT关键字
--在SELECT子句中使用,用来对指定的字段值去除重复复行。
查看公司有哪些职位?
SELECT DISTINCT job FROM emp_weiyiji

--多字段去重时,不保证单一的某个字段的值没有重复,而去重原则是这些字段值的组合没有重复行。
SELECT DISTINCT job,deptno FROM emp_weiyiji

--ORDER BY 子句
--ORDER BY子句用来排序结果集,该子句只能写在SELECT语句的最后一个子句上,ORDER BY 可以根据
--给定字段进行升序或者降序排列结果集。其中ASC为升序,通常不写,因为默认为升序,DESC为降序。
查看公司员工工资的排名?
SELECT ename,sal,deptno FROM emp_weiyiji
ORDER BY sal DESC;--降序

--多字段排序:
--排序是有优先级的,首先按照第一个字段的排序方式对结果排序,当第一个字段的值相同时才按照第二个
--字段的排序方式排序这些记录。
SELECT ename,deptno,sal FROM emp_weiyiji
ORDER BY deptno DESC,sal DESC;
查看年薪高于2W并且在10或者20号部门,名字中含有E的员工,按照工资从高到低排列显示。
SELECT ename,sal ,deptno FROM emp_weiyiji
WHERE sal*12>20000 AND deptno IN(10,20) AND ename LIKE '%E%'
ORDER BY sal DESC;

--聚合函数
--聚合函数是用来统计数据的 其中包括:MAX,MIN,SUM,AVG,COUNT
--MAX,MIN求最大值与最小值 SUM,AVG求总和与平均值 COUNT 统计记录数
SELECT MAX(sal),MIN(sal),SUM(sal),AVG(sal) FROM emp_weiyiji;
SELECT COUNT(ename) FROM emp_weiyiji;--统计记录数

--聚合函数都是忽略NULL的
SELECT SUM(comm),AVG(comm),COUNT(comm) FROM emp_weiyiji;--忽略NULL
SELECT SUM(comm),AVG(NVL(comm,0)) FROM emp_weiyiji;--先将NULL改成0,然后求平均值

--排序的字段若是有NULL值,则NULL被认作为最大值
SELECT comm FROM emp_weiyiji
ORDER BY comm DESC;

--当SELECT子句中出现了聚合函数,那么不是聚合函数的其他单独字段都必须出现在GROUP BY子句中,反
--过来则无要求。
SELECT ename,MAX(sal) FROM emp_weiyiji;--此句会报错
--GROUP BY子句
--GROUP BY是配合聚合函数使用的。
--GROUP BY允许将结果集安照给定段值一样的记录进行分组,然后配合聚合函数对这些分组的记录分别
--统计结果。
查看每个部门的平均工资?
SELECT AVG(sal),deptno FROM emp_weiyiji
GROUP BY deptno;
查看每个职位的最高工资和最低工资
SELECT MAX(sal),MIN(sal),job FROM emp_weiyiji
GROUP BY job
查看平均工资高于2000的的部门具体有哪些?
SELECT AVG(sal),deptno FROM emp_weiyiji
GROUP BY deptno
HAVING AVG(sal)>2000
--WHERE中不能使用聚合函数当做过滤条件原因在于过滤的时机不对。WHERE是在检索表中数据的时候进行
--过滤的,所以WHERE是用来确定结果集记录数的。而聚合函数是建立在结果集生成后的数据进行统计的,
--所以使用聚合函数过滤是在WHERE之后进行的。

--HAVING子句
--HAVING子句必须出现在GROUP BY子句之后,作用是添加过滤条件来去除不符合的分组。HAVING中可以使
--用聚合函数作为过滤条件。
查看平均工资高于2000的这些部门的最高工资与最低工资是多少?
SELECT MAX(sal),MIN(sal),deptno FROM emp_weiyiji
GROUP BY deptno
HAVING AVG(sal)>2000
查看最低工资高于800的那些部门各有多少人?
SELECT COUNT(*),deptno FROM emp_weiyiji
GROUP BY deptno
HAVING MIN(sal)>800

--关联查询
--关联查询指的是数据从多张表中联合查询,结果集中的字段来自不同表。关联查询中由于指定表与表的数据
--的联系的条件称为关联条件。
--通常关联查询中都要写关联条件,因为不写会产生笛卡尔积,通常情况下都是无意义的结果集,开销巨大。
SELECT e.ename,e.deptno,d.dname FROM emp_weiyiji e,dept_weiyiji d
WHERE e.deptno=d.deptno
不满足连接条件的记录是查询不出来的。
SELECT e.ename,d.dname FROM emp_weiyiji e,dept_weiyiji d
N张表关联查询要写至少N-1个连接条件
--过滤条件必须与连接条件同时成立。
查看在NEW YORK工作的员工都有谁?
SELECT e.ename,e.deptno,d.dname,d.loc
FROM emp_weiyiji e, dept_weiyiji d
WHERE e.deptno=d.deptno AND d.loc='NEW YORK'
查看工资高于2000的员工都有谁?
查看该员工的名字,工资,所在部门名字,以及工作所在地?
SELECT e.ename,e.sal,d.dname,d.loc
FROM emp_weiyiji e,dept_weiyiji d
WHERE e.deptno=d.deptno AND e.sal>2000

内连接:JOIN
--内连接也是关联查询的一种。
查看每个员工的名字以及其所在部门名?
SELECT e.ename,d.dname
FROM emp_weiyiji e JOIN dept_weiyiji d ON e.deptno=d.deptno
WHERE d.dname='SALES'

外连接
--外连接在关联查询中除了可以将满足条件的记录查询出来之外,还可以将不满足连接条件的记录查询出来。
外连接分为:
--左外连接:以JOIN左侧表作为驱动表(所有记录都显示)那么当该表记录不满足连接条件时,那么来自右侧
--表的字段值为NULL。
--右外连接,全外连接。
左外连接:
SELECT e.ename,d.dname
FROM emp_weiyiji e LEFT OUTER JOIN dept_weiyiji d ON e.deptno=d.deptno
右外连接:
SELECT e.ename,d.dname
FROM emp_weiyiji e RIGHT OUTER JOIN dept_weiyiji d ON e.deptno=d.deptno
全外连接:
SELECT e.ename,d.dname
FROM emp_weiyiji e FULL OUTER JOIN dept_weiyiji d ON e.deptno=d.deptno
--左右外连接的简便写法:
SELECT e.ename,d.dname
FROM emp_weiyiji e,dept_weiyiji d
WHERE e.deptno(+)=d.deptno--(+)在那边就是哪边外连接,全外连接没有简写方法,只能写上面的

自连接:
--自连接即:当前表的记录可以对应当前表自己的多条记录。这种设计是为了解决记录属性一样但是又是存
--在父子关系的树状结构数据时使用。
--常见的:商品类别
SELECT e.ename,m.ename FROM emp_weiyiji e,emp_weiyiji m
WHERE e.mgr=m.empno

SELECT e.ename,m.ename FROM emp_weiyiji e JOIN emp_weiyiji m
ON e.mgr = m.empno

OracleSql语句学习(三)的更多相关文章

  1. OracleSql语句学习(五)

    --数据库对象数据库对象包含:表,视图,索引,序列视图VIEN视图在SQL语句中体现的角色与表一样,但是视图并非真实存在的表,它只是对应一条查询语句的结果集 使用视图通常是为了重用子查询,简化SQL语 ...

  2. OracleSql语句学习(四)

    SELECT e.ename,m.ename,d.locFROM emp_weiyiji e JOIN emp_weiyiji m ON e.mgr=m.empnoJOIN dept_weiyiji ...

  3. OracleSql语句学习(二)

    --DQL语句--查询语句用来检查数据使用--SELECT子句用来指定要查询的字段,若写“*”则表示查询所有字段.FROM子句用来指定数据来源的表.--SELECT * FROM emp_weiyij ...

  4. OracleSql语句学习(一)

    --SQL语句本身是不区分大小写的,每个关键字用空格隔开,为了增加可读性,退出所有关键字--全部大写,非关键字都小写SELECT SYSDATE FROM dual--创建表CREATE TABLE ...

  5. 【java开发】分支语句、循环语句学习

    一.Java分支语句类型 if-else 语句 switch 关于if-esle语句可以拆分为三种 if语句 if(条件){语句块;} if-else语句if(条件语句){语句块;} if-else ...

  6. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  7. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  8. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  9. Python第一周基本语句学习整理

    目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ...

随机推荐

  1. Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定

    一. html与Controller中的双向数据绑定 html-Controller的双向数据绑定,在开发中非常常见,也是Angularjs1.x的宣传点之一,使用中并没有太多问题. 1.1数据从ht ...

  2. [转]Nodejs进程间通信

    本文转自:http://www.cnblogs.com/rubyxie/articles/8949417.html 一.场景 Node运行在单线程下,但这并不意味着无法利用多核/多机下多进程的优势 事 ...

  3. C#委托与事件学习笔记

    委托事件学习笔记 本文是学习委托和事件的笔记,水平有限,如有错漏之处,还望大神不吝赐教. 什么是委托?从字面意思来解释,就是把一个动作交给别人去执行.在实际开发中最常用的就是使一个方法可以当做一个参数 ...

  4. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)

    环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建 ...

  5. CentOS 7下用firewall-cmd

    一 .控制端口/服务 可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名.虽然开放http服务就是开放了80端口,但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定 ...

  6. Oracle day04 DML_事务_序列_视图_数据类型_DDL

    DMLinsert关键字作用:往表中插入一条(多条)数据 语法1:元祖值式的插入语法1: insert into tablename(column1,column2,...,columnN) valu ...

  7. Android开发——获得Json数据,并显示图片

    流程介绍 使用okhttp网络框架进行get请求,获得json数据 //一个封装好的工具类的静态方法 public static void sendOkHttpRequest(final String ...

  8. js实现消息滚动效果

    <div class="inform" style=""> <div style="height:35px; overflow:hi ...

  9. 给zTree的treeNode添加class

    onNodeCreated 回调,捕获 DOM 创建完毕的回调,然后利用 zTree 的规则找到 treeNode.tId + "_a" 这样的 标签,自行添加 class 就是了 ...

  10. 前端js 实现文件下载

    https://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-file/ 侵删 1.H5 down ...