我有2个包含不同信息集的数据库,我基本上是尝试根据标准加入信息。
更确切地说。我有2个数据库,结构如下。
Table: accounts
------------------------
ID | Username | Password
------------------------
1 | John | ........
2 | Kyle | ........
3 | Jenny | ........
Table: userdata
-------------------------
userid | DataCash | DataLevel
-------------------------
1 | 500 000$ | 100
2 | 999 000$ | 16
3 | 600$ | 53
我基本上想要做的是节省时间,节省大量时间。到现在为止,我一直在使用手动方法思考,我会轻松地进行查询。但实际上并非如此。
到目前为止,我会做这样的事情:
SELECT * FROM userdata WHERE userid = X
之后
SELECT username FROM accounts WHERE id = X
现在随着数据库的增长,手动执行此操作变得越来越困难。 P.S:我基本上这样做是为了制作一个Top5(数据库是SQLite,因此除了SQL语法之外我什么也得不到)
我已经读过有必要使用JOIN
但到目前为止我无法弄清楚任何事情。以下是我试过的查询(我相信我错过了一些东西,但我不确切知道是什么)。
SELECT userid, key, value FROM userdata JOIN userdata ON id = userdata.userid WHERE LENGTH(value) = 2
这是我从另一个问题中提取出来的一个问题,但老实说,即使在尝试阅读JOIN
上的MySQL帮助页面后,我也无法理解JOIN
的工作方式
为了确保自己足够清楚,因为我相信可能会因为跨越这么多行而忽略了问题的轨迹,我想在运行查询后得到以下结果格式:
Username | DataCash | DataLevel
因此,加入后,它会从帐户中获取数据,并将userid
替换为Username
答案 0 :(得分:2)
SQL JOIN
子句用于组合来自两个表(在您的案例中)的行,基于它们之间的公共字段,即表id
中的列accounts
和列表userid
中的userdata
。
不同类型:
INNER JOIN
(短名称JOIN
):当BOTH表中至少有一个匹配时返回所有行LEFT JOIN
:返回左表中的所有行,以及右表中匹配的行RIGHT JOIN
:返回右表中的所有行以及左表中匹配的行FULL JOIN
:当其中一个表中存在匹配时,返回所有行要查找所需的输出:
Select tbl_a.Username, tbl_b.Datacash, tbl_b.DataLevel
From accounts tbl_a ## <--left side table
join userdata tbl_b ## <--right side table
on tbl_a.id = tbl_b.userid;
注意:tbl_a和tbl_b是表别名。给他们一个临时名字或短名。