当我必须从不同的表中选择多个字段时:
提前致谢。
答案 0 :(得分:1)
非常广泛的问题,我建议先做一些阅读,但总结一下: 1.加入可以让生活变得更轻松,查询更快,在坚果壳中尝试 2.具有您正在寻找的数据的那些 3.两个表中的字段,并且通常在至少一个表中是唯一的 4.是的,基本上你是在创建一个带连接的大表。如果有两个具有相同名称的字段,则需要通过表name.columnname
引用它们答案 1 :(得分:1)
将联接视为一种使用来自多个不同来源的数据创建新表(仅用于运行查询)的方法。如果没有一个具体的例子,我们假设我们有一个包含这两个表的汽车数据库:
CREATE TABLE car (plate_number CHAR(8),
state_code CHAR(2),
make VARCHAR(128),
model VARCHAR(128),);
CREATE TABLE state (state_code CHAR(2),
state_name VARCHAR(128));
如果您想要获取数据库中所有Hondas的车牌列表,该信息已包含在car
表中。您可以简单地SELECT * FROM car WHERE make='Honda';
同样,如果您想要一个以“A”开头的所有州的列表,您可以SELECT * FROM state WHERE state_name LIKE 'A%';
在任何一种情况下,由于您已经拥有了包含所需信息的表格,因此无需加入。
你甚至可能想要一张带有科罗拉多板块的汽车列表,但是如果你已经知道“CO”是科罗拉多州的州代码,你可以SELECT * FROM car WHERE state_code='CO';
再一次,你需要的信息都在一个地方,所以不需要加入。
但是假设您想要一份Hondas列表,包括他们注册的州的名称。该信息尚未包含在数据库的表中。您需要通过联接“创建”一个:
car INNER JOIN state ON (car.state_code = state.state_code)
请注意,我完全没有说明我们SELECT
的内容。这完全是一个单独的问题。我们还没有应用WHERE
子句来限制结果中包含哪些行。这也是一个单独的问题。我们用连接解决的唯一问题是从两个表中获取数据。实际上,我们现在有一个名为car INNER JOIN state
的新表,car
中的每一行都加入了state
中具有相同state_code
的每一行。
现在,从这个新的“表格”我们可以应用一些条件并选择一些特定字段:
SELECT plate_number, make, model, state_name
FROM car
INNER JOIN state ON (car.state_code = state.state_code)
WHERE make = 'Honda'
那么,为了更直接地回答你的问题,你是否总是需要加入表格?是的,如果您打算从两者中选择数据。您无法从car
表中选择不在car
表中的字段。您必须先加入您需要的其他表格。
您需要加入哪些表格?无论哪个表包含您要查询的数据。
您必须使用哪些字段?无论哪个领域都相关。在这种情况下,汽车和州之间的关系是通过两个表中的state_code
字段。我可以很容易地写出
car INNER JOIN state ON (state.state_code = car.plate_number)
对于每辆车,这将显示任何其缩写恰好与汽车的车牌号匹配的州。当然,这是荒谬的,可能没有结果,但就您的数据库而言,它是完全有效的。只有你知道state_code
是相关的。
加入会影响SELECT
ed字段或WHERE
条件吗?并不是的。您仍然可以选择所需的任何字段,您仍然可以将结果限制为您想要的任何行。有两点需要注意。
首先,如果两个表中都有相同的列名(例如state_code
),则无法在不明确要求的表的情况下选择它。在这种情况下,我可能会写SELECT car.state_code ...
其次,当您使用INNER JOIN
(或在许多数据库引擎上只使用JOIN
)时,仅返回符合您的加入条件的行。因此,在我寻找与汽车牌照相匹配的州代码的荒谬例子中,可能不会有任何匹配的状态。不会返回任何行。因此,尽管您仍然可以使用WHERE
条款,但如果您有INNER JOIN
,则您的结果可能已受到该条件的限制。
答案 2 :(得分:0)
我是否总是需要加入桌子?
不 - 如果您愿意,可以执行多项选择
我需要加入哪些表?
您想要数据的任何内容(并且需要彼此相关)
我必须使用哪些字段 加入/秒?
在连接中的任何表中都是相同的(通常是主键)
联接效果是否反映在select子句中指定的字段或其中的条件?
不,但是外连接可能会导致问题
答案 3 :(得分:0)
(1)除了表格,您还希望加入mySQL吗?
(2)您想要关联和检索字段(=数据)的那些
(3)最好使用索引字段(唯一标识符)来加入,因为这很快。例如加入 检索用户电子邮件和2表db中的所有用户注释 (使用表:tableA = user_settings,tableB = comments)并且都具有列uid以通过用户来区分用户 select * from user_settings as uset join comments as c on uset.uid = c.uid where uset.email =“test@stackoverflow.com”;
(4)两个......