MySQL实现多表联结双重连接(Two Times Join)(mysql中两次join)

MySQL实现多表联结:双重连接(Two Times Join)

在MySQL多表查询操作中,有时需要对多个表进行联结查询。双重连接指的是在一次查询中联结三个或以上的表。本文将介绍如何通过MySQL实现这一操作。

我们需要连接三个表:movies、actors和movies_actors。movies表使用id作为主键,actors表也使用id作为主键,movies_actors表包含两个外键:movie_id和actor_id,它们分别指向movies表和actors表的id列。

下面是三个表的DDL:

“`mysql

CREATE TABLE `movies` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(255) DEFAULT NULL,

`year` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

CREATE TABLE `actors` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`birth` date DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

CREATE TABLE `movies_actors` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`movie_id` int(11) DEFAULT NULL,

`actor_id` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `movie_id` (`movie_id`),

KEY `actor_id` (`actor_id`),

CONSTRNT `movies_actors_actor_id` FOREIGN KEY (`actor_id`) REFERENCES `actors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRNT `movies_actors_movie_id` FOREIGN KEY (`movie_id`) REFERENCES `movies` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;


接着,我们需要编写SQL语句来查询出电影标题、电影年份、演员姓名和演员生日。查询语句如下:

```mysql
SELECT m.title, m.year, a.name, a.birth
FROM movies m
INNER JOIN movies_actors ma ON m.id = ma.movie_id
INNER JOIN actors a ON ma.actor_id = a.id;

在这个查询中,我们使用INNER JOIN将三张表联结起来。我们将movies表和movies_actors表联结在一起,使得每个movie_id与一个或多个actor_id相对应。接着,我们再将actors表联结上去,使得每个actor_id对应一个演员的姓名和生日。

我们通过查询结果可以看到,每一行都包含了电影的标题、年份、演员的姓名和生日等信息。如果我们需要查询特定演员在哪些电影中演出,可以在查询语句中加入WHERE子句进行筛选。例如:

“`mysql

SELECT m.title, m.year

FROM movies m

INNER JOIN movies_actors ma ON m.id = ma.movie_id

INNER JOIN actors a ON ma.actor_id = a.id

WHERE a.name = ‘Emma Watson’;


我们可以通过上述查询语句,找出Emma Watson的所有电影。

总结一下,通过多表连接的方式,我们可以轻松实现数据的查询、比较和统计等操作,为业务提供更有力的支持。希望这篇文章对您有所帮助。

数据运维技术 » MySQL实现多表联结双重连接(Two Times Join)(mysql中两次join)