2018-04-24上午

--交叉链接

select enanme,sal ,dname from emp e,dept d cross join dept d

--自然链接

select ename,sal,dname from emp e natural join dept

d

--USING子句

select ename,sal,dname from emp e join dept d using (deptno)

--ON子句

--其他的限制条件建议写在where 子句中

--使SQL语句中的结构更加清晰

select ename,sal,dname from emp e join dept d on e.deptno=d.deptno where




select ename,sal,dname,grade from emp e join dept d on e.deptno=d.deptno join salgrade s on e.sal between s.losal and s.hisal; sal>1500;

--左外连接 left 【outer】 join

--在 left 【outer】 join 左边的表 作为主表(基表)

--主表中不满足连接条件的数据也会显示

--查询员工姓名和直接领导姓名,没有领导的员工也要显

select e.ename,l.ename from emp e,emp l where e.mgr=l.empno(+)

--左外连接写法

select e.ename,l.ename from emp e left join emp l on e.mgr=l.empno

--右外连接 RIGHT 【OUTER】 JOIN

--在 RIGHT [OUTER] JOIN 右边的表 作为主表

--主表中不满足连接条件的数据也会显示

--查询员工姓名,部门名称,部门编号 没有员工的部门也要显示

select e.ename,d.dname,d.deptno from emp e, dept d where e.deptno(+)=d.deptno;

--右外连接方式写法

select e.ename,d.dname,d.deptno from emp e right join dept d on e.deptno=d.deptno;

 --全外连接 FULL [OUTER] JOIN


select e.ename,l.ename,e.deptno from emp e full join emp l on e.mgr = l.empno --------------------

--分组函数

--常用的分组函数

--MAX(最大) MIN(最小) SUM() AVG() COUNT()

--MAX()求一组数据的最大值

--MIN () 求一组数据的最小值

--SUM ()求一组数据的和

--AVG ()求一组数据的平均值

--COUNT ( ) 统计数/记录数

--查询 EMP 表中的薪资的最大值和最小值

select max(sal),min(sal) from emp

-- ename 返回一列数据 而max 和min 返回单个数据

--它们之间是多对一的关系没有办法匹配显示

--求所有员工薪资和

select sum(sal) from emp

----求所有员工的平均薪资

select avg (sal) from emp

--查询有多少部门

select distinct deptno from emp

select count(distinct deptno) from emp

--查询10号部门的最高薪资

select max(sal) from emp where deptno=10

---group by 分组

--需要分组的列需要写在 group 后面

-- 多个列之间需要用逗号隔开

--查询每个部门的最高薪资 ,最低薪资

--group要写在where 字句之后

select deptno,max(sal),min(sal) from emp where deptno in (10,20) group by deptno

--查询每个工作岗位的最高薪资 ,最低薪资

select job,max(sal),min(sal) from emp group by job

--查询每个部门的人数

select count (ename),deptno from emp group by deptno

--查询每个职位的人数要求薪资大于1500

select job ,count (ename) from emp where sal>1500 group by job

--查询每个职位的人数,职位,薪资,要求薪资大于1500 --在分组语句中 出现在select 字句中的列 必须写在group by中 --写在分组函数中的列除外 --相反出现在group by中的列,可以 不写在select字句中 select job,sal,count(empno) from emp where sal>1500 group by job,sal --max()min --可用于 数值 , 日期 select max(hiredate),min(hiredate) from emp --字符类型也可用但无意义 select max(ename),min(ename) from emp --sum() --只能 处理数值类型的参数 select sum(hiredate) from emp --avg() --只能 处理数值类型的参数 select avg (hiredate) from emp --查询部门号平均薪资 --要求平均薪资大于1500 --在where 字句中不能使用分组函数 --having 如果使用分组函数作为限制条件 --需要写在 having 中 --建议 将 having 写在group by 之后 select deptno ,avg(sal) from emp group by deptno having avg(sal)>1500 ---不能使用 select ename ,sal from emp having sal between 1500 and 2000 select ename ,sal from emp having ename like '%A%' -------- --count ()返回非空记录 --没有空值 select count(mgr ) from emp --返回记录数(表中数据量)所有的 select count(* ) from emp select * from emp

你可能感兴趣的:(2018-04-24上午)