mysql 多表查询

一、概念

多表查询也叫关联查询, 其就是指 一次性查询多张表,并且将每张表得到的数据联系作为查询结果

二、关键字 

当我们需要一次查询两张表时,如果使用:

select * from employees,departmaents;

这样的话会出现笛卡尔积错误 (笛卡尔积错误:两个表的数据量相乘后的数量成为查询的结果)

这里就需要使用特定的写法,使用专门的关键字

select last_name,department_id from employees,departments where employees.`department_id` = departments.`department_id`;

 这里虽然可以使用条件判断去防止笛卡尔积错误,但不建议使用,一般使用 ↓ 关键字:

 join on

select * from student s join grade g on s.grade = g.id;

三、多表查询的类型

1. 等值查询

查询两张表种都存在并且通过条件等价查询获得的结果集

2. 自连接

自己表和自己表连接,核心:将一张表拆分为两张一样的表即可

select b.bookName '父栏目',a.bookName '子栏目' from book_p a ,book_p b where a.pid = b.sid; 

 原始数据

 

 查询结果

 

3 . 外连接

3.1 左外连接

 left join on

select s.name,s.address,g.class from student s right join grade g on s.gradeid = g.id;

 表示查询无论 s.grade = g.id 是否成立,student 表中的结果都会返回

3.2 右外连接

right join on 

select s.name,s.address,g.class from student s left join grade g on s.gradeid = g.id;

 表示查询无论 s.grade = g.id 是否成立,grade表中的结果都会返回

3.3  直连接

join on

select s.name,s.address,g.class,g.id from student s join grade g on s.gradeid = g.id; 

将两张表相同的部分移除,剩下的合并成一张表返回 

 3.4 inner join on

select name,class from student s inner join grade g on s.gradeid = g.id;

 原始表

在两个表中,都分别有别 gradeid = id 没有联系的段落

查询结果

 该结果并没有把 student 中的 id = 8 的字段查出 和 grade 表中 id = 4 的字段查出

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值