简单查询练习题

#1.显示所有员工姓名的前三个字符

SELECT LEFT(ename,3)
FROM emp

#2.显示正好为5个字符的员工的姓名,工资,部门号

SELECT ename,sal,deptno
FROM emp
WHERE CHAR_LENGTH(ename=5)

-3.写一个查询,用首字母大写,其它字母小写显示雇员的 ename,显示名字的长度, 并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,
并对查询结果按雇员的ename升序排序。(提示:使用length、substr)

``SELECT CONCAT(UPPER(left(ename,1)),LOWER(SUBSTR(ename,2,9))) 员工姓名 ,CHAR_LENGTH(ename) as 姓名长度 from emp
WHERE LEFT(ename,1) IN('J','A','M')
ORDER BY ename ASC;

4.查询员工姓名中包含 大写或小写字母 A的员工姓名。

SELECT ename FROM emp
WHERE ENAME LIKE '%a%' OR ename LIKE '%A%'

5.显示所有员工的姓名,用a替换所有"A"

SELECT REPLACE(ENAME,'A','a') FROM emp

6.查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,员工姓名长度

SELECT ename ,CHAR_LENGTH(ename)FROM emp
WHERE (deptno=10 OR deptno=20) AND hiredate>'81-05-01' AND ename LIKE '%A%';

- 7.查询每个职工的编号,姓名,工资 要求将查询到的数据按照一定的格式合并成一个字符串. 前10位:编号,不足部分用填充,左对齐 中间10位:姓名,不足部分用填充,左对齐 后10位:工资,不足部分用*填充,右对齐

SELECT CONCAT(RPAD(empno,10,'*'),'|',RPAD(ename,10,'*'),'|',LPAD(sal,10,'*')) 个人信息 FROM emp;

8.查询服务器当前时间

SELECT NOW() FROM DUAL

9.#查询部门10,20的员工截止到2000年1月1日,工作了多少个月,入职的月份

SELECT ENAME 员工姓名, CEIL(DATEDIFF('20000101',HIREDATE)/30) 工作月,MONTH(HIREDATE) 入职月份 FROM EMP 
WHERE DEPTNO=10 OR DEPTNO=20;

10.#如果员工试用期6个月,查询职位不是MANAGER的员工姓名,
#入职日期,转正日期,入职日期是第多少月,第多少周**

SELECT ENAME 员工姓名,HIREDATE 入职日期,DATE_ADD(HIREDATE,INTERVAL 6 MONTH) 转正日期,DAYOFMONTH(HIREDATE) 入职月,DAYOFWEEK(HIREDATE) 入职周 FROM EMP
WHERE JOB <> 'MANAGER';

第三章
1.向部门表新增一个部门,部门编号为50,部门名称为HR,工作地点为SY。

INSERT into dept VALUES(50,'HR','SY')
COMMIT;

2.向部门表新增一个部门,部门编号为60,部门名称为MARKET。

INSERT into dept VALUES(60,'MARKET',NULL)

3.向员工表中新增一个员工,员工编号为8888,姓名为BOB,岗位为CLERK,经理为号7788,入职日期为1985-03-03,薪资3000,奖金和部门为空

INSERT INTO emp VALUES( 8888,'BOB','CLERK',7788,'1985-03-03',3000,null,null)

4.使用CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0,创建emp_back表,拷贝下来即可。

CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0
CREATE TABLE emp_back1 as SELECT * FROM EMP 

5.把emp表中入职日期大于1982年1月1日之前的员工信息复制到emp_back表中

insert into emp_back
 (select * from emp where hiredate>'1-1月-1982');

6.修改部门20的员工信息,把82年之后入职的员工入职日期向后调整10天

UPDATE  emp
SET hiredate=DATE_ADD(hiredate,INTERVAL -10 DAY)
WHERE deptno=20 AND hiredate>'1982-12-31'

7.修改奖金为null的员工,奖金设置为0

UPDATE emp
SET comm=0
WHERE comm=NULL

8.修改工作地点在NEW YORK或CHICAGO的员工工资,工资增加500

UPDATE emp
SET sal=sal+500
WHERE deptno in (SELECT deptno FROM dept WHERE loc='NEW YORK' OR loc='CHICAGO')

9.删除经理编号为7566的员工记录

DELETE  FROM emp
WHERE empno=7566

10.删除``工作在NEW YORK的员工记录

DELETE FROM dept WHERE loc='NEW YORK'

11.删除工资大于所在部门平均工资的员工记录

DELETE FROM emp 
where sal>(select avg(e.sal) from dept where deptno=deptno  group by deptno)

第七章课后题
1.查询部门 平均工资在2500元以上的 部门名称 及 平均工资。

SELECT dname,AVG(sal)
FROM emp e
NATURAL JOIN dept 
GROUP BY dname
HAVING AVG(sal )>2500;

2.查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。

SELECT e.job,AVG(e.sal)
FROM emp e
WHERE e.job NOT LIKE 'SA%'
GROUP BY e.job
HAVING AVG(e.sal)>2500
ORDER BY AVG( e.sal) DESC

3.查询部门人数在2人以上 的部门名称、最低工资、最高工资, 并对求得的工资进行四舍五入到整数位。

SELECT d.dname,ROUND(MIN(e.sal)),ROUND(MAX(e.sal))
FROM dept d JOIN emp e ON d.deptno= e.deptno
GROUP BY d.dname
HAVING COUNT(e.ename)>2

4.查询岗位不为SALESMAN,工资和大于等于2500的岗位 及每种岗位的工资和。

SELECT SUM(sal),job
FROM emp
WHERE job !='SALESMAN'
GROUP BY job 
HAVING SUM(sal)>2500

5.显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。

SELECT m.ename,m.empno,MIN(e.sal)
FROM emp e
LEFT JOIN emp m
ON e.mgr=m.empno
GROUP BY e.ename,e.empno
HAVING MIN(e.sal)>3000
ORDER BY MIN(e.sal) DESC

6.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

SELECT empno,ename,sal
FROM emp 
WHERE sal>(SELECT sal FROM emp WHERE empno=7782)
AND job=(SELECT job FROM emp WHERE empno=7369)

7.查询工资最高的员工姓名和工资。

SELECT ename,sal
FROM emp
WHERE sal=(SELECT MAX(sal) FROM emp)

8.查询部门最低工资 高于10号部门 最低工资的部门的编号、名称及部门最低工资。

SELECT e.deptno,d.dname,MIN(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY deptno,dname
HAVING MIN(e.sal)>(SELECT MIN(sal) from emp WHERE deptno=10)

10.显示经理是KING的员工姓名,工资。

SELECT e.ename,e.sal
FROM emp e
WHERE mgr=(SELECT empno FROM emp WHERE ename='KING')

11.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

SELECT ename,sal,hiredate
FROM emp
WHERE hiredate>(SELECT hiredate FROM emp WHERE ename='SMITH')

12.使用子查询的方式查询哪些职员在NEW YORK工作。

SELECT *
FROM emp
WHERE deptno=(SELECT deptno from dept WHERE loc='NEW YORK')

13.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,查询结果中排除SMITH。

SELECT ename,hiredate
FROM emp
WHERE deptno=(SELECT deptno from emp WHERE ename='SMITH' AND ename!='SMITH')

14.写一个查询显示 其工资比全体职员平均工资高的员工 编号、姓名。

SELECT deptno,ename
FROM emp
WHERE sal>(SELECT AVG(sal) from emp)
  1. 显示 部门名称和人数???
SELECT dname,COUNT(dept.deptno)
FROM emp
NATURAL JOIN  dept
GROUP BY dept.deptno
  1. 显示每个部门的最高工资的员工???
select a.*
from emp a,(  select max(sal) maxsal,deptno
from emp
group by deptno) b
where a.deptno=b.deptno and a.sal=maxsal
-------------------------------------------------------------------
SELECT *
from emp
WHERE sal in (SELECT MAX(sal) FROM emp GROUP BY deptno)
  1. 显示出和员工号7369部门相同的员工姓名,工资
SELECT ename,sal
FROM emp
WHERE deptno=(SELECT deptno from emp WHERE empno='7369')
  1. 显示出和 姓名中包含“W”的员工 相同部门的 员工姓名
SELECT ename
FROM emp
WHERE deptno=(SELECT deptno FROM emp WHERE ename LIKE '%W%')

你可能感兴趣的:(简单查询练习题)