多测师肖老师__单表建表和练习(1.8)

create table emp(
empno int primary key, -- 员工编号
ename varchar(10), -- 员工姓名
job varchar(9), -- 员工工作
mgr int, -- 员工直属领导编号
hiredate date, -- 入职时间
sal double, -- 工资
comm double, -- 奖金
deptno int, -- 所在部门
foreign key (deptno) references dept(deptno)) default charset=utf8; -- 关联dept表

-- alter table emp add foreign key (deptno) references dept(deptno);
insert into emp values(7369,'smith','职员',7566,"1980-12-17",800,null,20);
insert into emp values(7499,'allen','销售员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'ward','销售员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'jones','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'martin','销售员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'blake','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'clark','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'scott','职员',7566,'1987-07-03',3000,2000,20);
insert into emp values(7839,'king','董事长',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'turners','销售员',7698,'1981-09-08',1500,50,30);
insert into emp values(7876,'adams','职员',7566,'1987-07-13',1100,null,20);
insert into emp values(7900,'james','职员',7698,'1981-12-03',1250,null,30);
insert into emp values(7902,'ford','销售员',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'miller','职员',7782,'1981-01-23',1300,null,10);
select * from emp ;

 

单表题目:

#1、查找部门30中员工的详细信息。

思路:

条件:deptno=30 

结果:工的详细信息   *

方法一:

SELECT * FROM emp WHERE deptno=30 ;

#2、找出从事职员工作的员工的编号、姓名、部门号。(clerk  职员,办事员)

条件: job='职员'

结果: empno ,ename,deptno

方法:SELECT empno,ename,deptno FROM emp WHERE job="职员";

#3、检索出奖金多于基本工资的员工信息。

条件:sal基本工资 < comm 奖金

结果:员工信息   *

方法:Select * from emp where comm >sal

#4、检索出奖金多于基本工资60%的员工信息。

条件:sal基本工资*0.6   < comm 奖金

结果:员工信息   *

方法:Select * from emp where comm >sal *0.6 

#5、找出10部门的经理、20部门的职员 的员工信息。(manager经理;管理)

条件:(deptno=10 and job="经理") or(deptno=20 and job="职员")

结果:员工信息 *


SELECT * FROM emp WHERE (job="经理" and deptno=10) or (job="职员" and deptno=20);

#6、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。(sal 工资)

条件:(deptno=10 and job="经理")or(deptno=20 and job="职员")

结果:

方法一:select * from emp where (deptno=10 AND job='经理') OR (deptno=20 AND job='职员') OR (job not in ('经理','职员') and sal>2000) ;

方法二:

Select * from emp where (deptno=10 and job='经理') or (deptno=20 and job='职员') or (job!='经理' and job!='职员' and sal>2000)

方法三:

SELECT * from emp where ((deptno=10 and job="经理") or (deptno=20 and job="职员")) or (job<>"职员" and job<>"经理" and sal>2000);

#7、找出获得奖金的员工的工作。(comm奖金)

思路:

条件:comm  is  not null

结果:job

方法一:select DISTINCT(job) from emp where comm is  not null ;

方法二:select DISTINCT(job) from emp where comm<>0;

#8、找出奖金少于100或者没有获得奖金的员工的信息。

条件:comm<100  or is null

结果:员工的信息   *

方法1:SELECT * FROM emp WHERE comm<100 or comm is null

#9、找出姓名以abs开始的员工信息.

条件:"a%"    or "b%"   or  "s%"

 结果:员工信息  *

方法一: select * from emp where ename like "a%" or ename like "b%" or ename like "s%";

方法二:SELECT * FROM emp WHERE ename REGEXP "^a|^b|^s"  ;

#10、找到名字长度为6个字符的员工信息。

结果: 下滑线6个字符

结果:员工信息  *

方法1:select * from emp where ename like '______';

方法2:SELECT * FROM emp WHERE LENGTH(ename)=6;

#11、名字中不包含r字符的员工信息。

条件:not  like 

结果:员工信息 *

方法:select * from emp where ename  not like "%r%" ;

#12、查找员工的详细信息并按姓名排序。

条件: ename    desc

结果:  *

方法一:select * from emp ORDER BY ename ;

方法二:select * from emp ORder by  ename desc

#13、返回员工的信息并按工作降序工资升序排列。(升序的规则)  

条件:job    order   by      desc   ,sal   asc

结果:员工的信息 *

方法:select * from emp ORDER BY job desc,sal asc ;

#14、计算员工的日薪(30)。 备注:加上奖金  或不加上奖金

条件:sal    comm     sal/30   (sal+comm)/30

结果:员工的日薪

方法1:SELECT ename, sal/30 '日薪', (sal+comm)/30 '加奖日薪' from emp;

方法2:SELECT ename,ROUND((sal/30),2) AS '日薪' FROM emp ;

方法3:select ename,(sal/30) as"日薪" from emp;

#15、找出姓名中包含a的员工信息,并按降序sal排序取出前三个。

 条件:like “%a%”     order  by  sal  desc   limit  0,3

结果:员工信息  *

 方法:SELECT * from emp where ename  LIKE '%a%' ORDER BY sal DESC LIMIT 0,3;

员工的详细信息并按姓名排序。

条件:

原文地址:https://www.cnblogs.com/xiaolehua/p/15704545.html