新闻动态
新闻动态
NEWS INFORMATION

SQL中的连接查询详解

发布日期:2022-07-15 19:31 | 文章来源:gibhub

Join连接(SQL Join)

SQL Join (连接)是利用不同数据表之间字段的关连性来结合多数据表之检索。

SQL Join是结合多个数据表而组成一抽象的暂时性数据表以供数据查询,在原各数据表中之纪录及结构皆不会因此连接查询而改变。

这是一个客户数据表「customers」:

C_Id

Name

City

Address

Phone

1

张一

台北市

XX路100号

02-12345678

2

王二

新竹县

YY路200号

03-12345678

3

李三

高雄县

ZZ路300号

07-12345678

而这是产品订单的数据表「orders」:

O_Id

OrderNo

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

其中,C_Id是客户数据表中的主键(Primary Key)字段,我们怎么将这两张不同的数据表依相关字段来作个连接结合以便查询呢?这就是接下来的主题Join!

SQL的Join查询有哪几种类型?

  • Inner Join :内部连接

  • LEFT (OUTER) JOIN :左外部连接

  • RIGHT (OUTER) JOIN :右外部连接

  • FULL (OUTER) JOIN :全部外部连接

  • CROSS JOIN :交叉连接

  • NATURAL JOIN :自然连接

INNER JOIN-内部连接

INNER JOIN (内部连接)为等值连接,必需指定等值连接的条件,而查询结果只会返回符合连接条件的数据。

INNER JOIN语法(SQL INNER JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

SELECT table_column1, table_column2···
FROM table_name1
INNER JOIN table_name2
USING (column_name);

INNER JOIN查询实例(Example)

现在我们想列出所有客户的订单编号数据,我们可以作一个INNER JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;

其中用点号连接之「XXX.YYY」表示XXX数据表中的YYY字段。

查询结果如下:

Name

Order_No

李三

2572

李三

7375

张一

7520

张一

1054

查询结果只会返回符合连接条件的数据!

LEFT JOIN-左外部连接

LEFT JOIN可以用来建立左外部连接,查询的SQL叙述句LEFT JOIN左侧数据表(table_name1)的所有记录都会加入到查询结果中,即使右侧数据表(table_name2)中的连接字段没有符合的值也一样。

LEFT JOIN语法(SQL LEFT JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

有些数据库的语法会是LEFT OUTER JOIN。

LEFT JOIN查询实例(Example)

现在我们想查询所有客户与其订单状况的数据,我们可以作一个LEFT JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
LEFT JOIN orders
ON customers.C_Id=orders.C_Id;

查询结果如下:

Name

Order_No

张一

7520

张一

1054

王二

李三

2572

李三

7375

LEFT JOIN会返回左侧数据表中所有数据列,就算没有符合连接条件,而右侧数据表中如果没有匹配的数据值就会显示为「NULL」。

RIGHT JOIN-右外部连接

相对于LEFT JOIN,RIGHT JOIN可以用来建立右外部连接,查询的SQL叙述句RIGHT JOIN右侧数据表(table_name2)的所有记录都会加入到查询结果中,即使左侧数据表(table_name2)中的连接字段没有符合的值也一样。

RIGHT JOIN语法(SQL RIGHT JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

有些数据库的语法会是RIGHT OUTER JOIN。

RIGHT JOIN查询实例(Example)

现在我们想查询所有订单与相应的客户之资料,我们可以作一个RIGHT JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
RIGHT JOIN orders
ON customers.C_Id=orders.C_Id;

查询结果如下:

Name

Order_No

李三

2572

李三

7375

张一

7520

张一

1054

1257

RIGHT JOIN会返回右侧数据表中所有数据列,就算是没有符合连接条件,而左侧数据表中如果没有匹配的数据值就会显示为「NULL」。

FULL JOIN-全部外部连接

FULL JOIN即为LEFT JOIN与RIGHT JOIN的联集,它会返回左右数据表中所有的纪录,不论是否符合连接条件。

FULL JOIN语法(SQL FULL JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name;

FULL JOIN查询实例(Example)

我们来作一个FULL JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
FULL JOIN orders
ON customers.C_Id=orders.C_Id;

查询结果如下:

Name

Order_No

李三

2572

李三

7375

张一

7520

张一

1054

1257

王二

MySQL数据库中没有FULL JOIN,但是您可以用UNION来模拟。

CROSS JOIN-交叉连接

交叉连接为两个数据表间的笛卡儿乘积(Cartesian product),两个数据表在结合时,不指定任何条件,即将两个数据表中所有的可能排列组合出来,以下例而言CROSS JOIN出来的结果资料列数为3×5=15笔,因此,当有WHERE、ON、USING条件时不建议使用。

CROSS JOIN语法(SQL CROSS JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
CROSS JOIN table_name2;

SELECT table_column1, table_column2···
FROM table_name1, table_name2;

SELECT table_column1, table_column2···
FROM table_name1
JOIN table_name2;

FULL JOIN查询实例(Example)

这是一个客户数据表「customers」:

C_Id

Name

City

Address

Phone

1

张一

台北市

XX路100号

02-12345678

2

王二

新竹县

YY路200号

03-12345678

3

李三

高雄县

ZZ路300号

07-12345678

而这是产品订单的数据表「orders」:

O_Id

Order_No

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

我们来作一个CROSS JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
CROSS JOIN orders;

查询结果如下:

Name

Order_No

张一

2572

王二

2572

李三

2572

张一

7375

王二

7375

李三

7375

张一

7520

王二

7520

李三

7520

张一

1054

王二

1054

李三

1054

张一

1257

王二

1257

李三

1257

NATURAL JOIN-自然连接

自然连接有NATURAL JOIN、NATURAL LEFT JOIN、NATURAL RIGHT JOIN,两个表格在进行JOIN时,加上NATURAL这个关键词之后,两数据表之间同名的字段会被自动结合在一起。

NATURAL JOIN语法(SQL NATURAL JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
NATURAL JOIN table_name2;

NATURAL JOIN查询实例(Example)

这是一个客户数据表「customers」:

C_Id

Name

City

Address

Phone

1

张一

台北市

XX路100号

02-12345678

2

王二

新竹县

YY路200号

03-12345678

3

李三

高雄县

ZZ路300号

07-12345678

而这是产品订单的数据表「orders」:

O_Id

Order_No

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

现在我们想列出所有客户的订单编号数据,我们可以作一个NATURAL JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
NATURAL JOIN orders;

查询结果如下:

Name

Order_No

李三

2572

李三

7375

张一

7520

张一

1054

注意到了吗?返回结果同等于下面这个INNER JOIN查询:

SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;

到此这篇关于SQL连接查询的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持本站。

海外稳定服务器

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部