本文详细解释了SQL中的join查询,并通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
Join连接(SQL Join)
SQL Join就是利用不同数据表之间字段的相关性来组合多个数据表的检索。
SQL Join是一个抽象的临时数据表,结合多个数据表进行数据查询,原数据表中的记录和结构不会被Join查询改变。
这是一个客户数据表"客户":
身份证
名字
城市
地址
电话
一个
张毅
台北市
XX 100路
02-12345678
2
王二
新竹县
YY路200号
03-12345678
三
李三
高雄县
ZZ路300号
07-12345678
这是产品订单的数据表“订单”:
身份证号码
订单号
身份证
一个
2572
三
2
7375
三
三
7520
一个
四
1054
一个
五
1257
五
其中,C_Id是客户数据表中的主键字段。如何根据相关字段将这两个不同的数据表连接组合起来进行查询呢?这是下一个话题加入!
SQL的Join查询有哪几种类型?内部联接:内部联接
左(外)连接:左外连接
右(外)联接:右外联接
完全(外部)联接:所有外部联接
交叉连接:交叉连接
自然连接:自然连接
INNER JOIN内部连接
内连接(INNER JOIN)是一个等连接,所以必须指定等连接的条件,查询结果只会返回满足连接条件的数据。
INNER JOIN语法(SQL INNER JOIN Syntax)选择表_列1,表_列2
来自表名1
内部连接表_名称2
ON table _ name 1 . column _ name=table _ name 2 . column _ name;
或者
选择表_列1,表_列2
来自表名1
内部连接表_名称2
使用(列名);
INNER JOIN查询实例(Example)现在我们要列出所有客户的订单号数据。我们可以进行内部连接查询:
选择客户。名字,命令。订单编号
来自客户
内部联接顺序
对顾客。C _ Id=订单。C _ Id
“XXX在哪里。由点连接的“YYY”表示XXX数据表中的YYY字段。
查询结果如下:
名字
订单编号
李三
2572
李三
7375
张毅
7520
张毅
1054
查询结果只会返回符合连接条件的数据!
LEFT JOIN左外部连接
左连接可用于建立左外连接。SQL语句LEFT JOIN的左数据表(table_name1)中的所有记录都将被添加到查询结果中,即使右数据表(table_name2)的连接字段中没有匹配值。
LEFT JOIN语法(SQL LEFT JOIN Syntax)选择表_列1,表_列2
来自表名1
左连接表名2
ON table _ name 1 . column _ name=table _ name 2 . column _ name;
一些数据库的语法将被左外连接。
LEFT JOIN查询实例(Example)现在我们想查询所有客户的数据及其订单状态。我们可以做一个左连接查询:
选择客户。名字,命令。订单编号
来自客户
左连接顺序
对顾客。C _ Id=订单。C _ Id
查询结果如下:
名字
订单编号
张毅
7520
张毅
1054
王二
李三
2572
李三
7375
Left将返回左侧数据表中的所有数据行,即使不满足连接条件,如果右侧数据表中没有匹配的数据值,则显示为“NULL”。
RIGHT JOIN右外部连接
与左连接相比,右连接可用于建立右外连接。SQL语句RIGHT JOIN的右数据表(table_name2)中的所有记录都将被添加到查询结果中,即使左数据表(table_name2)的连接字段中没有匹配值。
RIGHT JOIN语法(SQL RIGHT JOIN Syntax)选择表_列1,表_列2
来自表名1
右连接表_名称2
ON table _ name 1 . column _ name=table _ name 2 . column _ name;
一些数据库的语法是右外连接。
RIGHT JOIN查询实例(Example)现在我们想查询所有的订单和相应的客户信息。我们可以进行右连接查询:
选择客户。名字,命令。订单编号
来自客户
右连接订单
对顾客。C _ Id=订单。C _ Id
查询结果如下:
名字
订单编号
李三
2572
李三
7375
张毅
7520
张毅
1054
1257
RIGHT JOIN将返回右侧数据表中的所有数据行,即使不满足连接条件,如果左侧数据表中没有匹配的数据值,将显示为“NULL”。
FULL JOIN全部外部连接
全联接是左联接和右联接的并集,它将返回左、右数据表中的所有记录,不管它们是否满足连接条件。
FULL JOIN语法(SQL FULL JOIN Syntax)选择表_列1,表_列2
来自表名1
完全连接表名2
ON table _ name 1 . column _ name=table _ name 2 . column _ name;
FULL JOIN查询实例(Example)让我们做一个完整的连接查询:
选择客户。名字,命令。订单编号
来自客户
完全加入订单
对顾客。C _ Id=订单。C _ Id
查询结果如下:
名字
订单编号
李三
2572
李三
7375
张毅
7520
张毅
1054
1257
王二
MySQL数据库中没有全联接,但是可以用UNION模拟。
CROSS JOIN交叉连接
交集是两个数据表之间的笛卡尔积。当两个数据表组合时,不指定任何条件,即组合两个数据表中所有可能的排列。在下面的示例中,交叉连接的结果数据的行数是35=15,因此当存在WHERE、on和USING条件时,不建议使用该方法。
CROSS JOIN语法(SQL CROSS JOIN Syntax)选择表_列1,表_列2
来自表名1
交叉连接table _ name2
或者
选择表_列1,表_列2
从表名1,表名2;
或者
选择表_列1,表_列2
来自表名1
JOIN table _ name2
FULL JOIN查询实例(Example)这是一个客户数据表"客户":
身份证
名字
城市
地址
电话
一个
张毅
台北市
XX 100路
02-12345678
2
王二
新竹县
YY路200号
03-12345678
三
李三
高雄县
ZZ路300号
07-12345678
这是产品订单的数据表“订单”:
身份证号码
订单编号
身份证
一个
2572
三
2
7375
三
三
7520
一个
四
1054
一个
五
1257
五
让我们创建一个交叉连接查询:
选择客户。名字,命令。订单编号
来自客户
交叉连接订单;
查询结果如下:
名字
订单编号
张毅
2572
王二
2572
李三
2572
张毅
7375
王二
7375
李三
7375
张毅
7520
王二
7520
李三
7520
张毅
1054
王二
1054
李三
1054
张毅
1257
王二
1257
李三
1257
NATURAL JOIN自然连接
自然有自然联接,自然左联接,自然右联接。当两个表合并时,添加关键字NATURAL后,两个数据表之间同名的字段会自动合并。
NATURAL JOIN语法(SQL NATURAL JOIN Syntax)选择表_列1,表_列2
来自表名1
自然连接table _ name2
NATURAL JOIN查询实例(Example)这是一个客户数据表"客户":
身份证
名字
城市
地址
电话
一个
张毅
台北市
XX 100路
02-12345678
2
王二
新竹县
YY路200号
03-12345678
三
李三
高雄县
ZZ路300号
07-12345678
这是产品订单的数据表“订单”:
身份证号码
订单编号
身份证
一个
2572
三
2
7375
三
三
7520
一个
四
1054
一个
五
1257
五
现在我们要列出所有客户的订单号数据。我们可以创建一个自然的连接查询:
选择客户。名字,命令。订单编号
来自客户
自然加入订单;
查询结果如下:
名字
订单编号
李三
2572
李三
7375
张毅
7520
张毅
1054
你注意到了吗?结果等效于以下内部联接查询:
选择客户。名字,命令。订单编号
来自客户
内部联接顺序
对顾客。C _ Id=订单。C _ Id
就是这样。这里介绍的是关于SQL连接查询的这篇文章。希望对大家的学习有帮助,也希望大家多多支持。