- 统计各部门的薪水总和。
错误写法:重命名的时候 as 后面不添加引号
select deptno as ‘部门’, sum(sal) as ‘薪水’ from EMP group by deptno;
正确写法:
select deptno as 部门, sum(sal) as 薪水 from EMP group by deptno; - 列名和表明可以不用区分大小写,但是具体的字段名称需要区分大小写,并且如果具体的字段名称是字符串,需要添加单引号
- 注意where语句一定要紧跟再from语句的后面
错误写法:select deptno 部门, min(sal) 最低薪水 from emp group by deptno where job=’MANAGER’ ;
正确写法:
select deptno 部门, min(sal) 经理最低薪水 from emp where job =’MANAGER’ group by deptno; - 日期的计算
显示所有员工的姓名以及工作10年后的日期。
select ename 姓名,hiredate 入职日期, add_months(hiredate,10*12) 工作10年后的日期 from emp; - 自身比较
列出从事同一种工作但属于不同部门的员工的不同组合。
select e1.ename 员工1 ,e2.ename 员工2 from emp e1 ,emp e2 where e1.job= e2.job and e1.deptno<>e2.deptno; - 占位符
显示正好为5个字符的员工的姓名。
select ename 姓名 from emp where ename like ‘_‘; - 避免为空。利用nvl 函数转为0进行计算
显示在一个月为30天的情况下所有员工的日薪水,取整。
select trunc((sal+nvl(comm,0))/30,0) 日薪 from emp;
trunc(num,0)用于取整 - MONTHS_BETWEEN (date1, date2)
用于计算date1和date2之间有几个月
9. **Oracle与MySQL的区别
Oracle:varchar2()
MySQL:varchar()**
表的自身连接
列出所有员工的姓名及其直接上级的姓名。
那么这里我们需要定义两张表,实际上是一张表有两个名字,一张表表示员工,一张表示上级
select a.ename 员工,(select ename from emp b where b.empno=a.mgr ) 上级 from emp a;子查询
列出与“SCOTT”从事相同工作的所有员工。
错误写法:select ename from emp a where a.job=(select job from emp b where ename=’SCOTT’) and b.ename<>’SCOTT’;
正确写法:select ename from emp where job = (select job from emp where ename=’SCOTT’) and ename<>’SCOTT’;- 表的自身连接
39.列出从事同一种工作但属于不同部门的员工的一种组合。
错误写法:
select a.ename,a.deptno from emp a where a.job=(select job from emp b ) and a.deptno<>b.deptno;
正确写法:
select a.ename,a.deptno from emp a,emp b where a.job=b.job and a.deptno<>b.deptno;