簡單查詢練習題
#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)
- 顯示出和員工號7369部門相同的員工姓名,工資
SELECT ename,sal
FROM emp
WHERE deptno=(SELECT deptno from emp WHERE empno='7369')
- 顯示出和 姓名中包含“W”的員工 相同部門的 員工姓名
SELECT ename
FROM emp
WHERE deptno=(SELECT deptno FROM emp WHERE ename LIKE '%W%')