sql多表连接查询3个表

底线:如果要连接多个表,首先找到公共列。

语言:首先,在所有三个表中找到相同的列。

具体项目:客户、订单、产品表等都有客户ID。

结论:连接类型取决于您的要求。

白话:您想要所有数据还是只想要匹配的数据?
特定字段:INNER JOIN必须匹配,LEFT JOIN必须有完整的左表,RIGHT JOIN必须有完整的右表。

结论:JOIN顺序是从左到右。

语言:首先选择您要连接的表,然后单击该表。

具体项目:比如先连接customer表,再连接orders表。

结论:前面的时钟体积小,性能好。

语言:首先连接记录较少的表,从而加快速度。

具体项目:比如orders表比较小,先连接orders表。

结论:明确您的目标并进一步列出它们。

语言:了解您需要什么,不要选择太多列。

具体项目:只选择需要的列,不使用SELECT。

底线:索引连接列速度很快。

语言:连接的列已建立索引,查询速度很快。

具体项目:客户ID、订单ID、索引。

结论:如果您使用 WHERE 过滤,您的结果将是准确的。

语言:使用 WHERE 条件仅查看您需要的内容。

具体项目:如果订单日期在2 02 1 年之后。

结论:表别名,代码清晰。

语言:为您的表格命名,使您的代码更易于阅读。

具体项目:客户AS c.
自己掂量一下。

SQL Server多表查询JION和IN,到底哪个更高效?

第五关:多表查询

说实话,多表查询还是比较混乱的。
但分解它要容易得多。

1 .表添加 (UNION)
UNION 包括合并两个表。
请注意,这两个表必须具有相同的结构。
例如,表1 有A列和B列,表2 也有A列和B列,因此可以使用UNION。

使用 UNION 时,默认会删除重复行。
如果你想保留重复的行,你应该使用UNION ALL。

写法是这样的:
sql 从表1 中选择列名1 、列名2 联盟 从表2 中选择列名1 、列名2 ;
如果使用 UNION ALL:
sql 选择表1 中的列名1 、列名2 联合所有 从表2 中选择列名1 、列名2 ;
请注意以下几点:列数必须相同并且列类型必须相同。
ORDER BY 只能使用一次,通常在最后一个 SELECT 之后。

2 表连接 (JOIN)
连接涉及连接两个表。
表之间必须有公共字段,例如表ID 1 和表ID 2
1 .交叉连接/笛卡尔积(CROSS JOIN)
这涉及将一个表的每一行与另一个表的每一行合并。
结果将是显着的,因此较少使用它。

编写:
sql 从表1 中选择列名1 、列名2 ,与表2 交叉连接;
2 . INNER JOIN
这涉及查找两个表中的数据。

编写:
sql 选择表1 中的列名1 、列名2 、表2 在表1 上的内联接。
公共字段 = 表2 .公共字段;
3 . LEFT JOIN
左连接基于左边的表。
左表中的所有数据都是必需的,右表只取与左表匹配的数据。
如果右边没有匹配项,请填空。

编写:
sql 从表1 中选择列名1 、列名2 ,左连接表2 到表1 公共字段 = 表2 .公共字段;
4 . RIGHT JOIN
右连接与左连接相反,右边的表为主表。

编写:
sql 从表1 中选择列名1 、列名2 ,将表2 右连接到表1 .common fields = 表2 .common fields;
5 .全连接(FULL JOIN)MySQL不支持全连接。
完全连接将返回两个表中的所有数据,合并匹配的数据,如果不匹配则填充空白。

3 执行连接的顺序以及如何使用它们
连接从左到右运行,但可以使用括号更改顺序。

使用联接时:

如果有多个表,请使用联接。

如果您想要一个具有固定行数或表中所有数据的表单,请使用左/右连接。

在其他情况下,使用内连接来获取两个表的公共部分。

记住,选择多个表时,必须在列名之前添加表别名。
如果主表不包含从表的数据,只需在WHERE子句中将从表连接的列写为=NULL即可。

4 CASE表达式
CASE表达式是一个判断有条件的。
如果满足条件,则显示一个值,如果不满足,则显示另一值。

编写:
sql 案例 当你判断表达式1 时,则输出值1 当你判断表达式2 时,则输出值2 ... 否则默认值 结束
注意几点:ELSE后面的默认不需要写,但是END不能。
CASE 表达式可以在 SQL 中的任何地方使用。