Orale基本查询、高级查询个别例子

emp表格

DEPT表格

----------------------------------------------------
--DISTINCT  用于去除结果集
--中指定字段的重复值
--DISTINCT  只能在select关键字之后
--DISTINCT 可以对多列去重,去重原则
--是这些列的组合没有重复值
--查看公司有多少职位
SELECT   DISTINCT  JOB,NAME FROM EMP;
--ORDER BY  字句  
--排序结果集,可以按照指定的字段进行
--升序或降序
--ASC:升序,可以不写。默认就是升序
--DESC :降序
--需要注意:ORDER BY 只能定义在select
--语句的最后一个字句上
--查看公司员工的工资排名
SELECT NAME,    SALARY FROM EMP ORDER BY SALARY DESC
--ORDER BY 可以对多列进行排序
--排序规则,先按照第一个的排序
--方式进行排序结果集,当第一个字段
--具有重读值是再按照第二个的值,
--的排序方式进行排序结果集,以此类推
--若排序的字段中含有null值
--NULL 值被视为最大值
SELECT  NAME,COMM  FROM EMP   ORDER BY COMM  DESC;
--聚合函数,又称为多行函数
--聚合函数使用来统计结果集
--"MAX   "MIN"
--统计最大值,最小值
--查看公司的最高与最低的工资
SELECT MAX(SALARY) "最高工资",MIN(SALARY) "最低的工资"FROM  EMP;
--统计平均值与总和
--查看公司平均工资以及工资总和
SELECT AVG(SALARY)  "平均工资" ,SUM(SALARY)"工资总和" FROM EMP;
---------------------------------------------------
--查看部门有多少员工?
SELECT COUNT(1) "员工个数",DEPTNO"部门"FROM EMP GROUP BY DEPTNO;
----------------------------------------------------
--查看每个部门的平均工资
SELECT AVG(SALARY) "平均工资" ,DEPTNO "部门号"FROM EMP GROUP BY DEPTNO;
-------------------------------------------------
--查看每个部门的平均工资,前提是平均工资超过2000
SELECT DEPTNO "部门号" ,AVG(SALARY)"平均工资"FROM EMP GROUP BY DEPTNO 
HAVING AVG(SALARY)>2000;
----------------------------------------------------
--WHERE 中不允许使用聚合函数作为过滤条件
--原因在于过滤时机不同
--WHERE 的过滤时机是在第一个从表中
--检索数据时添加过滤条件,用来确定
--哪些数据可以别查询出来,已确定结果集
--HAVING 子句:having 必须在group  by 子句
--之后,可以使用聚合函数作为过滤条件
--使之可以对分组进行过滤,将满足条件的保留,不满足的去掉
--关联查询
--查询的结果集中的字段来自多张表
--联合多张表查询数据就是关联查询
--在关联查询中需要在过滤条件中添加
--两张表中记录之间的对应关系,这样的条件称为连接天剑
--N张表联合查询至少有N-1个连接条件
--不添加连接条件会产生笛卡尔积,除特殊情况下
--该结果集通常是无意义的
--并且由于数据量大,对系统资源消耗有巨大影响
--查看每个员工的名字以及所在部门的名称
SELECT NAME ,DNAME FROM EMP,DEPT  WHERE EMP.DEPTNO=DEPT.ID;
--在关联查询中的过滤条件应当与连接条件同时成立
--查看‘财务部’部门员工信息?
SELECT *FROM DEPT WHERE DNAME='财务';
SELECT NAME,DNAME ,SALARY FROM EMP,DEPT WHERE EMP.DEPTNO =DEPT.ID
AND DEPT.DNAME='财务部';
------------------------------------------------------------------
--当查询过程中出现字段在两张表中都有的情况,必须指明该字段属于哪张表
SELECT E.NAME,D.DNAME FROM EMP E,DEPT D WHERE   E.DEPTNO=D.ID
-----查看平均工资高于2000的部门所在地
SELECT AVG(SALARY),D.DNAME  ,D.DLOCAL  FROM EMP E,DEPT D   WHERE E.DEPTNO=D.ID  
GROUP BY  D.DNAME,D.DLOCAL   HAVING AVG(SALARY)>2000;


--内连接
--关联查询的另一种写法
--查看销售部的员工信息
SELECT E.NAME,D.DNAME,D.ID FROM EMP E,DEPT D WHERE E.DEPTNO=D.ID
AND D.DNAME='销售部'
----------------------------------------------------------------------------
SELECT E.NAME,D.DNAME ,D.ID FROM EMP E  INNER JOIN  DEPT D  ON E.DEPTNO=D.ID
WHERE D.DNAME='销售部'
----------------------------------------------------------------------------
--外连接
--外连接在进行关联查询时可以将不满足
--连接条件的记录也查询出来
--外连接分为:1、左外连接  2、右外连接 3、全外连接
--左外连接:以join 左侧表作为驱动表,该表中所有的记录全部会列出来,
--那么当哪条记录不满足连接条件时,该记录中来自右侧表中的字段的值为null
--左外连接
SELECT E.NAME ,D.DNAME FROM EMP E   LEFT OUTER JOIN DEPT D ON E.DEPTNO=D.ID;
--自连接
--自连接指的是自己表中的记录对应自己表中
--多条记录,建立的关联查询就是自连接
--自连接设计用于解决数据相同,但是存在上下级关系的树状结构使用
--查看每个员工以及其上司的名字?

SELECT E.NAME,M.NAME FROM EMP E,EMP M   WHERE E.ID=M.ID
--查看每个领导手下有多少人?
SELECT COUNT(1) FROM EMP E,EMP M WHERE E.MGR=M.ID  GROUP BY  M.NAME
--查看lisi的上司在哪个城市工作?
SELECT D.DLOCAL   FROM EMP E,EMP M  ,DEPT D WHERE E.ID=M.ID
AND M.DEPTNO=D.ID
 AND E.NAME='lisi'
--自然连接
--a NATURAL join  b
 

猜你喜欢

转载自blog.csdn.net/abcdefghwelcome/article/details/83151762