--在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. 第22章 使用外部身份提供商登录 - Identity Server 4 中文文档(v1.0.0)

    ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行 ...

  2. 触发器 评论折叠显示(jquery)

    触发器   评论折叠显示(jquery)   子页面 : @if(Model?.count>0) {      var i=1;      var n=model.count-2      va ...

  3. 将excel按照某一列拆分成多个文件(方案整理)

    1解决方案:将excel按照某一列拆分成多个文件 https://blog.csdn.net/ntotl/article/details/79141314 2遇到的问题:解决vbe6ext.olb不能 ...

  4. 记录 FTPClient 超时处理的相关问题

    apache 有个开源库:commons-net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的 FTP 工具. 但碰到一些问题,并不是说是开源库的 bug,可能锅得算在产品头上吧,各 ...

  5. C# ArcEngine二次开发之动态图层

    ArcEngine搭载C#进行GIS的二次开发,关于目标显示的问题,由于考虑到设置定时器刷新目标位置和方向,因此在显示图层上采用的是动态图层DynamicLayer,主要用到的dll文件是ESRI.A ...

  6. java对接申通下单接口示例代码

    上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...

  7. 基于Git项目管理客户端SourceTree的免注册安装及远程连接方法

    作为程序员,不可避免的要在github上查询代码,而在企业项目中,为了使得项目好管理需要使用项目管理客户端,所以接下来详细讲解一下基于git的sourceTree在windows系统下的安装及与Git ...

  8. MySQL新参数log_error_verbosity

      在介绍这个参数前,我们先聊聊参数log_warnings.我们知道MySQL中,其中log_error定义是否启用错误日志的功能和错误日志的存储位置,log_warnings定义是否将告警信息(w ...

  9. Linux学习历程——Centos 7 top命令

    一.命令介绍 top 命令用于动态的监控进程活动与系统负载信息. 格式为 top [参数] 二.实例 直接运行top命令 top命令执行结果的前五行为系统整体的统计信息,代表含义如下: 第1行:系统时 ...

  10. About Pull Strings 英语走后门议论文

    About pull strings Author : Pleiades_Antares 1. From ancient times to the present, the "going b ...