SQL 关联查询,只关联表中最大或者最小的数据的两种思路

表结构

user

idname
1dog
2cat

book

idnameuser_idscore
1数学1100
2语文2120
3英语1190
4数学21130

1 , 对关联表进行限制, 限制表中的最大值

SELECT
	* 
FROM
	`user` us
	JOIN book bk ON us.id = bk.user_id 
	AND bk.id = (SELECT id FROM book ORDER BY score DESC limit 1)

结果:
在这里插入图片描述
此方法能只关联 book 表中最大的记录

2 , 需要关联 book 中每一个user_id 的最大值

使用过滤中间表, filterTable, 先过滤过最大的, 然后分组, 再进行关联

SELECT
	* 
FROM
	`user` us
	JOIN ( 
		SELECT MAX(score) score, user_id FROM book  GROUP BY user_id 
	) filterTable ON us.id = filterTable.user_id
	JOIN book bk ON bk.user_id = filterTable.user_id AND bk.score = filterTable.score

结果:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 SQL 中,我们可以使用 `JOIN` 关键字来两个表关联查询。例如,假设有两个表:`table1` 和 `table2`,并且它们之间有一个关联字段 `field1`。你可以使用如下的语句来两个表关联查询: ``` SELECT * FROM table1 JOIN table2 ON table1.field1 = table2.field1; ``` 你也可以使用多种不同的 `JOIN` 类型来执行不同的关联方式,例如 `INNER JOIN`、`LEFT JOIN` 或 `RIGHT JOIN`。 你还可以使用 `WHERE` 子句来筛选结果,或者使用 `GROUP BY` 和 `HAVING` 子句来对结果进行分组和过滤。 总的来说,使用 `JOIN` 关键字来两个表关联查询是一种常用的方法,并且可以通过指定不同的关联类型和过滤条件来获取所需的信息。 ### 回答2: 在SQL中,可以使用JOIN语句将两个表进行关联查询关联查询是通过共享一个或多个列的值来合并两个表的行。 常见的JOIN操作包括: 1. 内连接(INNER JOIN):返回两个表中满足连接条件的行。语法如下: ``` SELECT 列名 FROM 表1 JOIN 表2 ON 连接条件; ``` 2. 左连接(LEFT JOIN):返回左表中的所有行,并包括右表中满足连接条件的行。语法如下: ``` SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 连接条件; ``` 3. 右连接(RIGHT JOIN):返回右表中的所有行,并包括左表中满足连接条件的行。语法如下: ``` SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 连接条件; ``` 4. 全连接(FULL JOIN):返回左右两个表中的所有行,并包括满足连接条件的行。语法如下: ``` SELECT 列名 FROM 表1 FULL JOIN 表2 ON 连接条件; ``` 在连接条件中,通常使用相等操作符(=)来比较两个表中的列值。连接条件可以是单个条件,也可以是多个条件的组合。 例如,假设有一个"Customers"表和一个"Orders"表,可以通过以下查询来关联查询两个表中数据: ``` SELECT * FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` 这将返回所有在"Customers"表中有对应订单的行。根据具体需求,可以选择合适的连接操作来满足查询的目标。 ### 回答3: 在SQL中,可以使用JOIN关键字将两个或多个表进行关联查询。常用的JOIN有以下几种: 1. 内连接(INNER JOIN):返回两个表中满足连接条件的行。语法如下: SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.关联列 = 表2.关联列; 例如,要查询订单表和客户表中匹配的数据: SELECT 订单表.订单号, 客户表.客户名 FROM 订单表 INNER JOIN 客户表 ON 订单表.客户ID = 客户表.客户ID; 2. 左连接(LEFT JOIN):返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,返回NULL值。语法如下: SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列; 例如,要查询客户表中的所有客户以及已经下过的订单: SELECT 客户表.客户名, 订单表.订单号 FROM 客户表 LEFT JOIN 订单表 ON 客户表.客户ID = 订单表.客户ID; 3. 右连接(RIGHT JOIN):返回右表中的所有行,以及左表中满足连接条件的行。如果左表中没有匹配的行,返回NULL值。语法如下: SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列; 例如,要查询订单表中的所有订单以及对应的客户信息: SELECT 订单表.订单号, 客户表.客户名 FROM 订单表 RIGHT JOIN 客户表 ON 订单表.客户ID = 客户表.客户ID; 以上三种关联查询方式可以根据实际需求进行选择和组合,以满足查询的需要。同时,在进行关联查询时,需要确保关联列的数据类型和值是相同的,以避免查询结果的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值