--在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. C# 如何获取Url的host以及是否是http

    参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host Example there's an g ...

  2. Predicate--入门简介

    说明:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. var predicate = new Predicate&l ...

  3. 学JAVA第四天,JAVA获取年月日

    先添加引用import java.util.Calendar; 然后编写代码: Calendar calendar = null;//声明 calendar= Calendar.getInstance ...

  4. 数据结构(java版)学习笔记(三)——线性表之单链表

    单链表的优点: 长度不固定,可以任意增删. 单链表的缺点: 存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针). 要访问特定元素,只能从链表头开始,遍历到该元素 ...

  5. AI书单

    1.<TensorFlow实战>   黄文坚 2.<Machine Learning> [美]Tom Mitchell 3.<机器学习> 周志华  

  6. Vue:如何在地图上添加自定义覆盖物(点)

    目录 如何在地图上添加自定义覆盖物(点) 首发日期:2019-1-25 如何在地图上添加自定义覆盖物(点) 此文重点是在地图上标点,所以就省去引入百度地图的步骤了. 先给一下最终的效果. 这个效果主要 ...

  7. 后端开发者的Vue学习之路(二)

    目录 上篇内容回顾: 数据绑定 表单输入框绑定 单行文本输入框 多行文本输入框 复选框checkbox 单选框radio 选择框select 数据绑定的修饰符 .lazy .number .trim ...

  8. SQL Challenges

    平台: http://www.zixem.altervista.org/SQLi/ Level 1 (Super Easy) http://www.zixem.altervista.org/SQLi/ ...

  9. 简易仿ios菊花加载loading图

    原文链接:https://mp.weixin.qq.com/s/wBbQgOfr59wntNK9ZJ5iRw 项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loadi ...

  10. Maven的基础了解与使用

    目录 Maven的介绍: 什么是Maven: 为什么要学习maven? 安装与配置: 下载: 配置环境变量 测试安装结果: Maven概念: 坐标 仓库 入门示例 创建maven工程: 添加依赖 Ma ...