文章目录
- 1.前言需要自己手动创建数据库
- 2.提前准备:建表语句
- 3.具体需求与答案,自己训练最好把答案删除自行训练
1.前言需要自己手动创建数据库
2.提前准备:建表语句
use day0202;
create table dept(
deptno int primary key auto_increment,
dname varchar(14) ,
loc varchar(13)
) ;
create table emp(
empno int primary key auto_increment,
ename varchar(10),
job varchar(9),
mgr int,
hiredate date,
sal int,
comm int,
deptno int not null,
foreign key (deptno) references dept(deptno)
);
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');
insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20);
insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30);
insert into emp values(7876,'郭靖','职员',7788,'1987-06-13',1100,null,20);
insert into emp values(7900,'令狐冲','职员',7698,'1981-12-03',950,null,30);
insert into emp values(7902,'张无忌','分析师',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'杨过','职员',7782,'1983-01-23',1300,null,10);
3.具体需求与答案,自己训练最好把答案删除自行训练
use day0202;
select deptno from emp group by deptno having count(deptno)>1;
select dname from dept emp where deptno in (select deptno from emp group by deptno having count(deptno)>1);
select sal from emp where ename="刘一";
select * from emp where sal>(select sal from emp where ename="刘一");
select empno,mgr from emp ;
select emp.ename as 上司 , e.ename as 员工 from emp, (select empno,mgr,ename from emp ) as e where emp.empno =e.mgr;
select e1.ename,e2.ename from emp as e1,emp as e2
where e1.mgr=e2.empno;
select e1.ename,e2.ename from emp as e1 inner join emp as e2 on e1.empno=e2.mgr;
select e2.* from emp as e1 inner join emp as e2 on e1.empno=e2.mgr where e1.hiredate<e2.hiredate;
select * from dept as d left join emp as e on d.deptno=e.deptno
select e.ename ,d.dname from emp as e inner join dept as d on d.deptno=e.deptno where job="职员";
select job from emp group by job having min(sal)>1500;
select deptno from dept where dname ="销售部";
select ename as 姓名 ,empno as 编号 from emp where deptno in (select deptno from dept where dname ="销售部");
select avg(sal) from emp ;
select * from emp where sal>(select avg(sal) from emp);
select job from emp where ename="周八";
select * from emp where job in (select job from emp where ename="周八");
select ename , sal from emp where deptno=30;
select max(sal) from emp where deptno =30;
select ename ,sal from emp where sal>(select max(sal) from emp where deptno =30);
select count(deptno) ,avg(sal) from emp group by deptno having avg(sal);
select e.ename,d.dname,e.sal from emp as e inner join dept as d on e.deptno=d.deptno ;
select deptno, count(deptno) from emp group by deptno having count(deptno);
select d.*,e.c from dept as d left join (select deptno as dd, count(deptno) as c from emp group by deptno having count(deptno))as e on d.deptno=e.dd;
select job,min(sal) from emp group by job having min(sal);
select deptno ,min(sal) from emp where job = "经理" group by deptno;
select* from dept inner join (select deptno ,min(sal) from emp where job = "经理" group by deptno)as e on e.deptno =dept.deptno;
select * ,sal*12+IFNULL(comm,0)*12 as 年薪 from emp ;
select empno , ename ,sal from emp where sal >=3000;
select sal from emp where ename ="陈二";
select * from emp where sal>(select sal from emp where ename ="陈二");
select * from emp where deptno=20 and sal>2000;
select DISTINCT job from emp;
select * from emp where comm is not null;
select * from emp where sal between 800 and 2500;
select * from emp where sal>=800 and sal<2500;
select * from emp where empno in (7521,7900,7782);
select * from emp where empno =7521 or empno=7900 or empno=7782;
select * from emp where ename like "%张%" and sal>1000;
select * from emp where ename like "__忌";
select * from emp ORDER BY sal asc ,hiredate desc;
select * from emp order by convert(ename USING gbk) asc ,sal desc;
select min(hiredate) from emp;
select ename ,hiredate ,sal from emp where hiredate in(select min(hiredate) from emp);
select ename ,sal ,comm+100 from emp where comm if null ;
select ename,sal,ifnull(comm,100)
from emp;
select max(sal) from emp;
select job ,ename from emp where sal in(select max(sal) from emp);
select deptno, min(sal), max(sal) from emp group by deptno HAVING deptno<> 10 ;
select max(sal) from emp where deptno=10;
select empno from emp where sal=(select max(sal) from emp where deptno=10);
delete from emp where empno=(select empno from emp where sal=(select max(sal) from emp where deptno=10));
select empno from emp
where deptno=10 and sal>=all(select sal from emp where deptno=10);
delete from emp
where empno = (select empno from (select empno from emp
where deptno=10
and sal>=all(select sal from emp where deptno=10)) as temp);
select max(sal)*(1-0.3) from emp ;
select empno from emp
where sal >= all(select sal from emp);
update emp
set sal=sal*(1-0.3)
where empno in (select temp.empno from (select empno from emp
where sal >= all(select sal from emp)) temp);
select * from emp;
select ename ,sal,
case when sal>3000 then "3级"
when sal>2000 then "2级"
else "1级"
end
from emp;
select ename,
case when sal>3000 then '3级'
when sal>2000 then '2级'
else '1级'
end
from emp;