1

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

4 回答 4

1

使用以下查询:

SELECT * FROM B;

或者

SELECT * FROM B INNER JOIN A ON A.id = B.id;

如果要连接表 A 和 B。

于 2012-05-27T18:55:30.563 回答
1

所以如果你想认真地创建数据库,你不应该看到方法的复杂性,而是效率和速度。所以我给你的建议是使用JOIN它是从两个或多个表中选择数据的最佳解决方案,因为这种方式尽可能快,至少对于我更清洁的例子来说inserted select

你写道: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 查询时必须非常小心。

因此,您确实应该考虑如何创建数据库以及如何使用数据库,如何从数据库中提取数据以供查看,如何将新的潜在数据插入数据库等。

问候男人!

于 2012-05-27T19:25:51.977 回答
1

我怀疑其他人已经充分回答了您关于从表 B 中选择所有字段的问题。这很好,因为您确实应该了解 SQL 基础知识。如果他们还没有,我还建议您查看SQLite.org站点以了解 SQLite 理解的 SQL 语法。

但是,假设您已经回答了您的问题,我只想对使用星号语法提出两个警告。

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

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

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

于 2012-05-28T04:35:33.127 回答
0

我不知道以下查询是否适用于 sqlite,我知道它适用于 Oracle,但您可以试一试...

SELECT B.* FROM A,B WHERE A.id = B.id; 
于 2012-05-27T18:59:52.287 回答