MySQL连接查询及去重50-58

132 阅读2分钟

连接查询 P51-58看完了

distinct

  • 把查询结果去除重复记录
  • 注意!:团表不会修改,改的只是视图
  • distinct只能出现在字段的最前方

什么是连接查询

单独查一张表的数据叫单表查询 两张表联合起来查询数据,从一个表取列,从另一个表取另一列。这种跨表查询,多张表联合起来查询数据,被称为连接查询。

连接查询的分类

内连接:(能够完全匹配上的连接,两张表是平等的,没有谁主谁次)

  • 等值连接
  • 非等值连接
  • 自连接 外连接:
  • 左外连接(左连接)
  • 右外连接(右连接)

笛卡尔积现象

当没有任何条件去约束时,连接两张表会把每一项都连接起来 表一数* 表二数 那么如何避免笛卡尔积现象?,用一个项给他们连接起来,(但是实际上底层该找多少次还是找多少次,只不过结果只返回那么多)表要起别名,比较简单

尽量避免太多的表的连接次数,效率太低

等值连接

99的语法,SELECT * FROM A JOIN B ON XXX 把表连接的限制条件改成了join on,和where区分开
join前面可以加个inner,不过可以省略,好处是有他可也认为他是内连接

非等值连接

条件不是一个等值关系,称为非等值连接

  • 比如在两个条件之间(比如薪资)用 x between a and b

自连接

把自己的这一张表看成两张表

外连接

就是如果有不匹配但是还是想输出出来的话,就用外连接,分为左右连接,而且都可以写成互相的写法 就是from a right join b 就是主要输出b,然后顺便关联查询左边那个表
相同的,外连接也有一个可写可不写的outer 在right/left后面 只为了可读性

多表联查

就是join on join on join on 什么时候该用内连接,什么时候该用外连接 注意好