MySQL数据库中的多表数据记录查询

1.关系数据操作

(1)并(UNION)

“并”就是把具有相同字段数目和字段类型的表合并到一起。

(2)笛卡儿积(CARTESIAN PRODUCT)

笛卡儿积就是没有连接条件表关系返回的结果。

SELECT e.ename employeename, e.job

     FROM t_employee e;

(3)内连接(INNER JOIN)

在表关系的笛卡儿积数据记录中,保留表关系中所有匹配的数据记录,舍弃不匹配的数据记录。主要有以下三种连接方式:

1)自然连接(NATURAL JOIN):首先根据表关系中相同名称的字段自动进行记录匹配,然后去掉重复的字段

2)等值连接:等值连接操作就是表关系的笛卡儿积中,选择所匹配字段值相等的数据记录。等值连接关系数据操作需要在执行过程中的用“符号=”指定匹配条件,在新关系中不会去掉重复字段。

3)不等连接:笛卡尔积中,选择所匹配字段值不相等(!=)的数据记录。与自然连接相比,不等连接关系数据操作需要在执行过程中用符号!=指定匹配条件,在新关系中不会去掉重复字段。


(4)外连接(OUTER JOIN)

左外连接:就是表关系的笛卡儿积中,除了选择相匹配的数据记录,还包含关联左边表中不匹配的数据记录

右外连接:就是表关系的笛卡儿积中,除了选择相匹配的数据记录,还包含关联右边表中不匹配的数据记录

全外连接:就是表关系的笛卡儿积中,除了选择相匹配的数据记录,还包含关联左右两边表中不匹配的数据记录

 

(5)内连接查询

包含三种情况:

1)自连接。指表与其自身进行连接。

SELECT e.ename employeename, e.job, l.ename loadername

     FROM t_employee AS e INNER JOIN t_employee AS l

          ON e.mgr=l.empno   #雇员表的领导编号=领导表的领导编号

或者

SELECT e.ename employeename, e.job, l.ename loadername

    FROM t_employee AS e, t_employee l

    WHERE e.mgr=l.empno;


2)等值连接

SELECT e.empno, e.ename, e.job, d.dname, d.loc

   FROM t_employee e INNER JOIN t_dept d

        ON e.deptno=d.deptno;

SELECT e.empno, e.ename, e.job, d.dname, d.loc

   FROM t_employee e, t_dept d

   WHERE e.deptno=d.deptno;


SELECT e.empno, e.ename employeename, e.sal, e.job, l.ename loadername, d.dname, d.loc

   FROM t_employee e INNER JOIN t_employee l ON e.mgr=l.empno

                                      INNER JOIN t_dept d ON l.deptno=d.deptno;

或者

SELECT e.empno, e.ename employeename, e.sal, e.job, l.ename loadername, d.dname, d.loc

  FROM t_employee e, t_employee l, t_dept d

  WHERE e.mgr=l.empno AND l.deptno=d.deptno;


3)不等连接

SELECT e.ename employeename, e.job, l.ename loadername

     FROM t_employee e INNER JOIN t_employee l

           ON e.mgr=l.empno AND e.empno>l.empno;

或者

SELECT e.ename employeename, e.job, l.ename loadername

   FROM t_employee e, t_employee l

   WHERE e.mgr=l.empno AND e.empno>l.empno;


(6)外连接查询

左外连接

SELECT e.ename employeename, e.job, l.ename loadername

     FROM t_employee e LEFT JOIN t_employee l

           ON e.mgr=l.empno;


右外连接

SELECT e.empno, e.ename, e.job,d.dname,d.loc

     FROM t_dept d RIGHT JOIN t_employee e

           ON e.deptno=d.deptno;

(7)合并查询数据记录

UNION会把查询结果集直接合并在一起,同时将去掉重复数据记录。

SELECT * 

       FROM t_cstudent

UNION

SELECT *

      FROM t_mstudent;


UNION ALL 会把查询结果集直接合并在一起

SELECT * 

       FROM t_cstudent

UNION ALL

SELECT *

      FROM t_mstudent;

(8)子查询

子查询可以减少电脑的工作负荷,访问速度快。

#返回结果为单行单列子查询

SELECT *

  FROM t_employee

 WHERE sal>(

      SELECT sal

              FROM t_employee

              WHERE ename='SMITH');


#单行多列子查询

SELECT ename, sal, job

    FROM t_employee

    WHERE (sal, job)=(

         SELECT sal, job

               FROM t_employee

               WHERE ename='SMITH');


#返回结果为多行单列子查询

SELECT *

     FROM t_employee

     WHERE deptno IN (

           SELECT deptno

              FROM t_dept

);


SELECT *

   FROM t_employee

   WHERE sal>ANY(

   SELECT sal

        FROM t_employee

        WHERE job='MANAGER'

);


SELECT *

   FROM t_employee

   WHERE sal>ALL(

   SELECT sal

         FROM t_employee

        WHERE job='MANAGER'

);


SELECT *

   FROM t_dept c

   WHERE NOT EXISTS(

       SELECT *

      FROM t_employee

      WHERE deptno=c.deptno);

 

#返回结果为多行多列子查询

SELECT d.deptno, d.dname, d.loc, number, average

     FROM t_dept d Inner JOIN (

           SELECT deptno dno, COUNT(empno) number, AVG(sal) average

                 FROM t_employee

                 GROUP BY deptno DESC) employee

           ON d.deptno=employee.dno;








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值