使用MySQL实现两个表的联合查询(mysql 两表连查)

使用MySQL实现两个表的联合查询

在实际的数据库应用中,我们往往需要查询关联或者交集的数据,这时候就需要用到联合查询。MySQL支持使用UNION操作符对两个或多个表进行联合查询。

下面以一个图书库存和销售记录的查询为例,介绍如何使用MySQL实现联合查询。

创建两个表:

库存表:

CREATE TABLE `stock` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`book_name` varchar(255) NOT NULL,

`author` varchar(255) NOT NULL,

`publishing` varchar(255) NOT NULL,

`count` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

销售表:

CREATE TABLE `sale` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`book_name` varchar(255) NOT NULL,

`author` varchar(255) NOT NULL,

`publishing` varchar(255) NOT NULL,

`count` int(11) NOT NULL,

`sale_date` date NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

然后,往两个表中插入一些数据:

库存表:

INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ‘100’);

INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘Java编程思想’, ‘李四’, ‘机械工业出版社’, ‘200’);

INSERT INTO `stock` (`id`, `book_name`, `author`, `publishing`, `count`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ‘150’);

销售表:

INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ’50’, ‘2020-10-01’);

INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘MySQL从入门到精通’, ‘张三’, ‘人民邮电出版社’, ’30’, ‘2020-10-05’);

INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Java编程思想’, ‘李四’, ‘机械工业出版社’, ’80’, ‘2020-10-02’);

INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ’60’, ‘2020-10-03’);

INSERT INTO `sale` (`id`, `book_name`, `author`, `publishing`, `count`, `sale_date`) VALUES (NULL, ‘Python编程入门’, ‘王五’, ‘清华大学出版社’, ’30’, ‘2020-10-07’);

接下来,使用UNION操作符对两个表进行联合查询:

SELECT book_name, author, publishing, SUM(count) AS total_count

FROM (

SELECT book_name, author, publishing, count FROM `stock`

UNION ALL

SELECT book_name, author, publishing, count FROM `sale`

) AS tmp_table

GROUP BY book_name, author, publishing

ORDER BY total_count DESC;

这条SQL语句执行的结果如下:

+——————–+——–+——————-+————-+

| book_name | author | publishing | total_count |

+——————–+——–+——————-+————-+

| MySQL从入门到精通 | 张三 | 人民邮电出版社 | 120 |

| Python编程入门 | 王五 | 清华大学出版社 | 120 |

| Java编程思想 | 李四 | 机械工业出版社 | 80 |

+——————–+——–+——————-+————-+

可以看到,这条SQL语句对库存表和销售表进行了联合查询,并按照书名、作者、出版社分组,计算了总库存和总销售量。按照总销售量倒序排列,返回了结果集。

通过本文的介绍,相信大家已经了解了如何使用MySQL实现两个表的联合查询。笔者建议读者可以根据自己的实际需求,自行尝试使用UNION操作符进行查询,以更好地理解其原理和应用。


数据运维技术 » 使用MySQL实现两个表的联合查询(mysql 两表连查)