zoukankan      html  css  js  c++  java
  • 浅谈sql之连接查询

    SQL之连接查询

    一、连接查询的分类

            sql中将连接查询分成四类:

    •   内链接
    •   外连接
      •  左外连接
      •     右外连接   
    •   自然连接
    •   交叉连接

    二、连接查询的分类

      数据库表如下:

      1.学生表

      

      2.老师表

      

      3.班级表

      

      表用于连接查询教学,不要纠结表的设计~

     三、连接查询之内连接

    概念

      内链接[inner]join,从左表中取出每一条记录,去右表中与所有记录进行匹配;
        是某个条件在左表中与右表中相同最终才会有保留结果,否则不保留。 

    基本语法
      左表[inner] join 右表 on 左表.字段=右表.字段;on表示连接条件;条件字段就是代表相同的业务含义

    例子

      查询sql语句如下

      SELECT
          student.s_name,
          student.c_id,
          class.id,
          class.c_name
      FROM
          student
      INNER JOIN class ON student.c_id = class.id;

      查询结果

      

      分析:从查询结果不难看出,student的c_id和class的id是连接条件,以左表student为主表,以student表中每一条记录的c_id作为右表class的id主键的查询条件去匹配相关的信息。

      

      扩展:内连接还可以使用where 代替on关键字,或者如下写法代替:

      SELECT
          student.s_name,
          student.c_id,
          class.id,
          class.c_name
      FROM
          student,
          class
      where student.c_id = class.id;

      四、连接查询之外连接

    概念

      外连接:outer join,以某张表为主,取出里面所有的记录,每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留;能匹配正确保留,不能匹配,其他标的字段都是空null

      外连接分为两种;是以某张表为主表;
          left join:左连接,已左表为主表;
          right join:右链接 ,以左表为主表。

    基本语法

      左表left/right join 右表 on 左表.字段=右表.字段

    例子

      (1)左连接

      sql语句:  

      SELECT
          student.s_name,
          student.c_id,
          class.id,
          class.c_name
      FROM
          student
      left JOIN class ON student.c_id = class.id;

      查询结果

      

      分析:左连接,以左表student为主表,每条与另外一张表进行连接,多余同学的c_id在class匹配不上,并没有这个班级,但是依旧保留下来,其他字段显示NULL。

      

      (2)右连接

      sql语句:

      SELECT
          student.s_name,
          student.c_id,
          class.id,
          class.c_name
      FROM
          student
      right JOIN class ON student.c_id = class.id;

      查询结果

      

      这里我就不再分析啦~都很好理解,不懂的看看上面的左连接自己推导一下~

    五、连接查询之自然连接

    概念

      自然连接;natural join,自然连接,就是自动匹配连接条件;系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段都作为条件)

      ps:   自然连接很没有用!!!实际开发中并不会用到所以了解就好了!!!

        内链接和外连接都可以模拟自然连接

        使用同名字段,合并字段
        左表 left/right/inner join 左表 using(字段名);

    六、连接查询之交叉连接

    概念

      交叉连接; cross join,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做笛卡尔积。

    基本语法

      左表 cross join右表;也可以携程  from 左表,右表。

    例子

      sql语句:

      SELECT
          *
      FROM
         student,
            class ;

      查询结果

      

      分析:简单来说就是,左表中的每一条记录都与由表中的每一条记录匹配一遍。

      ps:  交叉连接没什么用,只是保证连接这种结构的完整性!!!

    笔记就到这了,但是上面说到的都是两个表的连接查询,那么,是否可以多个表进行连接查询呢?当然是可以的。

    多表连接查询

    sql语句如下:

      SELECT
          student.s_name,
          student.c_id,
          class.id,
          class.c_name,
              class.t_id,
              teacher.id as tid,
              teacher.t_name
      FROM
          student
      left JOIN class ON student.c_id = class.id
      left JOIN teacher ON class.t_id = teacher.id;

    查询结果:

      

    分析:多表连接查询,其实就是两个表连接查询组成一个新的表,这个新的表再与第三个表进行连接查询,以此类推,不懂的,思考一下?

  • 相关阅读:
    Raid5 Raid10性能测试
    MetaData_model_package
    UBoot命令说明
    ubuntu 12.10 配置一个Apache+MySQL+phpMyAdmin环境
    SSH服务器
    VC2008使用boost库方式
    嵌入式Web服务器BOA移植
    利用matlab将数据写入指定列的方法
    error LNK2019: 无法解析的外部符号,解决办法
    在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用
  • 原文地址:https://www.cnblogs.com/wwjchina/p/9328472.html
Copyright © 2011-2022 走看看