繁体   English   中英

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

[英]Is exist a simple way to select all data from specific table

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

所以你真的应该考虑如何创建数据库以及如何使用数据库,如何从数据库中提取View数据,如何将新的潜在数据插入数据库等。

关心男人!

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

但是,假设您已经回答了您的问题,我只想表达关于使用星号语法的两个注意事项。

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

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

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

我不知道以下查询是否可以在sqlite中工作,我知道它在Oracle中有效,但是你可以尝试一下......

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM