MySQL学习第三部分

连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会使用到连接查询
笛卡尔乘积现象:表一有m行,表二有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
分类:按年代分类:1、sql192标准:仅仅支持内连接
         2、sql199标准(推荐):支持内连接+外连接(左外和右外)+交叉连接
   按功能分类:1、内连接:等值连接、非等值连接、自连接
         2、外连接:左外连接、右外连接、全外连接
         3、交叉连接

等值连接介绍

语法:SELECT 字段名1,字段名2 FROM 表名1,表名2 WHERE 表名1.字段名3=表名2.字段名4;

一、sql92标准:

1、等值连接:
      i、多表等值连接结果为多表的交集部分
      ii、n表连接,至少需要n-1个连接条件
      iii、多表的顺序没有要求
      iv、一般需要为表取别名
      v、可以搭配前面介绍的所有子句使用,比如:筛选、分组、排序
2、非等值连接:
       使用BETWEEN AND模糊条件运算符放在WHERE后
3、自连接:
     查询同一张表中两次使用同一字段名
     SELECT 别名1.字段名1,别名1.字段名2,别名2.字段名1,别名2.字段名2
      FROM 表名 别名1,表名 别名2
      WHERE 别名1.字段名1=别名2.字段名1;

sql99标准

语法:SELECT 查询列表
   FROM 表1 别名[连接类型]
   JOIN 表1 别名 ON 连接条件
   [WHERE 筛选条件]
   [GROUP BY 分组]
   [HAVING 筛选条件]
   [ORDER BY 排序列表];
分类:内连接:INNER
   外连接:左外:LEFT [OUTER]
       右外:RIGHT [OUTER]
       全外:FULL[OUTER]
       交叉连接:CROSS
(一)内连接:
      语法:SELECT 查询列表
         FROM 表1 别名1
         INNER JOIN 表2 别名2 ON 连接条件
分类:i、添加排序、分组、筛选条件
   ii、INNER可以省略
   iii、筛选条件放在WHERE后面,连接条件放在ON后面,提高分离性,便于阅读
   iv、INNER JOIN连接和sql92语法中的等值连接效果时一样的,都是查询多表交际。
(二)外连接:
       应用场景:用于查询一个表中有,另一个表中没有的记录
       特点:i、外连接的查询结果为主表中的所有记录
           如果从表中有和它匹配的记录,则显示匹配的值;
           如果从表中没有和它匹配的记录,则显示NULL值。
          ii、左外连接,LEFT OUTER JOIN左边的是主表
            右外连接:RIGHT OUTER JOIN右边的是主表
          iii、左外和右外交换两个表的顺序,可以实现同样的效果
          iv、全外连接=内连接的结果+表1中有但表2中没有的+表2中有但表1中没有的
MySQL学习第三部分
MySQL学习第三部分

(三)交叉连接
(四)sql92和sql99 PK:
         功能:sql99支持的较多
         可读性:sql99实现连接条件和筛选条件的分离,可读性较高

相关文章:

  • 2021-05-20
  • 2021-09-22
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
  • 2021-07-10
  • 2021-05-15
  • 2021-12-08
猜你喜欢
  • 2021-08-19
  • 2021-11-09
  • 2022-12-23
  • 2021-12-29
  • 2022-12-23
  • 2021-10-13
  • 2021-12-02
相关资源
相似解决方案