我有两个表:A,B。我需要从B中选择所有数据。 我可以这样做
SELECT id, b1, b2, ... b20 FROM A,B WHERE A.id = B.id;
这不是很酷的解决方案。如果我修改B的数据库,我将需要更新此语句。存在类似的东西?
SELECT *(B)
它从B中选择了所有数据,但没有从A中选择任何数据。
我的数据库
A
id
a1
a2
...
a20
B
id
b1
b2
...
b20
答案 0 :(得分:1)
使用以下查询:
SELECT * FROM B;
或
SELECT * FROM B INNER JOIN A ON A.id = B.id;
如果你想加入表A和B。
答案 1 :(得分:1)
因此,如果你想要认真地创建数据库,你不应该看到复杂的方式,而是效率和速度。所以我的建议是使用JOIN
,这是从两个或更多表中选择数据的最佳解决方案,因为这种方式尽可能快,至少对于我更清洁的方式,例如inserted select
。< / p>
你写道:I need to select all data from B
这意味着SELECT * FROM B
不是你写的。
我对你的建议是使用这个:
SELECT * FROM A <INNER / LEFT / RIGHT / NATURAL> JOIN B ON A.id = B.id;
或选择特定列
SELECT A.column1, A.column2, ... FROM A <INNER / LEFT / RIGHT / NATURAL> JOIN B ON A.id = B.id;
注意:强>
自主要密钥以来,NATURAL JOIN将在上面的示例中起作用 并且两个表中的外键具有相同的名称。所以你必须非常 在没有正确使用的情况下小心使用NATURAL JOIN查询 匹配的列。
所以你真的应该考虑如何创建数据库以及如何使用数据库,如何从数据库中提取View数据,如何将新的潜在数据插入数据库等。
关心男人!
答案 2 :(得分:1)
我怀疑其他人已经充分回答了关于从表B中选择所有字段的问题。这很好,因为你真的应该理解SQL的基础知识。如果他们没有,我还建议你查看SQLite.org网站,了解SQLite理解的SQL语法。
但是,假设你已经回答了你的问题,我只想表达两个关于使用星号语法的警告。
首先,如果在稍后的某个日期,您向B添加一个大毛茸茸的blob(例如,一个多兆字节的图像)。如果您使用*
(或B.*
)语法检索B中的所有列,则可能会检索大量特定功能可能不需要的信息。如果您不需要,请不要从SQLite中检索数据。
其次,您的Objective C是根据结果的列名称还是根据相关列的索引号从select语句中检索数据。如果您正在使用后者,那么使用*
语法可能会很危险,因为如果表中列的物理顺序发生变化,您可能会破坏代码。
使用命名列可以解决内存/性能问题,即检索过多数据,以及将Objective C与SQLite中表的物理实现隔离开来。通常,我不建议开发人员在从SQL数据库中检索数据时使用*
语法。对于一个简单的项目来说,这可能不是一个问题,但随着项目变得更加复杂,您可能需要仔细考虑*
语法的含义。
答案 3 :(得分:0)
我不知道以下查询是否可以在sqlite中运行,我知道它可以在Oracle中运行,但你可以尝试一下......
SELECT B.* FROM A,B WHERE A.id = B.id;