Oracle数据库的实例三

1、DISTINCT用于去除结果集中指定字段的重复值,DISTINCT只能在选择关键字之后
--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'


 

猜你喜欢

转载自blog.csdn.net/abcdefghwelcome/article/details/83688318
今日推荐