創(chuàng)建表
//員工表
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT
) ;
//部門表
CREATE TABLE dept(
deptno INT,
dname VARCHAR(14),
loc VARCHAR(13)
);
多表操作
-- 單行子查詢(> < >= <= = <>)
1.查詢出10號部門的平均工資
SELECT AVG(sal) FROM emp WHERE deptno = 10;
2.查詢出高于10號部門平均工資的員工信息
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp WHERE deptno = 10);
-- 多行子查詢(in not in any all) >any >all
-- 查詢出比10號部門任何員工薪資高的員工信息
1. 查詢出10號部門的所有工資信息
SELECT sal FROM emp WHERE deptno=10;
2.得出結(jié)果
SELECT * FROM emp WHERE sal >ALL(SELECT sal FROM emp WHERE deptno=10);
-- 多列子查詢(實際使用較少) in
-- 和10號部門同名同工作的員工信息
1.查出10號部門員工名字和工作信息
SELECT ename,job FROM emp WHERE deptno=10;
2. 得出結(jié)果:
SELECT * FROM emp WHERE (ename,job) IN (SELECT ename,job FROM emp WHERE deptno=10) AND deptno!=10;
-- Select接子查詢
-- 獲取員工的名字和部門的名字
1.查出員工的名字和部門編號信息
SELECT ename,deptno FROM emp;
2.得出結(jié)果
SELECT ename,(SELECT dname FROM dept WHERE dept.deptno=emp.deptno) FROM emp;
-- from后面接子查詢
-- 查詢emp表中經(jīng)理信息
1.查詢出所有經(jīng)理的ID
SELECT DISTINCT mgr FROM emp;
2. 查出經(jīng)理的信息,只要id在第一步的查詢結(jié)果中就可以了
SELECT * FROM emp,(SELECT DISTINCT mgr FROM emp) mgrs WHERE emp.empno = mgrs.mgr;
-- where 接子查詢
-- 薪資高于10號部門平均工資的所有員工信息
1.查詢出10號部門的平均工資
SELECT AVG(sal) FROM emp WHERE deptno=10;
2.得出結(jié)果:
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp WHERE deptno=10);
-- having后面接子查詢
-- 有哪些部門的平均工資高于30號部門的平均工資
1.30號部門的平均工資
SELECT AVG(sal) FROM emp WHERE deptno=30;
2. 統(tǒng)計所有部門的平均工資
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno ;
3. 得出最終的結(jié)果
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) > (SELECT AVG(sal) FROM emp WHERE deptno=30);
-- 工資>JONES工資的員工信息
1.查處JONES的工資信息
SELECT sal FROM emp WHERE ename='JONES';
2.得出結(jié)果
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES');
-- 查詢與SCOTT同一個部門的員工
1.查處SCOTT的部門編號
SELECT deptno FROM emp WHERE ename = 'SCOTT';
2.得出結(jié)果
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SCOTT');
-- 工資高于30號部門所有人的員工信息
1.得出30號部門的最大工資
SELECT MAX(sal) FROM emp WHERE deptno = 30;
2.得出結(jié)果
SELECT * FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30);
-- 查詢工作和工資與MARTIN完全相同的員工信息
1.查處MARTIN的工作和工資
SELECT job,sal FROM emp WHERE ename='MARTIN';
2.得出結(jié)果
SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN');
-- 有兩個以上直接下屬的員工信息
1.查出emp表中mgr信息
SELECT mgr FROM emp;
2.分組統(tǒng)計mgr的信息
SELECT mgr,COUNT(*) FROM emp GROUP BY mgr HAVING COUNT(*)>2;
3.得出結(jié)果
SELECT * FROM emp e1 WHERE e1.empno IN (SELECT e2.mgr FROM emp e2 GROUP BY e2.mgr HAVING COUNT(*)>2);
-- 查詢員工編號為7788的員工名稱,員工工資,部門名稱,部門地址
1.將員工表和部門表鏈接起來
SELECT * FROM emp ,dept WHERE emp.deptno = dept.deptno;
2.得出ID為7788的所有信息
SELECT * FROM emp ,dept WHERE emp.deptno = dept.deptno AND empno=7788;
3.只顯示其中的需要的信息
SELECT ename,sal ,dname, loc FROM emp ,dept WHERE emp.deptno = dept.deptno AND empno=7788;
-- 1. 查詢出高于本部門平均工資的員工信息
1. 分組統(tǒng)計每個部門的平均工資
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
2. 得出相應(yīng)的結(jié)果
SELECT * FROM emp e1 WHERE e1.sal > (SELECT AVG(e2.sal) FROM emp e2 WHERE e1.deptno=e2.deptno GROUP BY e2.deptno);
-- 1. 列出達拉斯加工作的人中,比紐約平均工資高的人
0. 查處DALLAS 的部門編號
SELECT deptno FROM dept WHERE loc='DALLAS';
1.查處達拉斯工作的人的信息
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE loc='DALLAS');
2. 查處紐約的部門編號
SELECT deptno FROM dept WHERE loc='NEW YORK';
3. 查村紐約平均工資
SELECT AVG(sal) FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE loc='NEW YORK');
4.得出結(jié)果:
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE loc='DALLAS')
AND sal > (SELECT AVG(sal) FROM emp WHERE deptno = (SELECT deptno FROM dept WHERE loc='NEW YORK'));
-- 2. 查詢7369員工編號,姓名,經(jīng)理編號和經(jīng)理姓名
SELECT e1.empno,e1.ename,e1.mgr,mgrtable.ename FROM emp e1,emp mgrtable WHERE e1.mgr = mgrtable.empno;
-- 3. 查詢出各個部門薪水最高的員工所有信息
1.分組統(tǒng)計每個部門員工最高的薪資是多少
SELECT MAX(sal),deptno FROM emp GROUP BY deptno;
2.算出結(jié)果
SELECT * FROM emp e1 WHERE e1.sal = (SELECT MAX(sal) FROM emp e2 WHERE e1.deptno = e2.deptno GROUP BY deptno);