美文网首页
MySQL 连接查询

MySQL 连接查询

作者: 村东头老骥 | 来源:发表于2019-11-12 14:57 被阅读0次

    MySQL的连接查询

    • 内连接
    • 外连接
    • 交叉连接

    内连接

    内连接使用比较运算符进行表之间的某些列数据的比较操作,并列出这些表中连接相匹配的数据行。根据所使用的比较的方式不同,内连接又分为等值连接,自然连接,和不等值连接三种。
    【等值连接】
    在连接条件中使用等于号(=)运算符比较被连接列的列值,其中查询结果中列出被连接表中所有的列,包括其中的重复列。

    select * from studio inner join class on studio.cl_id = class.cl_id
    
    等值连接.png

    【自然连接】
    有选择的显示列

    select st_id as '编号',st_name as '学生姓名',cl_class as '班级名称' 
    from studio inner join class  
        on studio.cl_id = class.cl_id 
    order by st_id
    -- 有选择的列进行显示
    +------+----------+----------+
    | 编号 | 学生姓名 | 班级名称 |
    +------+----------+----------+
    |    2 | 林黛玉   | 百杰二班 |
    |    3 | 陆小凤   | 千星一班 |
    |    4 | 西门吹水 | 千星二班 |
    |    5 | 刘小琴   | 百杰一班 |
    |    6 | 黄平     | 百杰二班 |
    |    9 | 陈小春   | 百杰一班 |
    +------+----------+----------+
    6 rows in set (0.00 sec)
    

    【连接多个表进行查询】
    对于添加多个表的时候需要注意的是只要使用 inner join 表名 on(匹配条件即可)

    SELECT
        st_id AS '编号',
        st_name AS '学生姓名',
        cl_class AS '班级名称',
        ho_coding AS '宿舍编号' 
    FROM
        studio
        INNER JOIN class ON studio.cl_id = class.cl_id
        INNER JOIN hostel ON studio.ho_id = hostel.ho_id
    
    多表联查.png

    外连接

    内连接: 返回结果查询集合中符合查询条件和连接条件的行

    外连接: 不仅仅包含符合条件的行,而且还包括左表(左外连接时Left outer join或者Left join)、右表(右外连接Right outer join或者Right join)、和完全连接(Full outer join 或Full join)MySQL中不支持全连接可以使用联合查询左连接右连接实现。

    总结: 外连接不只列出与连接条件相匹配的行,而且列出左表,右表,或两个表所有符合的数据行

    1. 左外连接

    以左表为主,显示出主表中所有的数据行,如果右边从表中没有之匹配的数据则显示NULL.

    select  st.st_id as '学生编号', st.st_name as '学生姓名',
            cl.cl_id as '班级编号',cl.cl_class as '班级名称'
    from studio as st left outer join class as cl
        on st.cl_id=cl.cl_id
    
    左外连接.png
    1. 右外连接
      右外连接和左外连接对应,以右边为主表,左边为从表,其他一样
    select  st.st_id as '学生编号', st.st_name as '学生姓名',
            cl.cl_id as '班级编号',cl_class as '班级名称'
    from studio as st right outer join class as cl
        on st.cl_id=cl.cl_id
    
    右外连接.png

    自连接
    对于自连接其实笼统的说就是连接关键字的两边都是同一个表

    select a.z_zone,b.z_zone 
    from zone as a inner join zone as b 
        on a.z_id=b.id 
    group by b.z_zone
    -- 输出结果
    +--------+--------+
    | z_zone | z_zone |
    +--------+--------+
    | 成都   | 四川   |
    | 绵阳   | 四川   |
    | 北京   | 北京   |
    | 南京   | 江苏   |
    | 苏州   | 江苏   |
    | 常州   | 江苏   |
    +--------+--------+
    ---
    +------+--------+
    | 地名 | 辖区数 |
    +------+--------+
    | 北京 |      1 |
    | 四川 |      2 |
    | 江苏 |      3 |
    +------+--------+
    
    

    相关文章

      网友评论

          本文标题:MySQL 连接查询

          本文链接:https://www.haomeiwen.com/subject/yftqictx.html