#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)
SELECT dname,COUNT(dept.deptno)
FROM emp
NATURAL JOIN dept
GROUP BY dept.deptno
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)
SELECT ename,sal
FROM emp
WHERE deptno=(SELECT deptno from emp WHERE empno='7369')
SELECT ename
FROM emp
WHERE deptno=(SELECT deptno FROM emp WHERE ename LIKE '%W%')