• MYSQL数据库学习十一 多表数据记录查询


    11.1 关系数据操作

    并(UNION):把具有相同字段数目和字段类型的表合并到一起。
    笛卡尔积(CARTESIAN PRODUCT):没有连接条件表关系的返回结果。字段数=table1字段数+table2字段数,记录数=table1记录数*table2记录数。
    内连接(INNER JOIN):在表关系的笛卡尔积数据记录中,保留表关系中所有匹配的数据记录,舍弃不匹配的数据记录.
    外连接(OUTER JOIN):在表关系的笛卡尔积数据记录中,不仅保留表关系中所有匹配的数据记录,而且还会保留部分不匹配的数据记录。
    

    11.2 内连接(INNER JOIN)

      按照匹配的条件分为:自然连接,等值连接,不等连接

      1.自然连接:表关系的笛卡尔积中,首先根据表关系中相同名称的字段自动进行记录匹配,然后去掉重复的字段。

      2.等值连接:表关系的笛卡尔积中,选择所匹配字段值相等(=符号)的数据记录,在新关系中不会去掉重复的字段。

      3.不等连接:表关系的笛卡尔积中,选择所匹配字段值不相等(!=符号)的数据记录,在新关系中不会去掉重复的字段。

    SELECT field1,field2,...,fieldn
        FROM join_tablename1 INNER JOIN join_tablename2
        ON join_condition
    

    11.3 外连接(OUTER JOIN)

      按照保留不匹配条件数据来源可以分为:左外连接、右外连接、全外连接

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

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

      3.全外连接:表关系的笛卡尔积中,除了选择相匹配的数据记录,还包含左右两表中不匹配的数据记录。

    SELECT field1,field2,...,fieldn
        FROM join_tablename1 LEFT|RIGHT|FULL [OUTER] JOIN join_tablename2
        ON join_condition
    

    11.4 合并查询

      MySQL通过 UNION|UNION ALL 实现并操作,UNION去掉了重复数据记录,UNION ALL没有去掉重复数据记录。

    SELECT field1,field2,...,fieldn
        FROM tablename1
    UNION|UNION ALL
    SELECT field1,field2,...,fieldn
        FROM tablename2
    UNION|UNION ALL
    SELECT field1,field2,...,fieldn
        FROM tablename3
    ……
    

    11.5 子查询

      通过统计函数 COUNT() 查询所关联表笛卡尔积后的数据记录数(两表数据记录乘积条数据记录数),具体SQL语句如下:

    SELECT COUNT(*)
        FROM t_dept,t_employee
    

      如果查询到的数据记录数MySQL可以接受,然后才进行多表连接查询。如果查询到的数据记录数远大于MySQL软件可接受的范围,则通过子查询来实现多表查询。

      11.5.1 返回结果为单行单列和单行多列

      子查询一般在WHERE子句里,通常会包含比较运算符(“>”、“<”、“=”、“!=”等)。

      11.5.2 返回结果为多行单列

      子查询一般在WHERE子句里,通常会包含IN、ANY、ALL、EXISTS等。

      IN:主查询的查询条件在子查询的查询结果中时使用。

      ANY:主查询的查询条件为满足子查询查询结果中任意一条数据记录。

        =ANY:功能和IN一样;

        >(>=)ANY:大于(大于等于)最小的数据记录;

        <(<=)ANY:小于(小于等于)最大的数据记录。

      ALL:主查询的查询条件为满足子查询查询结果中所有数据记录。

        >(>=)ALL:大于(大于等于)最大的数据记录;

        <(<=)ALL:小于(小于等于)最小的数据记录。

      EXISTS:返回记录行时条件为真,返回当前遍历到的记录,反之丢弃。

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

      子查询一般在FROM子句里,被当做一张临时表来处理。

    SELECT d.deptno,d.dname,d.loc,number,average
        FROM t_dept d INNER JOIN (
            SELECT depno dno,COUNT(empno) number,AVG(sal) average FROM t_employee GROUP BY depno DESC) employee
        ON d.deptno=employee.dno;
    
  • 相关阅读:
    策略模式-1.简单定义及一个实例
    单例模式-3.透明的单例模式
    单利模式2-一个简单的实例
    单例模式-1.单利模式的简单实现
    jquery animate的一个疑惑
    老版本select2设置初始值
    cookie的设置与清除会出现的一个问题
    给select2的ajax添加beforeSend方法
    Day16
    Day15
  • 原文地址:https://www.cnblogs.com/zengzhihua/p/4571335.html
Copyright © 2020-2023  润新知