温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL中多表连接的基本语法和交叉连接的方式

发布时间:2021-09-04 12:59:02 来源:亿速云 阅读:281 作者:chen 栏目:开发技术

这篇文章主要介绍“MySQL中多表连接的基本语法和交叉连接的方式”,在日常操作中,相信很多人在MySQL中多表连接的基本语法和交叉连接的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL中多表连接的基本语法和交叉连接的方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 多表连接的基本语法

  • 交叉连接和笛卡尔积现象

    • 交叉连接

    • 笛卡尔积现象

  • 内连接

    • 外连接

      • 左外连接

      • 右外连接

      • 全外连接

    • 子查询

      多表连接的基本语法

      多表连接,就是将几张表拼接为一张表,然后进行查询

      select 字段1, 字段2, ...
      from 表1 {inner|lift|right} join 表2
      on 连接条件;

      有如下两张表:部门表和员工表

      MySQL中多表连接的基本语法和交叉连接的方式

      MySQL中多表连接的基本语法和交叉连接的方式

      交叉连接和笛卡尔积现象

      交叉连接

      交叉连接,又名无条件内连接/笛卡尔连接

      第一张表种的每一项会和另一张表的每一项依次组合

      select * from employee,department;

      MySQL中多表连接的基本语法和交叉连接的方式

      上述结果肯定不是我们想晓得的,左表中每一个人都有4个部门,仔细观察这4条记录,正好是左表每一条记录和右表一一匹配后的结果。

      笛卡尔积现象

      MySQL中多表连接的基本语法和交叉连接的方式

      笛卡尔积现象产生的原因:两张表没有有效的连接条件。既然你没有连接条件,本表中的第一行肯定是能和另外表中的所有行进行一一匹配,同理,本表中的第二行肯定是能和另外表中的所有行进行一一匹配,以此类推,本表中的最后一行m也可以和另外表中的所有行进行一一匹配。若另外一张表有n行,那么最后显示的行数,肯定就是m*n行了。

      如果不想产生笛卡尔积现象,就需要添加有效的表连接条件。拿上述例子来说,左表dep_id只有和右表id相等时,才代表他们的部门。

      内连接

      内连接(INNER JOIN)是找几张表的交集,即根据条件筛选出来正确的结果。

      select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
      from employee as emp INNER JOIN department as dep
      on emp.dep_id=dep.id;

      MySQL中多表连接的基本语法和交叉连接的方式

      由于部门表中没有id=5的部门,所以员工表dep_id=5的这条记录没有返回;而由于行政部没有员工,所以这条记录也没返回。

      外连接

      左外连接

      左连接(left join)是以左表为准,如果右表中没有合适的记录,用NULL补全;其本质是在内连接的基础上增加左表有结果而右表没有的记录(内连接时,这种情况的记录会忽略)。

      select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
      from employee as emp left join department as dep
      on emp.dep_id=dep.id;

      MySQL中多表连接的基本语法和交叉连接的方式

      右外连接

      跟左连接正好相反,右连接(right join)是以右表为准,如果左表中某些字段没有合适的结果,用NULL补全;其本质是在内连接的基础上增加右表有结果而左表没有的记录(内连接时,这种情况的记录会忽略)。

      select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
      from employee as emp right join department as dep
      on emp.dep_id=dep.id;

      MySQL中多表连接的基本语法和交叉连接的方式

      全外连接

      全外连接,在内连接的基础上,展示左右表的所有的记录,而左右表中缺省记录以NULL补全。

      MySQL中并没有全外连接的FULL JOIN语法,而是借助UNION/UNION ALL语句实现。

      UNIONUNION ALL的区别,UNION具有去重功能。

      select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
      from employee as emp left join department as dep
      on emp.dep_id=dep.id
      union
      select emp.id,emp.name,emp.age,emp.dep_id,emp.gender,dep.id,dep.name
      from employee as emp right join department as dep
      on emp.dep_id=dep.id;

      MySQL中多表连接的基本语法和交叉连接的方式

      子查询

      • 子查询是将一个查询语句嵌套再另一个查询语句中的查询方式:

      • 子查询的内层查询结果,可以作为外层查询语句提供查询条件。

      • 子查询中可以包含INNOT INANDALLEXISTSNOT EXISTS等关键字。

      子查询中还可以包含比较运算符,如=!=><等。

      -- 查询平均年龄在20以上的部门名称
      select name
      from department
      where id in (
      select dep_id
      from employee
      group by dep_id
      having avg(age) > 20);
      
      -- 查询财务部员工姓名
      select name 
      from employee
      where dep_id in (
      select id 
      from department 
      where name='财务部');
      
      
      -- 查询所有大于平均年龄的员工的年龄和姓名
      select name,age 
      from employee 
      where age > (
      select avg(age) from employee);

      MySQL中多表连接的基本语法和交叉连接的方式

      到此,关于“MySQL中多表连接的基本语法和交叉连接的方式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

      向AI问一下细节

      免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

      AI