1. 程式人生 > >簡單查詢練習題

簡單查詢練習題

#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%')