存在一种从特定表中选择所有数据的简单方法

时间:2012-05-27 18:52:28

标签: sql ios sqlite

我有两个表: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

4 个答案:

答案 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语法。

但是,假设你已经回答了你的问题,我只想表达两个关于使用星号语法的警告。

  1. 首先,如果在稍后的某个日期,您向B添加一个大毛茸茸的blob(例如,一个多兆字节的图像)。如果您使用*(或B.*)语法检索B中的所有列,则可能会检索大量特定功能可能不需要的信息。如果您不需要,请不要从SQLite中检索数据。

  2. 其次,您的Objective C是根据结果的列名称还是根据相关列的索引号从select语句中检索数据。如果您正在使用后者,那么使用*语法可能会很危险,因为如果表中列的物理顺序发生变化,您可能会破坏代码。

  3. 使用命名列可以解决内存/性能问题,即检索过多数据,以及将Objective C与SQLite中表的物理实现隔离开来。通常,我不建议开发人员在从SQL数据库中检索数据时使用*语法。对于一个简单的项目来说,这可能不是一个问题,但随着项目变得更加复杂,您可能需要仔细考虑*语法的含义。

答案 3 :(得分:0)

我不知道以下查询是否可以在sqlite中运行,我知道它可以在Oracle中运行,但你可以尝试一下......

SELECT B.* FROM A,B WHERE A.id = B.id;