use `部門雇員`;
DROP TABLE dept;
CREATE TABLE `dept` (
`deptno` bigint(2) NOT NULL PRIMARY KEY,
`dname` varchar(20) default NULL,
`loc` VARCHAR(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES (40, 'OPERATIONS', 'BOSTON');
DROP TABLE EMP;
CREATE TABLE `EMP` (
`EMPNO` BIGINT(4) NOT NULL PRIMARY KEY,
`ENAME` varchar(20) default NULL,
`JOB` VARCHAR(20) default NULL,
`MGR` BIGINT default NULL,
`HIREDATE` DATE default NULL,
`SAL` DOUBLE(7,2) default NULL,
`COMM` DOUBLE(7,2) default NULL,
`DEPTNO` BIGINT default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `EMP` VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO `EMP` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO `EMP` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO `EMP` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO `EMP` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO `EMP` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO `EMP` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO `EMP` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20);
INSERT INTO `EMP` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO `EMP` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO `EMP` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20);
INSERT INTO `EMP` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO `EMP` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO `EMP` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);
-- 練習題:
--
--
-- 01.查詢每個雇員的編號、姓名、職位。
SELECT EMPNO,ENAME,JOB FROM EMP;
--
-- 02.查詢每個雇員的職位,使用 DISTINCT 消除掉顯示的重復行記錄。
SELECT DISTINCT JOB FROM EMP;
--
-- 03.計算每個雇員的編號、姓名、基本年薪。年薪=(工資+獎金)*12,(使用 IFNULL 函數判斷 NULL)
SELECT EMPNO,ENAME,((SAL+IFNULL(COMM,0))*12) FROM EMP ;
--
--
-- 04.每個雇員每個月公司會補貼飯食 200 元,交通補助 300 元,計算年薪。
SELECT ((500+SAL+IFNULL(COMM,0))*12) FROM EMP ;
--
-- 05.查詢基本工資高於 2000 的全部雇員信息。
SELECT * FROM EMP WHERE SAL>2000;
--
-- 06.查詢出 smith 的信息。
SELECT * FROM EMP WHERE ENAME = "smith";
--
-- 07.查詢出所有不是 CLERK 的詳細信息。
SELECT * FROM emp WHERE JOB <> "CLERK";
-- 08.查詢出所有銷售人員(SALESMAN)的基本信息,並且要求銷售人員的工資高於 1300。
SELECT * from emp WHERE JOB = "SALESMAN" AND sal>1300;
--
-- 09.查詢出工資范圍在 1500~3000 之間的全部雇員信息(包含 1500 和 3000)。
SELECT * FROM EMP WHERE SAL BETWEEN 1500 AND 3000;
--
-- 10.查詢出所有經理或者是銷售人員的信息,並且要求這些人的基本工資高於 1500。
SELECT * FROM emp WHERE (JOB = 'SALESMAN' OR JOB = 'MANAGER') AND SAL > 1500;
--
-- 11.要求查詢出所有在 1981 年雇佣的雇員信息。
SELECT * FROM EMP WHERE HIREDATE LIKE "1981%";
--
-- 12.查詢所有領取獎金的雇員信息(comm 不為空)。
SELECT * FROM EMP WHERE COMM>0;
--
-- 13.查詢所有領取獎金高於 100 的雇員信息。
SELECT * FROM EMP WHERE COMM>100;
--
-- 14.查詢出雇員編號是 7369、7566、9999 的雇員信息。
SELECT * FROM EMP WHERE EMPNO IN(7369,7566,9999);
--
-- 15.查詢出所有雇員姓名是以 A 開頭的全部雇員信息。
select * FROM emp WHERE ENAME LIKE "A%";
--
-- 16.查詢出雇員姓名第二個字母是 M 的全部雇員信息。
select * FROM emp WHERE ENAME LIKE "_M%";
--
-- 17.查詢出雇員姓名任意位置上包含字母 A 的全部雇員信息。
SELECT * FROM emp WHERE ENAME LIKE "%A%";
--
-- 18.查詢出所有雇員的信息,要求按照工資排序。
SELECT * FROM emp ORDER BY SAL;
--
-- 19.要求查詢所有雇員的信息,按照雇佣日期由先后排序。
SELECT * FROM emp ORDER BY HIREDATE;
--
-- 20.查詢全部雇員信息,按照工資由高到低排序,如果工資相同,則按照雇佣日期由先后排序。
SELECT * FROM emp ORDER BY SAL DESC, HIREDATE ASC;
--
-- 21.查詢部門 30 中的所有員工。
SELECT * FROM emp WHERE DEPTNO=30;
--
-- 22.查詢出所有辦事員(CLERK)的姓名,編號和部門編號。
SELECT ENAME,EMPNO,DEPTNO FROM EMP WHERE JOB="CLERK";
--
-- 23.查詢出獎金高於薪金的員工。
SELECT * FROM EMP WHERE COMM>SAL;
--
-- 24.查詢出獎金高於薪金的 60%的員工。
SELECT * FROM EMP WHERE COMM>SAL*0.6;
--
-- 25.查詢出部門 10 中所有經理(MANAGER)和部門 20 中所有辦事員(CLERK)的詳細資料。
SELECT * FROM EMP,dept WHERE
((emp.DEPTNO=10 AND emp.JOB="MANAGER") OR (emp.DEPTNO=20 AND emp.JOB="CLERK"))
AND emp.DEPTNO=dept.DEPTNO;
--
-- 26.查詢出部門 10 中所有經理,部門 20 中所有辦事員,既不是經理又不是辦事員但其薪金大於或等於 2000 的所有員工的信息。
SELECT * FROM emp,dept WHERE
( (emp.JOB = "MANAGER" AND emp.DEPTNO=10)
OR (emp.JOB = "CLERK" AND emp.DEPTNO=20)
OR (emp.SAL>2000 and emp.JOB <>"MANAGER" AND emp.JOB <> "CLERK") )
AND (emp.DEPTNO=dept.DEPTNO);
--
-- 27.查詢出收取獎金的員工的不同工作。
SELECT DISTINCT JOB FROM emp WHERE COMM<>0;
--
-- 28.查詢出不收取獎金或收取的獎金低於 100 的員工。
SELECT *FROM emp WHERE IFNULL(COMM,0)<100;
--
-- 29.查詢出不帶有“R”的員工的姓名。
SELECT ENAME FROM emp WHERE ENAME NOT LIKE "%R%";
--
-- 30.查詢出每個雇員的姓名、職位、領導姓名。
SELECT A.ENAME "雇員的姓名", A.JOB "雇員的職位", B.ENAME "雇員領導姓名"
FROM emp A,emp B
WHERE A.MGR = B.EMPNO;
--
-- 31.查詢出所有員工的編號、姓名及其直接上級的編號、姓名,顯示的結果按領導年工資的降序排列。
SELECT A.EMPNO ,A.ENAME , B.EMPNO ,B.ENAME, (B.SAL+IFNULL(B.COMM,0))*12 "領導年工資"
FROM emp A,emp B
WHERE A.MGR = B.EMPNO
ORDER BY (B.SAL+IFNULL(B.COMM,0))*12 DESC;
--
-- 32.查詢出在銷售部(SALES)工作的員工姓名、基本工資、雇佣日期、部門名稱。(不知道銷售部編號)。
SELECT a.ename,a.empno,a.sal,a.hiredate,b.dname FROM emp a,dept b WHERE a.job='salesman' AND a.deptno=b.deptno;
--
-- 33.查詢出所有員工的姓名、部門名稱和工資。
SELECT emp.ename,dept.dname,emp.sal FROM emp,dept WHERE emp.deptno = dept.deptno;
--
-- 34.查詢出所有員工的年工資,所在部門名稱,按年薪從低到高排序。
SELECT (emp.sal+IFNULL(emp.comm,0))*12 "年薪", dept.dname
FROM emp,dept
WHERE emp.deptno = dept.deptno
ORDER BY "年薪";
SELECT (a.sal+IFNULL(a.COMM,0))*12 AS ys,b.dname FROM emp a,dept b WHERE a.deptno=b.deptno ORDER BY ys ;
--
(☆☆☆)-- 35.查詢出某個員工的上級主管及所在部門名稱,並要求出這些主管中的薪水超過 3000。
SELECT DISTINCT
t2.`ENAME`,t3.`DNAME`
FROM
emp t1,emp t2,dept t3
WHERE
t1.`MGR` = t2.`EMPNO` AND t2.`DEPTNO` = t3.`DEPTNO` AND t2.`SAL` > 3000;
--
-- 36.查詢出公司的最高和最低工資。
SELECT MIN(sal),MAX(sal) FROM emp;
--
-- 37.查詢出每個部門的人數、平均工資,只顯示部門編號。
SELECT DEPTNO,COUNT(DEPTNO),AVG(SAL) FROM emp GROUP BY DEPTNO;
--
-- 38.查詢出每種職位的最高和最低工資。
SELECT job, MAX(sal),MIN(sal) FROM emp GROUP BY job;
--
-- 39.查詢平均工資高於 2000 的職位信息,以及從事此職位的雇員人數、平均工資。
SELECT job,count(job),AVG(sal) FROM emp GROUP BY job HAVING AVG(sal)>2000;
--
-- 40.查詢員工編號大於其領導編號的每個員工的姓名、職位、領導名稱。
SELECT
t1.ename, t1.job, t2.ename, t1.deptno ,t2.deptno
FROM
emp t1,emp t2
WHERE t1.empno>t1.mgr AND t1.mgr = t2.empno;
--
(☆☆☆)-- 41 查詢出至少有一個員工的所有部門編號、名稱,並統計出這些部門的平均工資、最低工資、最高工資。
SELECT
t1.DEPTNO, t2.DNAME, AVG(sal),MIN(sal),MAX(sal)
FROM
emp t1,dept t2
WHERE
t1.DEPTNO = t2.DEPTNO
GROUP BY
t2.DNAME;
--
-- (☆☆☆)42.查詢出部門名稱和這些部門的員工信息(數量、平均工資),同時列出那些沒有員工的部門。
SELECT
dept.DNAME,COUNT(ename),IFNULL(AVG(sal),0)
FROM emp RIGHT JOIN dept
ON
emp.DEPTNO = dept.DEPTNO
GROUP BY
dept.DNAME;
-- 43.查詢工資比 smith 更高的全部員工信息。
SELECT * FROM emp,dept
WHERE
emp.DEPTNO = dept.DEPTNO AND
sal>(SELECT SAL FROM emp WHERE ename = "smith");
--
-- 44.查詢工資和職位和 smith 相同的所有員工信息。
SELECT * FROM emp,dept
WHERE
emp.DEPTNO = dept.DEPTNO AND
job=(SELECT job FROM emp WHERE ename = "smith");
--
-- (☆☆☆) 45.查詢各部門的部門編號,部門名稱,部門地址,員工人數和平均工資。
SELECT
dept.DEPTNO,dept.dname,dept.LOC,COUNT(JOB),IFNULL(AVG(sal),0)
FROM emp RIGHT JOIN dept
ON
emp.DEPTNO = dept.DEPTNO
GROUP BY
dept.dname;
-- 右連接
SELECT
*
FROM emp RIGHT JOIN dept
ON
emp.DEPTNO = dept.DEPTNO
GROUP BY
dept.dname;
-- 左連接
SELECT
*
FROM emp left JOIN dept
ON
emp.DEPTNO = dept.DEPTNO
GROUP BY
dept.dname;