Skip to content

多表查询 #5

Open
Open
@SillyBoy007

Description

@SillyBoy007

一.多表查询的实现形式

1 ) 统计表中的数据量
SELECT COUNT(*)
FROM emp,dept;

2 ) 统计多表的数据量(表名称.列名称)(where消除笛卡儿积的影响)
SELECT COUNT(*)
FROM emp e,dept d
WHERE e.deptno = d.deptno;

3 ) 要求显示每个雇员编号,姓名,职位,工资,部门,部门位置
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
FROM dept d,emp e
WHERE e.deptno = d.deptno;

4 ) 要求显示每个雇员编号,姓名,职位,工资,工资等级

SELECT e.empno,e.ename,e.job,e.sal,s.grade
FROM salgrade s,emp e
WHERE e.sal BETWEEN s.losal AND s.hisal;

5 ) 要求显示每个雇员编号,姓名,职位,工资,工资等级,部门,部门位置

SELECT e.empno,e.ename,e.job,e.sal,s.grade,d.dname,d.loc
FROM salgrade s,emp e,dept d
WHERE (e.sal BETWEEN s.losal AND s.hisal) AND (e.deptno = d.deptno) ;

总结:
1.每添加一张表就要用where消除笛卡儿积的影响
2.多个笛卡儿积的影响用AND连接
3.复杂的查询分步骤完成

二.数据表的连接操作

1.内连接(等值连接)
内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
SELECT COUNT(*)
FROM emp e,dept d
WHERE e.deptno = d.deptno;

2.外连接(左外连接,右外连接,全外连接)

左外连接:字段 = 字段(+)
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
FROM dept d,emp e
WHERE e.deptno = d.deptno(+);

右外连接:字段(+) = 字段
SELECT e.empno,e.ename,e.job,e.sal,d.dname,d.loc
FROM dept d,emp e
WHERE e.deptno(+) = d.deptno;

例:查询每个雇员姓名,职位,领导信息
SELECT e.ename,e.job,m.ename mname
FROM emp m,emp e
WHERE e.mgr = m.empno(+);

三.数据集合操作

1 ) UNION将多个查询结果合并在一起(无重复):
SELECT empno,ename,job
FROM emp
WHERE deptno=10
UNION
SELECT empno,ename,job
FROM emp;
2 ) UNION ALL将多个查询结果合并在一起(有重复):
SELECT empno,ename,job,deptno
FROM emp
WHERE deptno=10
UNION ALL
SELECT empno,ename,job,deptno
FROM emp;

3 ) INTERSECT取俩个查询结果的交集:
SELECT empno,ename,job,deptno
FROM emp
WHERE deptno=10
INTERSECT
SELECT empno,ename,job,deptno
FROM emp;

4 ) MINUS 返回差集(第一个结果-第二个结果)
SELECT empno,ename,job,deptno
FROM emp
MINUS
SELECT empno,ename,job,deptno
FROM emp
WHERE deptno=10;

总结:数据集合操作查询结果结构必须一致,不然会出错;
SQL优化:尽量不要用集合运算

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions