连接查询是另一种类型的多表查询。连接查询对多个表进行JOIN运算,简单地说,就是先确定一个主表作为结果集,然后,把其他表的行有选择性地“连接”在主表结果集上。
假如我们想要查询出每一和学生所在的班级名称,我们使用最常用的一种内连接——INNER JOIN来实现:
SELECT student.name,class.class_name from student INNER JOIN class on student.class_num = class.class_num;
注意INNER JOIN查询的写法是:
- 先确定主表,仍然使用FROM <表1>的语法;
- 再确定需要连接的表,使用INNER JOIN <表2>的语法;
- 然后确定连接条件,使用ON <条件...>,这里的条件是student.class_num = class.class_num,表示student表的class_num 列与class表的class_num列相同的行需要连接;
- 可选:加上WHERE子句、ORDER BY等子句。
使用别名不是必须的,但可以更好地简化查询语句。
除了内连接还有外连接包括左连接右连接,直接上图
下面给出例子
film表
字段 | 说明 |
film_id | 电影id |
title | 电影名称 |
description | 电影描述信息 |
category表
字段 | 说明 |
category_id | 电影分类id |
name | 电影分类名称 |
last_update | 电影分类最后更新时间 |
film_category表
字段 | 说明 |
film_id | 电影id |
category_id | 电影分类id |
last_update | 电影id和分类id对应关系的最后更新时间 |
三张表,可以看到由电影id和电影分类id联系到一起
题目:使用join查询方式找出没有分类的电影id以及名称
解答:
select f.film_id,f.title from film f
left join film_category f1 on f1.film_id =f.film_id
left join category c on f1.category_id=c.category_id
where name is null