2012-05-12 197 views
2

所以,我沒有任何運氣找到任何文章或查詢語言結合究竟如何運作與一般使用的編程語言如C++或VB已經向我解釋論壇帖子的作用。所以我想這不會傷害要問>。 <困惑的查詢語言

基本上,我一直很難理解查詢語言的作用(如果我創建一個簡單的數據庫,我們將使用SQL作爲查詢語言的示例和VB6的常規語言)用普通信息(姓,名,地址等)填充表的查詢。我有點知道使用ado對象來建立這樣一個程序的步驟,以及什麼,但是我們如何確定2的哪一種語言被用於某些事情? vb6是否特別處理了像循環這樣的基礎知識,如果其他的,你的變量的聲明和SQL特別處理連接到數據庫和執行搜索,過濾和排序等事情?是否有可能在SQL語法中使用某些常規使用的vb6動作(循環或條件)?任何幫助將不勝感激。

回答

5

SQL是查詢數據庫的語言。 SQL是ISO standard,關係數據庫供應商實現ISO標準,然後添加他們自己的定製。例如在SQL Server中稱爲T-SQL,在Oracle中稱爲PL-SQL。他們都實現ISO標準,所以每次都會有一個簡單的相同的查詢選擇像

select columname from tablename where columnname=1 

然而,每個有字符串函數,日期函數等不同的語法....

的ISO SQL標準通過設計並不是一個完整的過程語言,像VB這樣的完整過程語言,它具有循環,子程序等。

然而,每個供應商增加了功能,其版​​本添加一些此功能在。

例如兩個T-SQL和PL-SQL可以「循環」,通過使用各種結構在他們的語言記錄。

當處理許多開發人員不熟悉的數據時,也有不同之處。這是基於操作與基於程序的集合。

數據庫可以使用程序結構,但通常更具有基於集合的性能。不熟悉這個概念的開發人員最終可能會創建一個非常無效的查詢。 Here's an example of this discussion

在任何情況下,您必須權衡Pro/con的最佳做法。

我傾向於傾向於使用程序結構,例如我在SQL上使用的語言中的循環。我發現它更容易維護,我使用的語言爲我完成工作提供了更強大的語法。

但是,我保留這兩個選項作爲工具箱中的一個工具。例如,我在SQL中編寫了數據轉換腳本,在這種情況下,我使用了SQL中的循環結構。

+0

這清理了我的大部分困惑。謝謝哥們。 – Garrettchap1

1

通常編程語言是在客戶端執行(應用服務器也是如此),和查詢語言在數據庫服務器中執行,所以最後這取決於你想要把所有的工作。有時你可以通過編程語言進行所有的計算,並在其他時候使用更多的數據庫服務器,並最終使用查詢語言,甚至更好的tsql/psql或其他方式來完成大量的工作。

+0

我認爲這個答案符合問題遠遠好於其他人提出的問題。不過,也許最初提出的問題並不是真正的OP,而是想知道「SQL做什麼?」的答案。 – Bob77

1

關係數據庫旨在管理數據。特別是,它們提供了一種有效的機制來管理大量數據的內存,磁盤和處理器。另外,關係數據庫可以處理多個客戶端,保證事務完整性,安全性,備份,持久性和許多其他功能。

在一般情況下,如果你使用的是RDBMS用另一種語言,要在兩者之間首先設計數據結構,然後想想API(應用程序編程接口)。當你有應用程序/服務器關係時尤其如此。

對於一個「簡單」類型的應用程序,它使用了大量的數據,但以最小的或批量更改,要儘可能多的處理移動到數據庫中是合理的。以下是您不想做的事情:

  1. 使用查詢將數組加載到數組中,然後在語言級別執行數組操作。 SQL爲此提供了連接。
  2. 將數據加載到數組中,並對數組進行操作和總結。 SQL爲此提供了聚合。
  3. 將數據保存到文件中進行備份。數據庫提供備份機制。

如果您的數據適合數組或Excel電子表格,那麼開始使用存儲在那裏的數據通常就足夠了。只有當您開始擴展需求(多個客戶端,安全性,與其他數據的集成)時,數據庫的優勢纔會變得更加明顯。

這些只是指導,並給你一些想法。

1

在做什麼的地方,儘可能多地在SQL(儘管它運行在服務器上)是合理的。

因此,例如,不要做這樣的東西(僞代碼)

foreach(row in "Select * from Orders") 
    if (row[CustomerID] = 876) 
    Display(row) 

foreach(row in "Select * from Orders where CustomerId = 876") 
    Display(row) 

首先,它很可能訂單是由客戶ID索引,以便它可以找到所有876s訂購方式更快。

第二次做的第一件事就是將表中的每條記錄都吸引到客戶端的內存空間中,可能是通過您的網絡。

使用什麼語言本質上是不相關的,你可以用它自己的語言創建你自己的DBMS。

這是你做什麼處理的地方。它的規則有例外,但基本的想法是讓你的後端儘可能地做到這一點。