2012-05-27 32 views
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 

回答

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; 

注:

自然連接將工作在上面的例子,因爲主鍵 和兩個表中的外鍵都有s阿姆名字。因此,如果沒有適當的 匹配列,您必須非常小心地使用NATURAL JOIN查詢。

那麼你真的應該考慮一下你將如何創建數據庫,你將如何與數據庫,你將如何從數據庫中提取數據視圖的工作,你將如何插入新的潛在的數據到數據庫等

問候男人!

1

使用下面的查詢:

SELECT * FROM B; 

SELECT * FROM B INNER JOIN A ON A.id = B.id; 
如果你想加入臺A

和B.

0

我不知道,如果下面的查詢會在sqlite的工作,我知道它在甲骨文,但你可以給它一個嘗試...

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

這是很好的功能,但它不適用於SQL。 – Voloda2

1

我懷疑其他人已經充分回答了關於從表B中選擇所有字段的問題。這很好,因爲您應該瞭解SQL基礎知識。如果他們沒有,我還建議您查看SQLite.org網站,瞭解SQLite可以理解的SQL語法。

但是,假設你已經回答了你的問題,我只想說兩句關於使用星號語法的警告。

  1. 首先,如果在以後某個時候,你加什麼到B柱是一個很大的毛茸茸的BLOB(例如數兆圖像)。如果您使用*(或B.*)語法從B中檢索所有列,那麼您可能會檢索大量您可能不需要用於特定功能的信息。如果你不需要,不要從SQLite中檢索數據。

  2. 其次,您的Objective C是根據結果的列名或基於所討論的列的索引號從您的select語句中檢索數據。如果你使用後者,那麼使用*語法可能會很危險,因爲如果表中列的物理順序發生更改,則可能會破壞代碼。

使用命名列可以解決的內存/性能問題的問題,在獲取太多的數據,以及隔離的物理實現SQLite中的表的目標C的條款。通常,我不會建議開發人員在從SQL數據庫檢索數據時使用*語法。也許這對於一個簡單的項目來說不是問題,但是隨着項目變得更加複雜,您可能需要仔細考慮*語法的含義。

+0

您的解釋非常有幫助。星號不如我想象的那麼好。 – Voloda2

相關問題