您的位置:首页 > 数据库

Join 连接查询

2015-10-09 17:34 148 查看

Join连接查询

在大多数实际开发情况了,我们需要同时和多个表打交道,多表查询是数据库中使用频率最高效率攸关的操作了!

多表查询主要有两种方案:

连接查询

嵌套查询

这里主要介绍一下连接查询!

连接查询

连接查询,主要使用join关键字,建立多个表之间的联系。

连接查询可以分为,内连接和外连接,同时外连接又分为左连接和右连接。

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

JOIN: 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 只要其中一个表中存在匹配,就返回行

实例表结构如下:





内连接

INNER JOIN 与 JOIN 是相同的。

在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

SELECT
persons.FirstName,
persons.LastName,
orders.OrderNo
FROM
persons
INNER JOIN orders ON orders.id_P = persons.Id_P
ORDER BY
persons.FirstName




左连接

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

我们想知道所有人的信息,以及他们的订单号,如果有的话!

SELECT
persons.FirstName,
persons.LastName,
orders.OrderNo
FROM
persons
LEFT JOIN orders ON orders.id_P = persons.Id_P
ORDER BY
persons.FirstName


LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。



右连接

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

我们希望列出所有的定单,以及定购它们的人 - 如果有的话。

SELECT
persons.FirstName,
persons.LastName,
orders.OrderNo
FROM
persons
RIGHT  JOIN orders ON orders.id_P = persons.Id_P
ORDER BY
persons.FirstName




全连接

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。相当于左连接和右连接相加!

SELECT
persons.FirstName,
persons.LastName,
orders.OrderNo
FROM
persons
FULL  JOIN orders ON orders.id_P = persons.Id_P
ORDER BY
persons.FirstName


由于Mysql不支持全连接,这里就不写运行结果,可以通过Union关键字组合左右连接得到相同的效果!

自然连接

自然连接,是对数据表进行笛卡尔积操作。

SELECT
persons.FirstName,
persons.LastName,
orders.OrderNo
FROM
persons,orders
where orders.id_P = persons.Id_P
ORDER BY
persons.FirstName




嵌套查询

关于嵌套查询和连接查询的效率问题,下节课讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库