OracleSql语句学习(四)
SELECT e.ename,m.ename,d.loc
FROM emp_weiyiji e JOIN emp_weiyiji m ON e.mgr=m.empno
JOIN dept_weiyiji d ON e.deptno=d.deptno
WHERE e.ename='SMITH'
SELECT e.ename,m.ename,d.loc
FROM emp_weiyiji e,emp_weiyiji m,dept_weiyiji d
WHERE e.mgr=m.empno AND e.deptno=d.deptno AND e.ename='SMITH'
--子查询
--子查询是一条查询语句,它是嵌套在其他SQL语句当中的,作用是为外层的SQL提供数据的。子查询常用在
--查询语句中,当然也可以用作DML,DDL中.
查看与FORD同部门的员工?
SELECT ename,sal,deptno  FROM emp_weiyiji
WHERE deptno=(SELECT deptno FROM emp_weiyiji WHERE ename='FORD')--先执行括号里面的
查看和SMITH同职位的都有谁?
SELECT ename,sal,job FROM emp_weiyiji
WHERE job=(SELECT job FROM emp_weiyiji WHERE ename='SMITH')
查看比公司平均工资高的员工信息?
SELECT ename,sal,job,deptno FROM emp_weiyiji
WHERE sal>(SELECT AVG(sal) FROM emp_weiyiji)
--在DDL中使用子查询,可以基于一个子查询的结果集当做表快速的创建出来。
--创建employee_weiyiji表
--字段:empno,ename,mgr,sal,job,deptno,dname,dloc
CREATE TABLE employee_weiyiji
AS
SELECT e.empno,e.ename,e.mgr,e.sal,e.job,d.deptno,d.dname,d.loc
FROM emp_weiyiji e LEFT OUTER JOIN dept_weiyiji d ON e.deptno=d.deptno
--子查询根据查询结果不同分为:
--单行单列,单行多列:常用在WHERE作为过滤条件
--多行多列:常当做表看待
--当判断的是一个多行单列子查询结果时,通常要配合IN,ANY,ALL使用。
查看与职位是SALESMAN同部门的其他职位员工?
SELECT ename,job,deptno FROM emp_weiyiji
WHERE deptno IN(SELECT deptno FROM emp_weiyiji
WHERE job='SALESMAN') AND job<>'SALESMAN'
查看比SALESMAN和CLERK职位工资都高的员工?
SELECT ename,sal deptno FROM emp_weiyiji
WHERE sal>ALL(SELECT sal FROM emp_weiyiji 
WHERE job IN('SALESMAN','CLERK'))
--EXISTS关键字
--EXISTS在WHERE中使用,后面跟一个子查询,子查询的结果不关注具体指,只关注是否能查询出数据,只要
--可以则条件成立。
 查看有员工的部门信息?--查看没有员工部门信息在EXISTS前面加NOT就行了
SELECT deptno,dname FROM dept_weiyiji d
WHERE EXISTS(SELECT * FROM emp_weiyiji e
            WHERE d.deptno = e.deptno
)
查询部门的最低薪水,前提是要高于30号部门的最低薪水?
SELECT MIN(sal),deptno FROM emp_weiyiji
GROUP BY deptno
HAVING MIN(sal)>(SELECT MIN(sal) FROM emp_weiyiji
WHERE deptno=30)
--FROM子句中使用子查询,该子查询是当做一张表使用的。
查看比自己所在部门平均工资高的员工?
SELECT e.ename,e.sal,e.deptno 
FROM emp_weiyiji e,(SELECT AVG(sal) avg_sal,deptno
                    FROM emp_weiyiji GROUP BY deptno) t
WHERE e.deptno=t.deptno AND e.sal>t.avg_sal
SELECT e.ename,e.sal,(SELECT d.dname FROM dept_weiyiji d
                        WHERE d.deptno = e.deptno) dname
FROM emp_weiyiji e
--分页查询
--分页查询其实就是将数据分段查询出来,当数据量大的时候经常会使用分页查询技术,这样可以减少
--资源开销,提高系统响应速度。
--标准SQL中没有定义分页语法,所以不同的数据库的分页语法不一样。ORACLE中使用伪列ROWNUM实现
--ROWNUM是一个伪列,并不存在于任何表中,但是所有的表都可以查询该字段,而该字段的值就是查询
--出来的结果集中的每条记录的行号,从1开始自动递增。ROWNUM字段的值生成是伴随查询进行的过程中的。
--每当可以从表中查询出一条记录,那么ROWNUM的值就是该条查询出来记录的行号。
SELECT ROWNUM ,ename,sal,deptno FROM emp_weiyiji
WHERE ROWNUM >1
由于ROWNNUM的值是查询过程中动态生成的,并从1开始所以在使用ROWNUM对结果集编号时不要使用ROWNUM
在WHERE中做>1以上数字的判断,否则查不到任何数据
SELECT * FROM(SELECT ROWNUM rn,ename,sal,deptno FROM emp_weiyiji)
WHERE rn BETWEEN 6 AND 10
先排序,然后在标号,最后在取需要的部分
SELECT *FROM(SELECT ROWNUM rn,t.*
             FROM(SELECT ename,sal,deptno FROM emp_weiyiji
                 ORDER BY sal DESC) t
                 WHERE ROWNUM<=10)
WHERE rn>=6
pageSize(每页显示的条目数):5
page(页数):2
start:(page-1)*pageSize+1
end:PageSize*page
--DECODE函数,可以实现简单的分支结构
SELECT  ename, job ,sal,
     DECODE(job,
             'MANAGER',sal * 1.2,
             'ANALYST',sal * 1.1,
             'SALESMAN',sal* 1.05             
          )bonus
FROM emp_weiyiji
--和DECODE函数功能相似的有CASE语句,实现类似于if
SELECT ename,job,sal,
       CASE job WHEN 'MANAGER'THEN sal*1.2
                WHEN 'ANALYST'THEN sal*1.1
                WHEN 'SALESMAN'THEN sal*1.05
                ELSE sal END
                bouns  FROM emp_weiyiji;
SELECT COUNT(1),DECODE(job,
                'MANAGER','VIP',
                'ANALYST','VIP',
                'OTHER')
FROM emp_weiyiji
GROUP BY DECODE(job,
         'MANAGER','VIP',
         'ANALYST','VIP',
         'OTHER')
SELECT deptno,dname,loc FROM dept_weiyiji
ORDER BY DECODE(
               dname,'OPERATIONS',1,
               'ACCOUNTING',2,
               'SALES',3);
--排序函数
--排序函数允许对结果集按照指定字段分组,然后在组内按照指定字段排序,之后为每组的记录编行号
--ROW_NUMBER():生成组内连续且唯一的数字
查看每个部门的工资排名
SELECT ename ,sal,deptno,
    ROW_NUMBER() OVER(
    PARTITION BY deptno
    ORDER BY sal DESC
    ) rank 
    FROM emp_weiyiji
--RANK函数:组内不连续也不唯一的数字(排名4,4过了直接就是6)
查看每个部门的工资排名,若工资一致,排名一致
SELECT ename,sal,deptno,
   RANK() OVER(
   PARTITION BY deptno
   ORDER BY sal DESC
   ) rank 
   FROM emp_weiyiji;
--DENSE_RANK:生成组内连续但不唯一的数字(排名4,4过了直接就是5)
SELECT ename,sal,deptno,
     DENSE_RANK() OVER(
     PARTITION BY deptno
     ORDER BY sal DESC
     ) rank
  FROM emp_weiyiji
CREATE TABLE sales_weiyiji(
                     year_id NUMBER NOT NULL,
                     month_id NUMBER NOT NULL,
                     day_id NUMBER NOT NULL,
                     sales_value NUMBER(10,2) NOT NULL
                     );
  INSERT INTO sales_weiyiji
  SELECT TRUNC(DBMS_RANDOM.value(2010,2012)) AS year_id,
         TRUNC(DBMS_RANDOM.value(1,13)) AS month_id,
         TRUNC(DBMS_RANDOM.value(1,32)) AS day_id,
         ROUND(DBMS_RANDOM.value(1,100),2) AS sales_value
      FROM dual
      CONNECT BY level<=1000;    
--查看并集,既是'MANAGER',工资又高于2500
SELECT ename,job,sal FROM emp_weiyiji
WHERE job='MANAGER'
UNION
SELECT ename,job,sal FROM emp_weiyiji
WHERE sal>2500;
--全并集
SELECT ename,job,sal FROM emp_weiyiji
WHERE job='MANAGER'
UNION ALL
SELECT ename,job,sal FROM emp_weiyiji
WHERE sal>2500;
--交集,保留即满足'MANAGER',工资又高于2500
SELECT ename,job,sal FROM emp_weiyiji
WHERE job='MANAGER'
INTERSECT 
SELECT ename,job,sal FROM emp_weiyiji
WHERE sal>2500
--差集
SELECT ename,job,sal FROM emp_weiyiji
WHERE job='MANAGER'
MINUS
SELECT ename,job,sal FROM emp_weiyiji
WHERE sal>=2500
--ROLLUP(高级分组函数)
--1.ROLLUP
--  GROUP BY ROLLUP(a,b,c)
--  等价于
--  GROUP BY a,b,c
--  UNION ALL
--  GROUP BY a,b
--  UNION ALL
--  全表
SELECT 
  year_id,month_id,day_id,SUM(sales_value)
FROM sales_weiyiji
GROUP BY
 ROLLUP(year_id,month_id,day_id)
ORDER BY
 year_id,month_id,day_id
--CUBE函数
--CUBE的分组次数是2的参数个数次方,没一种组合都会进行一次分组
SELECT 
     year_id,month_id,day_id,SUM(sales_value)
FROM sales_weiyiji
GROUP BY 
 CUBE(year_id,month_id,day_id)
 ORDER BY 
 year_id,month_id,day_id
--GROUPING SETS函数
--该函数允许自定义分组模式,然后将这些分组结果并在一个结果集显示。其中每个参数为一种分组模式。
查看每天与每月的营业额?
SELECT year_id,month_id,day_id,SUM(sales_value)
FROM sales_weiyiji
GROUP BY GROUPING SETS(
    (year_id,month_id,day_id),(year_id,month_id))
OracleSql语句学习(四)的更多相关文章
- OracleSql语句学习(三)
		--在SELECT子句中出现的函数或表达式会在结果集中作为字段名,这样的可读性差,因此可以为--这样的字段添加别名(别名中不能出现空隔,除非是用双引号括起来的)--别名中如果希望包含空隔或者区分大小写 ... 
- OracleSql语句学习(五)
		--数据库对象数据库对象包含:表,视图,索引,序列视图VIEN视图在SQL语句中体现的角色与表一样,但是视图并非真实存在的表,它只是对应一条查询语句的结果集 使用视图通常是为了重用子查询,简化SQL语 ... 
- OracleSql语句学习(二)
		--DQL语句--查询语句用来检查数据使用--SELECT子句用来指定要查询的字段,若写“*”则表示查询所有字段.FROM子句用来指定数据来源的表.--SELECT * FROM emp_weiyij ... 
- OracleSql语句学习(一)
		--SQL语句本身是不区分大小写的,每个关键字用空格隔开,为了增加可读性,退出所有关键字--全部大写,非关键字都小写SELECT SYSDATE FROM dual--创建表CREATE TABLE ... 
- Python基础学习四
		Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ... 
- Python第一周基本语句学习整理
		目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ... 
- Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发
		一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ... 
- 【java开发】分支语句、循环语句学习
		一.Java分支语句类型 if-else 语句 switch 关于if-esle语句可以拆分为三种 if语句 if(条件){语句块;} if-else语句if(条件语句){语句块;} if-else ... 
- Oracle----SQL语句积累 (Oracle 导入 dmp文件)
		Oracle----SQL语句积累 (Oracle 导入 dmp文件) Oracle SQL PL 导入dum文件 1.数据库DBA权限: 注意:这个是在cmd命令行中直接输入,不需要进入Oracl ... 
随机推荐
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程
			[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ... 
- 从零开始学安全(三十五)●mysql  盲注手工自定义python脚本
			import requests import string #mysql 手动注入 通用脚本 适用盲注 可以跟具自己的需求更改 def home(): url="url" list ... 
- [Winfrom] 使用一个启动快捷方式,打开2个不同的窗体并且共用一个缓存空间
			之所以有这个功能,是不想再给后台和前台写一套通讯机制的情况下偷懒的办法! 之前发现在主函数里面写方法,第二次启动程序打开新窗体或是显示隐藏窗体!最后却发现在主函数里面打开的新窗体和原启动的程序并不是共 ... 
- C# 在Word中添加表格的方法
			表格是组织整理数据的一种重要手段,应在生活中的方方面面.在Word文档中将繁杂的文字表述内容表格化,能快速.直接地获取关键内容信息.那么,通过C#,我们也可以在Word文档中添加表格,这里将介绍两种不 ... 
- Java开发笔记(二)Java工程的帝国区划
			上一篇文章介绍了如何运行了第一个Java程序“Hello World”.然而这个开发环境看起来那么陌生,一个个名字符号完全不知道它们是干啥的呀,对于初学者来说,好比天书一般,多看几眼感觉都要走火入魔了 ... 
- JavaScript字符串转数字的5种方法及其陷阱
			摘要 :JavaScript 是一个神奇的语言,字符串转数字有 5 种方法,各有各的坑法! String 转换为 Number 有很多种方式,我可以想到的有 5 种! parseInt(num); / ... 
- 微信小程序picker的坑
			js文件: Companyarr: [{ id: '公司id1', companyname: "公司1的名字" }, { id: '公司id2', companyname: &qu ... 
- es6  Moduel 默认名与非默认名
			export default default 本质是将后面变量(值)赋给 default,然后以default名称输出. import 在获取default变量时,写在大括号的外面 ,可自定义名称. ... 
- wepy框架自定义组件编译报错not Found File XXX.wxss
			今天在自己写wepy框架组件的时候编译后报错not Found File XXX.wxss 我去,当时我很难受啊,调用组件时结构和逻辑都正常,一写样式就原地爆炸 解决之路:1.先打开编译后的dist文 ... 
- Dynamics 365测试和启用邮箱时候一直显示“安排电子邮件配置测试”怎么办?
			摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复284或者20181125可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ... 
