测试准备
部门表
CREATE TABLE dept
(
deptno
INT(11) NOT NULL,
dname
VARCHAR(50) DEFAULT NULL,
loc
VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (deptno
)
)
雇员表
CREATE TABLE emp
(
empno
INT(11) NOT NULL AUTO_INCREMENT,
ename
VARCHAR(50) DEFAULT NULL,
job
VARCHAR(50) DEFAULT NULL,
mgr
INT(11) DEFAULT NULL,
hiredate
DATE DEFAULT NULL,
sal
DECIMAL(7,2) DEFAULT NULL,
COMM
DECIMAL(7,2) DEFAULT NULL,
deptno
INT(11) DEFAULT NULL,
PRIMARY KEY (empno
)
)
部门表数据:
雇员表数据:
本次测试用了1703936条数据。可以建少量的数据,然后用下面的sql语句进行测试数据的生成。
INSERT INTO emp(ename,job,hiredate,sal,comm,deptno,mgr) SELECT ename,job,hiredate,sal,comm,deptno,mgr FROM emp;
用于测试sql语句
子查询:
SELECT e.*,(SELECT dname FROM dept WHERE e.deptno
=deptno) AS 部门,(SELECT ename FROM emp WHERE empno=e.mgr
) AS 上级
FROM emp e WHERE e.sal
>(SELECT AVG(sal) FROM emp);
连接查询:
SELECT e.*,e2.ename
AS 上级,d.dname
AS 部门 FROM emp e
LEFT JOIN dept d ON e.deptno
=d.deptno
LEFT JOIN emp e2 ON e.mgr
=e2.empno
WHERE e.sal
> (SELECT AVG(sal) FROM emp);
测试结果
子查询:
连接查询:
本案例测试结果,连接查询要比子查询快将近三倍。