查询图书表,同时查询出图书分类名称(JOIN和IN查询)
2021-11-11 11:19:07
book 图书表
```
id name category_id
1 深入理解计算机系统 4
2 Java编程思想 1
4 C语言程序设计 1
5 Java并发编程之美 3
6 HTTP权威指南 2
```
category 分类表
```
id name
1 编程语言
2 网络协议
3 微服务
4 综合
```
常用的两种方式:
第1种 查询图书表,同时查询出图书分类名称
```
SELECT book.*, category.name AS category_name FROM book JOIN category ON book.category_id = category.id
```
```
id name category_id category_name
1 深入理解计算机系统 4 综合
2 Java编程思想 1 编程语言
4 C语言程序设计 1 编程语言
6 HTTP权威指 2 网络协议
7 微服务设计 3 微服务
8 设计模式 3 微服务
9 数据结构与算法 1 编程语言
10 现代编译原理 3 微服务
11 Python科学计算 4 综合
12 汇编语言 1 编程语言
```
第2种 不使用多表联查,用两条SQL查询,在程序中组装数据
```
// 1. 查询图书列表
SELECT * FROM book
// 2. 通过上一步得到的图书列表,取出所有分类id,并去重
// ids = {4 ,1 ,2, 3}
// 3. 通过IN语句,查询分类表得到分类名称,存到一个Map中,分类id为Key,Value为分类名称
SELECT name FROM category WHERE id IN (4,1,2,3)
// 4. 给第一步得到的图书对象,设置对应的分类名称,可以很方便的从第3部中得到的Map中获取
```