--DDL:data definition language,数据定义语言,创建修改删除表
--DQL:data query language,数据查询语言,查询数据
--DML:data manipulation language,数据操作语言,增删改数据
--DTL:data transaction language,数据事物语言,用来处理事务,例如开启、提交事务
--DCL:data control languange,数据控制语言,用来操作用户和权限,例如创建用户,授权等
--SQL 是 Structured Query Language(结构化查询语言)
/*合并集合(sql语句查询的结果)的注意点:
结果的列名是以第一个查询的列名为准;
每个查询必须包含相同的列、表达式或聚集函数(即字段顺序、数量一致);
集合对应列的类型要匹配(数字,’字符串’)。*/
--合并结果集,不删除重复元素(效率比union高)
select * from emp where sal > 1000
union all
select * from emp where sal < 3000;
--合并结果集,删除重复元素
select * from emp where sal > 1000
union
select * from emp where sal < 3000;
--交集:结果集中的重复元素
select * from emp where sal > 1000
intersect
select * from emp where sal < 3000;
--差集:我有你没有
select * from emp where sal > 1000
minus
select * from emp where sal < 3000
select ename,deptno from emp
union all
select dname,deptno from dept
select * from emp where sal >
(select avg(sal) from emp where deptno = 10);
select * from emp where sal in
(select sal from emp where deptno = 20);
--26.查询各种工作的最低工资:
select job 职位,min(sal) 最低工资 from emp group by job;
--27.查询各个部门中的不同工种的最高工资:
select deptno 部门,job 职位,max(sal) 最高工资 from emp group by deptno,job;
--28.查询每个领导‘mgr’手下有多少人:
select mgr 领导,count(*) 员工人数 from emp group by mgr;
--29.查询与姓名中包含字母‘U’的员工在相同部门的员工信息:
select * from emp where deptno in (select deptno from emp where ename like '%U%');
--30.统计各个职位的员工人数与平均工资:
select job 职位,count(*) 员工人数,avg(sal) 平均工资 from emp group by job;
--31.查询每个部门的最早入职日期和最晚入职日期:
select deptno 部门,min(hiredate) 最早入职,max(hiredate) 最晚入职 from emp group by deptno;
--32.查询名字中包含字母‘E’且姓氏不以‘A’开头的员工信息:
select * from emp where ename like '%E%' and ename not like 'A%';
--33.显示工资比‘ALLEN’高的所有员工的姓名和工作:
select ename,job from emp where sal > (select sal from emp where ename = 'ALLEN');
--34.显示与‘scott’从事相同工作的员工信息:
select * from emp where job = (select job from emp where ename = 'scott');
--35.查询所有工资高于平均工资‘包括所有员工’的销售人员:
select * from emp where job = 'SALESMAN' and sal > ( select avg(sal) from emp );
--36.显示与30号部门‘MARTIN’员工工资相同的员工的姓名和工资:
select ename,sal from emp where sal = (select sal from emp where ename = 'MARTIN');
--37.列出薪金工资比‘SMITH’多的所有雇员信息:
select * from emp where sal > (select sal from emp where ename = 'SMITH');
--38.列出薪金高于在部门30工作的所有雇员的姓名和薪金:
select ename,sal from emp where sal > all (select sal from emp where deptno = 30);
--39.雇员中谁的工资最高:
select ename from emp where sal = (select max(sal) from emp);
--40.统计每个部门中各职位的人数与平均工资:
select deptno,job,count(*),avg(sal) from emp group by deptno,job;
--41.查询每个员工的员工编号,工资,奖金以及工资与奖金的和(先使用非空函数,再尝试不使用非空函数):
select empno,sal,comm,(sal+nvl(comm,0)) from emp ;
select empno,sal,comm,(sal+comm) from emp where comm is not null
union
select empno,sal,comm,sal "sal+comm" from emp where comm is null ;
--42.查询工资、奖金与10号部门某员工工资、奖金都相同的员工的信息:
select * from emp where (sal,nvl(comm,0)) in (select sal,nvl(comm,0) from emp where deptno = 10);
--1.取得每个部门最高薪水的人员姓名(薪资加奖金):
select ename from emp where (deptno,sal+nvl(comm,0))in (select deptno,max(sal+nvl(comm,0)) from emp group by deptno);
--2.查询上司是‘king’的员工姓名和工资:
select ename,sal from emp where mgr = (select empno from emp where ename = 'KING');
--3.查询工资相同的员工的工资和姓名(注:使用子查询,from后面也可使用子查询):
select ename,sal from emp where sal in (select sal from (select sal,count(*) from emp group by sal having count(*)>1));