我有两个表: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
使用以下查询:
SELECT * FROM B;
或者
SELECT * FROM B INNER JOIN A ON A.id = B.id;
如果要连接表 A 和 B。
所以如果你想认真地创建数据库,你不应该看到方法的复杂性,而是效率和速度。所以我给你的建议是使用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 查询时必须非常小心。
因此,您确实应该考虑如何创建数据库以及如何使用数据库,如何从数据库中提取数据以供查看,如何将新的潜在数据插入数据库等。
问候男人!
我怀疑其他人已经充分回答了您关于从表 B 中选择所有字段的问题。这很好,因为您确实应该了解 SQL 基础知识。如果他们还没有,我还建议您查看SQLite.org站点以了解 SQLite 理解的 SQL 语法。
但是,假设您已经回答了您的问题,我只想对使用星号语法提出两个警告。
首先,如果在以后的某个日期,您向 B 添加一列,它是一个毛茸茸的大块(例如,一个多兆字节的图像)。如果您使用*
(or B.*
) 语法从 B 中检索所有列,您可能会检索到大量您可能不需要的特定功能的信息。如果不需要,不要从 SQLite 检索数据。
其次,您的目标 C 是根据结果的列名还是根据相关列的索引号从您的 select 语句中检索数据。如果您使用后者,那么使用*
语法可能会很危险,因为如果表中列的物理顺序发生变化,您可能会破坏您的代码。
使用命名列可以解决在检索过多数据方面的内存/性能问题,以及将 Objective C 与 SQLite 中表的物理实现隔离开来。一般来说,我不建议开发人员在*
从 SQL 数据库中检索数据时使用该语法。也许这对于一个琐碎的项目来说不是问题,但是随着项目变得越来越复杂,您可能需要仔细考虑*
语法的含义。
我不知道以下查询是否适用于 sqlite,我知道它适用于 Oracle,但您可以试一试...
SELECT B.* FROM A,B WHERE A.id = B.id;