--在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. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  2. vue 双向数据绑定原理

    博客地址: https://ainyi.com/8 采用defineProperty的两个方法get.set 示例 <!-- 表单 --> <input type="tex ...

  3. 《C#并发编程经典实例》学习笔记—2.3 报告任务

    问题 异步操作时,需要展示该操作的进度 解决方案 IProgress<T> Interface和Progress<T> Class 插一段话:读<C#并发编程经典实例&g ...

  4. C# 以管理员权限删除文件

    前言 通过后台,想删除C盘下”C:\\Windows\\winsxs\\Backup“的缓存文件. 然后提示对路径“C:\\Windows\\winsxs\\Backup\\amd64_hid-use ...

  5. Java 学习笔记 观察者模式与适配者模式 监控文件夹

    2019.4.12 适配器模式,如果某个类需要实现多个方法,但是开发过程中只需要实现其中的一两个方法,直接使用该类的适配器类,复写需要实现的方法即可 观察者模式:有多个观察者observe观察一个主体 ...

  6. react中的路由配置踩坑记

    react 路由配置中,如果根路由(/)匹配一个组件,另一个路由(/list)在进行匹配的时候也会匹配到根路由(/),即在 /list 页面展示的时候 / 页面总是展示在上方. 此时如果想进行严格匹配 ...

  7. Kotlin入门(30)多线程交互

    Android开发时常会遇到一些耗时的业务场景,比如后台批量处理数据.访问后端服务器接口等等,此时为了保证界面交互的及时响应,必须通过线程单独运行这些耗时任务.简单的线程可使用Thread类来启动,无 ...

  8. MTK Android O1平台预置apk

    在MTK Android O1平台预置apk为可卸载时.预置到旧的路径system/vendor/operator/app会编译报错,"You cannot install files to ...

  9. SQL Server捕获发生The query processor ran out of internal resources and could not produce a query plan...错误的SQL语句

    最近收到一SQL Server数据库服务器的告警邮件,告警内容具体如下所示: DATE/TIME: 10/23/2018 4:30:26 PM DESCRIPTION:  The query proc ...

  10. 浅谈TCP IP协议栈(三)路由器简介

    读完这个系列的第一篇浅谈TCP/IP协议栈(一)入门知识和第二篇浅谈TCP/IP协议栈(二)IP地址,在第一篇中,可能我对协议栈中这个栈的解释有问题,栈在数据结构中是一种先进后出的常见结构,而在整个T ...