对于复杂查询,连接查询和子查询各有其优势和特点,下面举例来说明两者的用法。
测试数据表1:
表名:test1(员工表)
字段列表:empno(员工编号),ename(姓名),deptno(所在部门编号)
测试数据表2:
表名:test2(部门表)
字段列表:deptnum(部门编号),dname(部门名称)
测试题目一:
请查询部门名称是SALES的员工编号和姓名。
方法一:连接查询
SELECT empno,ename
FROM test1,test2
WHERE test1.detpno=test2.deptno AND test2.dname='SALES';
方法二:子查询
SELECT empno,ename
FROM test1
WHERE deptno IN (SELECT deptno FROM test2 WHERE dname='SALES');
测试题目二:
请查询每位员工的编号,姓名和所在部门名称。
方法一:连接查询
SELECT empno,ename,dname
FROM test1,test2
WHERE test1.detpno=test2.deptno;
方法二:子查询
SELECT empno,ename,(SELECT dname FROM test2 WHERE test2.deptno=test1.deptno) AS dname
FROM test1;
一、子查询 和 连接查询的关系
(1)子查询就是查询中又嵌套的查询,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件或相关子查询中;
(2)而表连接更适合与查看多表的数据;
(3)表连接都可以用子查询,但不是所有子查询都能用表连接替换;
(4)子查询不一定需要两个表有关联字段,而连接查询必须有字段关联。
二、子查询 和 连接查询哪个效率更高
(1)一般情况下表连接的效率要高于子查询;
(2)如果子查询只有一条记录且需要唯一的列,最好用子查询;
(3)对于数据量多的用连接查询更快,因为子查询会多次遍历所有的数据,而连接查询只会遍历一次。