多表查询(重点)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询(重点)相关的知识,希望对你有一定的参考价值。

在之前查询之中  from  子句之后只有一个数据表,所谓的多表查询是同时从多张数据表中取出数据实现查询

COUNT(*)统计一个表格的数据量

SELECT COUNT(*) FROM EMP ;

将emp和dept表多表查询

如果使用这样的语句查询:

SELECT * FROM EMP ,DEPT ;

这样查出的是 emp*dept的表格

所以要这样:

SELECT * FROM EMP ,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO ;

虽然消除了笛卡尔积,但是笛卡尔积依然存在

如果表格名称过长,往往会为其定义一个别名,

SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO = D.DEPTNO ;

范例,

1.要求查出每个雇员的编号,名字,职位,工资,部门,部门名称

  -选择数据表

    emp表,dept表。

  -确定已知的关联条件

    雇员和部门关联  emp.deptno = dept.deptno ;

第一步,查询每个雇员的编号。。。。

SELECT e.empno, e.ename ,e.job ,e.deptno  FROM emp e ;

第二步,加入部门表,要增加消除笛卡尔积的条件:

SELECT e.empno, e.ename ,e.job ,e.deptno  ,d.dname,d.loc FROM emp e ,dept d
WHERE e.deptno = d.deptno;

 

 

2.查询每个雇员的编号,姓名,工资,雇佣日期,工资等级

  -两个表

    emp和salgrade

  -关联字段

    emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

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

3.查询雇员的编号,姓名,职位,雇佣日期,工资,工资等级,所在部门及位置

  -emp

  -dept

  -salgrade

  关联条件

  emp.sal BETWEEN salgrade.losal AND salgrade.hisal ;

  AND  emp.deptno = dept.deptno ;

 

说明:1.如果使用NOT IN有了null则表示不为空,有些字段是永恒不能为空的,如果表很庞大,则直接造成死机。

   2.笛卡尔积只是显示消除,但是它还是在的。尽量回避多表查询尤其是数据量大的时候。

 

 

 

 

连接方式:

内连接:等值连接,在之前的所有查询都是内连接

外链接:左外连接,右外连接,全外连接

在emp表格中增加一个没有部门的数据:

此时新增加的数据部门为空

:观察内连接,等值连接。

以上是关于多表查询(重点)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL高级:重点掌握多表查询操作

mybatis-基于xml的多表查询

python flask(多对多表查询)

MySQL之多表查询

13-多表查询

13-多表查询